Oracle多租户概念:在Oracle软件架构中,指Oracle数据库软件系统能够同时为多个独立的租户(用户或组织)提供服务,各租户之间数据和配置相互隔离。
检查Oracle数据库版本
select version from v$instance;
Oracle查看数据库字符集
sql>select userenv(‘language’) from dual;
如上图,Oracle字符集 查询结果为: UTF8。
Oracle查询对象 v_east4_zy_dtls 是视图还是表的方法【dba_objects】
alter session set container=tbsdbi9;
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】
alter session set container=tbsdbi9;
select owner,table_name from dba_tables where owner=upper(‘customer’);
Oracle解锁用户
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】
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
Oracle 查看AWR 报告的统计时间间隔和保留天数
SQL> col dbid for 99999999
SQL> col snap_interval for a30
SQL> col retention for a30
SQL> col src_dbid for 9999
SQL> col src_dbname for a20
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天,可以做如下调整:
dbms_workload_repository.modify_snapshot_settings(
执行以上命令报错
查看基线信息,结果为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 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 扩容表空间大小
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
UNDOTBS1 32767.98 740 705.75 .1
2.确认需要重置表空间的数据文件
SQL> select name from v$datafile;
——————————————————————————–
/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
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用户】
#ps-ef | grep -v grep | grep d.bin#d.bin是集群软件的进程
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;
发现大对象后的处理方法:
SQL>truncate table WRH$_ACTIVE_SESSION_HISTORY:
SQL>truncate table WRH%_EVENT_HISTOGRAM;
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 新建用户
目标:创建和YXXT_LZLJUSER用户相同表空间的新用户YXXT_LZLJUSER2
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;
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用户的密码不要带有@符号】
SQL>alter user scott identified by 123456;
SQL>alter user sys identified by 123456;
Oracle查看表空间对应的数据文件【查看 dba_data_files 表】
SQL>col tablespace_name for a30
SQL>col file_name for a50
SQL>select tablespace_name,file_name from dba_data_files;
Oracle审计日志【Oracle默认开启了审计日志,”12C及更高版本的审计配置有变化,引入了 统一审计”】
1、查看审计日志配置【审计日志默认路径:$ORACLE_BASE/admin/$ORACLE_SID/adump】
重要说明: Oracle审计日志开关只影响 aud$ 表中是否记录信息,如果开启审计,则此表将记录信息,关闭后此表不记录信息。但是无论打开或者关闭都会在审计目录中生成审计文件!!!
SQL> show parameter audit
———————————— ———– ——————————
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表示关闭审计日志
SQL>alter system set audit_trail=none scope=spfile; #关闭日志审计命令【生产环境建议不要立即重启数据库,待下次进入维护期时再重启生效】
SQL>alter system set audit_sys_operations=TRUE scope=spfile;–审计管理用户(以sysdba/sysoper角色登陆)
SQL>alter system set audit_trail=db,extended scope=spfile;
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> select action_name, obj_name,username from dba_audit_trail;
将Oracle数据库由只读状态变更为读写状态【non-cdb 和 cdb 都需要先关闭数据库再启动数据库】
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
SQL> alter pluggable database orcl_pdb close;
Pluggable database altered.
SQL> alter pluggable database orcl_pdb open read write;#可以省略read write 关键字,默认以读写方式打开。
Pluggable database altered.
CON_ID CON_NAME OPEN MODE RESTRICTED
———- —————————— ———- ———-
检查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配置进行连接。
检查Oracle数据库启停状态
SQL>select status from v$instance;
SQL> select status from v$instance;
查看数据库打开模式
SQL>select open_mode from v$database;
SQL> select open_mode from v$database;
查看Oracle数据库的名字
SQL> show parameter db_name
SQL> show parameter db_name
———————————— ———– ——————————
删除Oracle数据库实例:例如删除demo01
$ORACLE_HOME/bin/dbca -silent -deleteDatabase -sourceDB demo01 -sid demo01 -sysPassword oracle_4U
查看Oracle数据库中有哪些实例:
切换Oracle 的环境变量
检查Oracle是否为RAC集群架构
select value from v$parameter where name = ‘cluster_database’;
show parameter cluster_database;
如果cluster_database 的值为TRUE,表示为RAC 属于集群架构
如果cluster_database 的值为FALSE,表示非RAC,属于单机架构
查看数据库监听
查看数据库名字
判断是否是容器数据库的命令
切换Oracle 的SID
export ORACLE_SID=orclcdb 切换
检查日志是否归档启用归档
archive log list;
Oracle启用归档
SQL> alter database archivelog;
SQL> alter database open;
Oracle关闭归档
SQL> alter database noarchivelog;
SQL> select status from v$instance;
SQL> alter database open;
SQL> select status from v$instance;
查看ADR路径信息:
select * from v$diag_info;
例如:/data2/oracle/app/diag/rdbms/orcl/orcl/trace
查看redo在线日志文件位置:
select member from v$logfile;
查看数据库数据文件位置:
select name from v$datafile;
查看控制文件位置:
select name from v$controlfile;
检查数据库时区:
select dbtimezone from dual;
普通用户登录:
管理员用户登录:
采用webcloud用户登录数据库
查看当前连接数据库的用户
切换用户
切换到普通用户: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;
execute sys.dbms_metadata_util.load_stylesheets;
检查数据库是否存在webcloud用户
select username from dba_users where username=upper(‘webcloud’);
— 检查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_name for a50
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=1024*11048576Bytes=11313741824Bytes
SELECT a.tablespace_name “表空间名”,
(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
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes) total
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> 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;

版权申明:内容来源网络,版权归原创者所有,如有侵权请联系删除
想了解更多干货,可通过下方扫码关注

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