Oracle数据库常用命令17认证网

正规官方授权
更专业・更权威

Oracle数据库常用命令

Oracle多租户概念:在Oracle软件架构中,指Oracle数据库软件系统能够同时为多个独立的租户(用户或组织)提供服务,各租户之间数据和配置相互隔离。

检查Oracle数据库版本

select version from v$instance;
select * from v$version;

Oracle查看数据库字符集

sql>select userenv(‘language’) from dual;

如上图,Oracle字符集 查询结果为: UTF8。

Oracle查询对象 v_east4_zy_dtls 是视图还是表的方法【dba_objects】

su – oracle
sqlplus / as sysdba
alter session set container=tbsdbi9;
col object_name for a30
col object_type for a30
set line 200
select object_name,object_type from dba_objects where owner=upper(‘customer’) and object_name=upper(‘v_east4_zy_dtls’);

Oracle查询大于100秒的慢SQL【v$sql

su – oracle

sqlplus / as sysdba

alter session set container=tbsdbi9;

spool /home/oracle/slowsql.txt

select sql_text,elapsed_time/1000000 as elapsed_sec,cpu_time/1000000 as cpu_sec,executions from v$sql where elapsed_time>100000000 order by elapsed_time desc;

spool off

Oracle使用sys用户查询普通用户 customer 用户下有哪些表【dba_tables】

su – oracle
sqlplus / as sysdba
alter session set container=tbsdbi9;
col owner for a30
col table_name for a30
set line 100
select owner,table_name from dba_tables where owner=upper(‘customer’);

Oracle解锁用户

sqlplus / as sysdba
SQL>alter user scott account unlock;#无需提交【commit】
重新使用scott用户登录,会提示旧密码已经失效,需要重新设置新密码,设置完毕即可,重新登录正常。

查看HR用户的账号状态

SQL>select username,user_id,account_status from dba_users where username=’HR’;

Oracle查看表空间大小是否自增长

select tablespace_name,autoextensible from dba_data_files;

Oracle 手动生成一次AWR【生成报告时可以看到对应的begin id】

BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
/

Oracle 查看AWR 报告的统计时间间隔和保留天数

SQL> col dbid for 99999999
SQL> col snap_interval for a30
SQL> col retention for a30
SQL> col topnsql for a30
SQL> col con_id for 9999
SQL> col src_dbid for 9999
SQL> col src_dbname for a20
SQL> set line 200
SQL> select * from dba_hist_wr_control;

从结果来看,AWR报告每隔 1小时采集一次数据,默认保留8天的快照信息。
将AWR采样调整为,每隔 1小时采集一次,采样保留14天【60*24*14=20160】
SQL> execute dbms_workload_repository.modify_snapshot_settings(interval => 60,retention => 20160);
将AWR采样调整为,每隔 30分钟采集一次,采样保留16天【60*24*16=23040】
SQL> execute dbms_workload_repository.modify_snapshot_settings(interval => 30,retention => 23040);
如果我们将采集间隔调整为 15分钟,采样数据保留2天,可以做如下调整:
SQL> BEGIN
dbms_workload_repository.modify_snapshot_settings(
interval  =>  15,
retention =>  2*24*60);
END;
/

执行以上命令报错

查看基线信息,结果为8天,以上报错是因为低于8天导致的报错。
SQL> select moving_window_size from dba_hist_baseline;

解决办法: 方法1.修改系统移动窗口基线大小为2天 方法2.将以上命令改为8天或大于8天即可
execute dbms_workload_repository.modify_baseline_window_size(2);
再次执行以上命令即可。
Oracle DBCA工具默认日志路径:$ORACLE_BASE/cfgtoollogs/dbca
$cd $ORACLE_BASE/cfgtoollogs/dbca

Oracle 查看已经淘汰/弃用的参数

SQL>col name for a30
SQL>col description for a50
SQL>select name, description from v$parameter where isdeprecated = ‘TRUE’;

Oracle 查看表空间使用情况

SQL>select tablespace_name,round(MAXmb,2) as max_mb,round(AllocMb,2) as alloc_mb,round(freemb,2) as free_mb, round((AllocMb-freemb)/MAXmb,3)*100 as use_ratio from(select a.tablespace_name,sum(a.bytes)/1024/1024 AllocMb,sum(decode(a.AUTOEXTENSIBLE,’YES’,a.maxbytes,a.bytes))/1024/1024 MAXmb,b.mb freemb from sys.dba_data_files a,(select tablespace_name,sum(bytes)/1024/1024 as mb from sys.dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name group by a.tablespace_name,b.mb);

Oracle 扩容表空间大小

1.确认需要重置表空间的名称
SQL> select tablespace_name,round(MAXmb,2) as max_mb,round(AllocMb,2) as alloc_mb,round(freemb,2) as free_mb, round((AllocMb-freemb)/MAXmb,3)*100 as use_ratio from(select a.tablespace_name,sum(a.bytes)/1024/1024 AllocMb,sum(decode(a.AUTOEXTENSIBLE,’YES’,a.maxbytes,a.bytes))/1024/1024 MAXmb,b.mb freemb from sys.dba_data_files a,(select tablespace_name,sum(bytes)/1024/1024 as mb from sys.dba_free_space group by tablespace_name) b where a.tablespace_name=b.tablespace_name group by a.tablespace_name,b.mb);
TABLESPACE_NAME            MAX_MB   ALLOC_MB    FREE_MB  USE_RATIO
—————————— ———- ———- ———- ———-
SYSTEM                 32767.98    1080       2.88        3.3
SYSAUX                 32767.98     960      83.63        2.7
USERS                 32767.98       5       2.31      0
SENDER                      500     500        .81       99.8
UNDOTBS1             32767.98     740     705.75     .1

2.确认需要重置表空间的数据文件

SQL> select name from v$datafile;
NAME
——————————————————————————–
/oracle/oradata/DW4OTHDB/system01.dbf
/oracle/oradata/DW4OTHDB/sysaux01.dbf
/oracle/oradata/DW4OTHDB/undotbs01.dbf
/oracle/oradata/DW4OTHDB/sender/sender.dbf
/oracle/oradata/DW4OTHDB/users01.dbf
3.扩容表空间大小
SQL> alter database datafile ‘/oracle/oradata/DW4OTHDB/sender/sender.dbf’ resize 15G;
SQL> alter database datafile ‘/oracle/oradata/DW4OTHDB/sender/sender.dbf’ autoextend on NEXT 50M maxsize 15G;
扩容报错:ORA-65114: space usage in container is too high
解决办法: 执行命令 SQL>alter pluggable database storage unlimited;
再次执行扩容

Oracle RAC集群中 重启数据库

oracle 用户执行以下命令【实例为orcl】:
srvctl stop database -d orcl
srvctl start database -d orcl

Oracle 检查RAC集群状态和RAC实例的状态

1.启停crs集群【集群启停都需要使用root用户】
#crsctlstart crs
#ps-ef | grep -v grep | grep d.bin#d.bin是集群软件的进程
#crsctlstop crs -f#强制停止crs集群
2.检查RAC集群状态
#su– grid
$crsctl stat res -t
3.检查RAC集群中实例的状态【集群中存在orc 和 orc1 两个实例】

#su– oracle

$srvctl status database -d orc
$srvctl status database -d orc1

Oracle 检查表空间中的大对象

SQL>select * from ( select SEGMENT_NAME,bytes/1024/1024/1024 gb from dba_segments where tablespace_name=’SYSAUX’ order by gb desc) where rownum<10;
SQL>select * from ( select SEGMENT_NAME,bytes/1024/1024/1024 gb from dba_segments where tablespace_name=’SYSTEM’ order by gb desc) where rownum<10;

发现大对象后的处理方法:

1.处理SYSAUX 表空间
SQL>truncate table WRH$_ACTIVE_SESSION_HISTORY:
SQL>truncate table WRH%_EVENT_HISTOGRAM;
2.处理SYSTEM 表空间
SQL>truncate table aud$;

Oracle 常见连接方式

Easy connect naming【简单的连接命名】:使用TCP/IP连接字符串。     例如: sqlplus hr/hr@192.168.80.3:1521/orclpdb7#1521默认端口可以省略
Local naming【本地命名】:使用本地配置文件【tnsnames.ora文件】。  例如: sqlplus hr/hr@orclpdb6#需要在tnsnames.ora文件中配置orclpdb6,本地命名可以和服务名不一样,orclpdb6是本地命名的名称,可以与服务名称一致,也可以不一致,连接的时候用到的时候本地命名,tnsnames.ora文件将本地命名和服务名关联起来
Directory naming【目录命名】:使用集中式ldap兼容的目录服务器。

Oracle 新建用户

sqlplus / as sysdba
目标:创建和YXXT_LZLJUSER用户相同表空间的新用户YXXT_LZLJUSER2
新建用户前,建议先创建表空间。
1.创建表空间
create tablespace YXXT_LZLJ logging datafile ‘/data2/oracle/app/oradata/webcloud/YXXT_LZLJ.dbf’ size 100M autoextend on next 32M maxsize 500M extent management local;
2.创建临时表空间
create temporary tablespace RAC_TEMP tempfile ‘/data2/oracle/app/oradata/webcloud/RAC_TEMP.dbf’ size 100M autoextend on next 32M maxsize 500M extent management local;
SQL>select username,user_id,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users where username=’YXXT_LZLJUSER’;
通过查看YXXT_LZLJUSER用户的默认表空间为:YXXT_LZLJ 临时表空间为:RAC_TEMP
创建YXXT_LZLJUSER2 用户【泸州老窖–税务云系统–测试环境:10.0.48.61,正常情况下,需要创建自己的表空间】
SQL>create user YXXT_LZLJUSER2 identified by Lzlj20231016 default tablespace YXXT_LZLJ temporary tablespace RAC_TEMP;
SQL>grant connect,resource to YXXT_LZLJUSER2;
SQL>grant create session to YXXT_LZLJUSER2;
SQL>grant unlimited tablespace to YXXT_LZLJUSER2;
SQL>grant create view to YXXT_LZLJUSER2;

Oracle用户修改密码【Oracle用户的密码不要带有@符号】

sqlplus / as sysdba
SQL>alter user scott identified by 123456;
SQL>alter user sys identified by 123456;

Oracle查看表空间对应的数据文件【查看 dba_data_files 表】

sqlplus / as sysdba
SQL>col tablespace_name for a30
SQL>col file_name for a50
SQL>set line 200
SQL>select tablespace_name,file_name from dba_data_files;

Oracle审计日志【Oracle默认开启了审计日志,”12C及更高版本的审计配置有变化,引入了 统一审计”】

1、查看审计日志配置【审计日志默认路径:$ORACLE_BASE/admin/$ORACLE_SID/adump】

重要说明: Oracle审计日志开关只影响 aud$ 表中是否记录信息,如果开启审计,则此表将记录信息,关闭后此表不记录信息。但是无论打开或者关闭都会在审计目录中生成审计文件!!!

sqlplus / as sysdba
SQL> show parameter audit
NAME                             TYPE     VALUE
———————————— ———– ——————————
audit_file_dest                  string     /u01/app/oracle/admin/orclcdb/adump
audit_sys_operations             boolean    TRUE
audit_syslog_level               string

audit_trail                      string     DB

unified_audit_common_systemlog   string
unified_audit_sga_queue_size     integer    1048576
unified_audit_systemlog          string
audit_file_dest         参数表示审计日志路径
audit_sys_operations    参数表示审计管理用户(以sysdba/sysoper角色登陆)
audit_trail             参数表示audit审计日志的开关【只针对数据库中的表】,此参数值有: db / none ,db 表示开启审计日志, none表示关闭审计日志

2、关闭审计日志
SQL>alter system set audit_trail=none scope=spfile;   #关闭日志审计命令【生产环境建议不要立即重启数据库,待下次进入维护期时再重启生效】
SQL>shutdown immediate
SQL>startup
3、开启审计日志
SQL>alter system set audit_sys_operations=TRUE scope=spfile;–审计管理用户(以sysdba/sysoper角色登陆)
SQL>alter system set audit_trail=db,extended scope=spfile;
SQL>shutdown immediate
SQL>startup
4、配置审计策略
#审计所有DDL操作
AUDIT ALL BY ACCESS;
#审计所有DML操作
AUDIT SELECT TABLE,INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS;
#查看审计记录
SQL> col action_name for a20
SQL> col obj_name for a20
SQL> col username for a20
SQL> set line 200
SQL> select action_name, obj_name,username from dba_audit_trail;

将Oracle数据库由只读状态变更为读写状态【non-cdb 和 cdb 都需要先关闭数据库再启动数据库】

SQL> show pdbs
CON_ID CON_NAME              OPEN MODE  RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED              READ ONLY  NO
3 ORCLPDB2              MOUNTED
4 ORCLPDB3              MOUNTED
5 ORCLPDB1              MOUNTED
6 ORCLPDB4              MOUNTED
7 ORCLPDB5              MOUNTED
8 ORCLPDB6              READ WRITE NO
9 ORCL_PDB              READ ONLY  NO
SQL> alter pluggable database orcl_pdb close;
Pluggable database altered.
SQL> alter pluggable database orcl_pdb open read write;#可以省略read write 关键字,默认以读写方式打开。
Pluggable database altered.
SQL> show pdbs
CON_ID CON_NAME              OPEN MODE  RESTRICTED
———- —————————— ———- ———-
2 PDB$SEED              READ ONLY  NO
3 ORCLPDB2              MOUNTED
4 ORCLPDB3              MOUNTED
5 ORCLPDB1              MOUNTED
6 ORCLPDB4              MOUNTED
7 ORCLPDB5              MOUNTED
8 ORCLPDB6              READ WRITE NO
9 ORCL_PDB              READ WRITE NO

检查Oracle连接信息

$ps -ef | grep -v grep | grep LOCAL
oracle    29365  29364  0 16:13 ?        00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle    29397  29396  0 16:14 ?        00:00:00 oracleorclcdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle    29422      1  0 16:14 ?        00:00:00 oracleorclcdb (LOCAL=NO)
oracle    29442      1  2 16:14 ?        00:00:01 oracleorcl (LOCAL=NO)
说明:
LOCAL=YES 表示都是通过本地tnsnames.ora配置进行连接。
LOCAL=NO 表示通过连接字符串进行的连接。

检查Oracle数据库启停状态

SQL>select status from v$instance;
SQL> select status from v$instance;
STATUS
————
OPEN

查看数据库打开模式

SQL>select open_mode from v$database;
SQL> select open_mode from v$database;
OPEN_MODE
——————–
READ WRITE

查看Oracle数据库的名字

SQL> show parameter db_name
SQL> show parameter db_name
NAME                     TYPE     VALUE
———————————— ———– ——————————
db_name                  string     demo01

删除Oracle数据库实例:例如删除demo01

$ORACLE_HOME/bin/dbca -silent -deleteDatabase -sourceDB demo01 -sid demo01 -sysPassword oracle_4U

查看Oracle数据库中有哪些实例:

cat /etc/oratab

切换Oracle 的环境变量

. oraenv

检查Oracle是否为RAC集群架构

select value from v$parameter where name = ‘cluster_database’;
或者
show parameter cluster_database;
如果cluster_database 的值为TRUE,表示为RAC 属于集群架构
如果cluster_database 的值为FALSE,表示非RAC,属于单机架构

查看数据库监听

$lsnrctl status
启动数据库监听
$lsnrctl start
查看数据库监听服务信息
$lsnrctl service
启动数据库
$sqlplus / as sysdba
sql>startup mount;
停止数据库
sql>shutdown immediate;
重启数据库
sql>shutdown immediate;
sql>startup;

查看数据库名字

show parameter db_name;

判断是否是容器数据库的命令

show parameter plugg

切换Oracle 的SID

. oraenv#直接输入SID回车
或者
export ORACLE_SID=orclcdb 切换

检查日志是否归档启用归档

archive log list;

Oracle启用归档

SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;

Oracle关闭归档

SQL> shutdown immediate
SQL> startup mount
SQL> alter database noarchivelog;
SQL> archive log list
SQL> select status from v$instance;
SQL> alter database open;
SQL> select status from v$instance;

查看ADR路径信息:

select * from v$diag_info;
检查Diag Trace 下面的路径即为日志路径
例如:/data2/oracle/app/diag/rdbms/orcl/orcl/trace

查看redo在线日志文件位置:

select member from v$logfile;
desc v$logfile;

查看数据库数据文件位置:

select name from v$datafile;

查看控制文件位置:

select name from v$controlfile;

检查数据库时区:

select dbtimezone from dual;

普通用户登录:

sqlplus webcloud/123456

管理员用户登录:

sqlplus / as sysdba

采用webcloud用户登录数据库

sqlplus webcloud/123456

查看当前连接数据库的用户

show user;

切换用户

切换到普通用户:conn username/password
切换到管理员用户:conn / as sysdba

查询当前用户有多少张表

select count(*) from user_tables;

创建表空间

create tablespace webcloud logging datafile ‘/data2/oracle/app/oradata/webcloud/webcloud.dbf’ size 100M autoextend on next 32M maxsize 500M extent management local;

创建临时表空间

create temporary tablespace webcloud_temp tempfile ‘/data2/oracle/app/oradata/webcloud/webcloud_temp.dbf’ size 100M autoextend on next 32M maxsize 500M extent management local;

创建用户

create user webcloud identified by 123456 default tablespace webcloud temporary tablespace webcloud_temp;

授予用户权限

DBA 和 sysdba 权限,对于普通用户不建议授予
GRANT CONNECT,RESOURCE,dba TO webcloud;
grant create session to webcloud;
GRANT SYSDBA TO webcloud;
以下授权属于普通用户的建议授权
SQL>grant connect,resource to YXXT_LZLJUSER2;
SQL>grant create session to YXXT_LZLJUSER2;
SQL>grant unlimited tablespace to YXXT_LZLJUSER2;
SQL>grant create view to YXXT_LZLJUSER2;

创建逻辑目录【使用要操作的oracle用户创建逻辑目录】

create directory webcloud as ‘/home/oracle/dmp’;

授权用户对逻辑目录进行读写操作

grant read,write on directory webcloud to public;
使其能够通过PL/SQL连接数据库
execute sys.dbms_metadata_util.load_stylesheets;

检查数据库是否存在webcloud用户

select username from dba_users where username=upper(‘webcloud’);
— 检查Oracle数据库版本 —
select * from v$version;

— 检查Oracle资源限制视图【主要关注processes 和 sessions 是否达到最大值】 —

select * from v$resource_limit;
select * from v$resource_limit where resource_name in (‘sessions’,’processes’);

— 修改processes的最大限制【修改后需要重启数据库】 —

alter system set processes=500 scope=spfile;

— 检查不活动的session数量【session的inactive状态是指语句已经执行完成,处于等待状态的session。通常是应用程序中没有释放的连接引起的】 —

select count(*) from v$session where status=’INACTIVE’;

— 检查坏的process【坏的process将导致session数目明显小于process数目】 —

select * from v$process where addr not in (select paddr from v$session);

— 查看Oracle日志路径【其中Diag Trace 对应VALUE表示Oracle日志路径】—

select * from v$diag_info;

查看session 参数配置

show parameter session name type value

查看process参数配置

SQL>show parameter process name type value

oracle查看所有表空间的名称及大小

SQL> select t.tablespace_name, round(sum(bytes / (1024 * 1024)), 0) || ‘M’ ts_size from dba_tablespaces t, dba_data_files d where t.tablespace_name = d.tablespace_name group by t.tablespace_name;

oracle查看表空间物理文件的名称及大小

SQL> col tablespace_name for a10
SQL> col file_id for 999
SQL> col file_name for a50
SQL> col bytes for a10
SQL> set line 200
SQL> select tablespace_name,file_id,file_name,round(bytes/(1024 * 1024 * 1024), 3) || ‘M’ total_space from dba_data_files order by tablespace_name;

oracle查看数据库的创建日期和归档方式

SELECT created, log_mode, log_mode FROM v$database;
–1G=1024MB
–1M=1024KB
–1K=1024Bytes
–1M=11048576Bytes
–1G=1024*11048576Bytes=11313741824Bytes
SELECT a.tablespace_name “表空间名”,
total “表空间大小”,
free “表空间剩余大小”,
(total – free) “表空间使用大小”,
total / (1024 * 1024 * 1024) “表空间大小(G)”,
free / (1024 * 1024 * 1024) “表空间剩余大小(G)”,
(total – free) / (1024 * 1024 * 1024) “表空间使用大小(G)”,
round((total – free) / total, 4) * 100 “使用率 %”
FROM (SELECT tablespace_name, SUM(bytes) free
FROM dba_free_space
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
FROM dba_data_files
GROUP BY tablespace_name) b
WHERE a.tablespace_name = b.tablespace_name;

oracle查看表的数据量大小

SQL> select sum(bytes)/1024/1024/1024 gb from dba_segments where segment_name=upper(‘p_mark_pool’);
SQL> select sum(bytes)/1024/1024/1024 gb from dba_segments where segment_name=upper(‘account_bank’);
SQL> select segment_name,sum(bytes)/1024/1024/1024 gb from dba_segments where segment_name in (‘P_MARK_POOL’,’P_MARK_RELATION’)group by segment_name;

oracle查询所有用户各自的表的数据量大小

SQL> col “用户名” for a20
SQL> col bytes for a30
SQL> set line 100
SQL> SELECT OWNER as “用户名”, sum(BYTES)/1024/1024/1024 as “所有表的大小(GB)” FROM DBA_SEGMENTS WHERE SEGMENT_NAME in (select t2.OBJECT_NAME from dba_objects t2 where t2.OBJECT_TYPE = ‘TABLE’) group by OWNER order by 2 desc;

版权申明:内容来源网络,版权归原创者所有,如有侵权请联系删除

想了解更多干货,可通过下方扫码关注

可扫码添加上智启元官方客服微信👇

未经允许不得转载:17认证网 » Oracle数据库常用命令
分享到:0

评论已关闭。

400-663-6632
咨询老师
咨询老师
咨询老师