| 检查项 | 说明 | 查找方法 |
| 数据库警告日志 | 1、检查警告日志中是否存在以下关键字: WARNING|fail|errs|ORA-|abort|corrupt|bad|not complete。 如果存在以上关键字,不正常;否则,正常。 2、检查警告日志大小,如果日志大小超过阀值,不正常;否则,为正常。 |
1.查询日志路径:select
b.value||'/alert_'||d.instance_name||'.log' from v$parameter b,v$instance d
where b.name='background_dump_dest'; 2.定位日志中的关键字:cat alert_&sid.log|grep -iwE 'WARNING|fail|errs|ORA|abort|corrupt|bad|not complete'|grep -v '[(A-Za-z0-9]\{1,5\}.ora' 3.检查日志文件大小:du -sm alert_&sid.log|awk '{print $1}' |
| 数据库监听日志 | 1、检查警告日志中是否存在以下关键字: WARNING|fail|errs|ORA-|abort|corrupt|bad|not complete。 如果存在以上关键字,不正常;否则,正常。 2、检查警告日志大小,如果日志大小超过阀值,不正常;否则,为正常。 |
1.查询日志路径:$ORACLE_HOME/network/log/listener.log(10g); $ORACLE_BASE/diag/tnslsnr/`hostname`/listener/trace/listener.log(11g) 2.定位日志中的关键字:cat listener.log|grep -iwE 'WARNING|fail|errs|ORA|abort|corrupt|bad|not complete'|grep -v '[(A-Za-z0-9]\{1,5\}.ora' 3.检查日志文件大小:du -sm listener.log|awk '{print $1}' |
数据库大对象 |
检查数据库中是否存在大小超过阀值的表、索引等,如果超过阀值,不正常;否则,正常(如果大小超过10G,建议分区)。 | select segment_name
from dba_segments where segment_type in ('TABLE','INDEX') and owner in (select username from dba_users where account_status ='OPEN' and username not in ('SYS','SYSTEM','SYSMAN')) and bytes > 10*1024*1024*1024; |
非oracle默认用户使用SYSTEM表空间情况 |
检查非oracle默认用户是否占用SYSTEM表空间,如果占用,不正常;否则,正常。 |
select OWNER,
SEGMENT_NAME, TABLESPACE_NAME FROM dba_segments where tablespace_NAME = 'SYSTEM' and owner not in ('DBSNMP',' CTXSYS','MDSYS','ODM','ODM_MTR','ORDPLUGINS', 'ORDSYS','OUTLN','SCOTT','WK_PROXY','WK_SYS','WMSYS','XDB', 'TRACESVR','OAS_PUBLIC','WEBSYS','LBACSYS','RMAN','PERFSTAT', 'EXFSYS','SI_INFORMTN_SCHEMA','SYS','SYSTEM') and owner in (select username from dba_users where account_status='OPEN'); |
| SQL占用临时表空间大小 | 检查SQL使用临时表空间是否超过阀值,如果超过阀值,不正常;否则,正常。 | select sql_text from
v$sql sl,v$sort_usage vs where sl.hash_value=vs.sqlhash and vs.blocks>10*1024*1024/8192; |
| 可扩展的数据文件 | 检查是否存在可自动扩展的数据文件,如果存在,不正常;否则,正常。 | SELECT
file_name FROM dba_data_files WHERE autoextensible = 'YES' union all SELECT file_name FROM dba_temp_files WHERE autoextensible = 'YES'; |
| 联机日志状态 | 检查Oracle中日志文件的状态是否正常 | select
l.group#,f.member,f.status from v$logfile f,v$log l where f.group#=l.group# and f.type<>'ONLINE' or f.status in ('INVALID','DELETED') order by 1 |
| 控制文件相关信息 | 检查Oracle控制文件的状态是否正常 | select name from v$controlfile where status is not null; |
| 数据库crsd.log日志 | 1、检查crsd.log中是否存在以下关键字: WARNING|fail|errs|ORA-|abort|corrupt|bad|not complete。 如果存在以上关键字,不正常;否则,正常。 2、检查警告日志大小,如果日志大小超过阀值,不正常;否则,为正常。 |
1.查询日志路径:$ORACLE_BASE/crs/log/`hostname`/crsd/crsd.log 2.定位日志中的关键字:cat crsd.log|grep -iwE 'WARNING|fail|errs|ORA|abort|corrupt|bad|not complete'|grep -v '[(A-Za-z0-9]\{1,5\}.ora' 3.检查日志文件大小:du -sm crsd.log|awk '{print $1}' |
| 数据库ocssd.log日志 | 1、检查ocssd.log中是否存在以下关键字: WARNING|fail|errs|ORA-|abort|corrupt|bad|not complete。 如果存在以上关键字,不正常;否则,正常。 2、检查警告日志大小,如果日志大小超过阀值,不正常;否则,为正常。 |
1.查询日志路径:$ORACLE_BASE/crs/log/`hostname`/cssd/ocssd.log 2.定位日志中的关键字:cat crsd.log|grep -iwE 'WARNING|fail|errs|ORA|abort|corrupt|bad|not complete'|grep -v '[(A-Za-z0-9]\{1,5\}.ora' 3.检查日志文件大小:du -sm crsd.log|awk '{print $1}' |
| RAC网络传输时间 | 检查RAC节点之间网络通信时间是否超过阀值指定时间,如果超过,不正常;否则,正常。 | select
((b1.value/b2.value)*10) "avg receive time(ms)" from gv$sysstat b1,gv$sysstat b2 where b1.name='global cache cr block receive time' and b2.name='global cache cr blocks received' and b1.inst_id=b2.inst_id; |
| CRS各组件的运行状态 | 检查RAC节点crs各组件状态为是否为online,如果不是,不正常;否则,正常 | crs_stat -t|grep ora|awk '{print $4}'|grep -v ONLINE |
| sequence检查 | 检查Oracle中sequence利用率是否达到阀值,如果超过阀值,不正常;否则,正常。 | select sequence_name
from dba_sequences where cycle_flag='N' and round(last_number/max_value,2)*100 >= 90; |
| 被阻塞的session | 检查是否存在被阻塞的session,如果存在,不正常;否则,正常。 | select waiting_session from dba_waiters; |
| 索引BLEVEL值 | 检查是否存在BLEVEL值大于阀值的索引,如果存在,不正常;否则,正常 | select index_name,blevel from dba_indexes where blevel >= 3; |
| 在线日志切换频率 | 检查在线日志的切换频率是否低于阀值指定时间,如果低于,不正常;否则,正常。 | select 'logswitch'
switchtime, max(round((h2.FIRST_TIME - h1.FIRST_TIME) * 24 * 60)) maxi, min(round((h2.FIRST_TIME - h1.FIRST_TIME) * 24 * 60)) mini from v$log_history h1, v$log_history h2 where h1.sequence# = h2.sequence# - 1 and to_char(h1.first_time,'yyyy-mm-dd')=to_char(sysdate,'yyyy-mm-dd'); |
| UNDO表空间空间检查 | 根据v$undostats的nospaceerrcnt字段的值判断UNDOTBS空间是否满足需要,如果为0,正常;否则 不正常。 | select
maxquerylen,nospaceerrcnt from v$undostat where maxquerylen = (select max(maxquerylen) from v$undostat); |
| 日志备份空间 | 检查归档目录的空间是否足够阀值指定的时间内产生的归档日志所需的空间,如果不满足,不正常;否则,正常。 | 1.查询归档路径:select
replace(value,'location=','') from v$parameter where name like
'log_archive_dest%' and value like '%/%'; 2.查询最近7天内归档最大的1天的归档总大小:select max(lsize) msize from (select round(sum(distinct blocks*block_size)/1024) lsize,to_char(completion_time,'yyyymmdd') from v$archived_log where completion_time > sysdate -7 and thread# in (select thread# from v$instance) group by to_char(completion_time,'yyyymmdd') order by to_char(completion_time,'yyyymmdd')); 3.检查归档文件系统剩余空间大小:df -k |
| 各dump目录空间剩余大小 | 检查adump,cdump,bdump,cdump目录大小是否超过阀值,如果超过,不正常,否则,正常。 | 1.查询dump的路径:select
name,value from v$parameter where name in ('background_dump_dest','core_dump_dest','user_dump_dest','audit_file_dest'); 2.检查各目录的大小:du -sk dump_path|awk '{print $1}' |
| DBA角色用户检查 | 检查除SYS、SYSTEM是否存在dba角色的用户,如果存在,不正常;否则,正常。 | select grantee from
dba_role_privs where GRANTED_ROLE='DBA' and Grantee not in('SYS','SYSMAN','SYSTEM'); |
| 数据库用户权限 | 检查是否存在使用[any]权限的用户,如果存在,不正常;否则,正常。 | select distinct
grantee from dba_sys_privs where grantee in (select grantee from dba_role_privs where granted_role in (select grantee from dba_sys_privs where privilege like '%ANY%') and grantee in (select username from dba_users where account_status = 'OPEN' and username not in ('SYS','SYSTEM','SYSMAN')) union all select grantee from dba_sys_privs where grantee in (select username from dba_users where account_status='OPEN' and username not in ('SYS','SYSTEM','SYSMAN')) and privilege like '%ANY%') and privilege like '%ANY%'; |
| 用户密码 | 检查是否存在缺省用户使用默认密码,如果存在,不正常;否则,正常 | select username from
dba_users where password in ('E066D214D5421CCC','24ABAB8B06281B4C','72979A94BAD2AF80','C252E8FA117AF049','A7A32CD03D3CE8D5','88A2B2C183431F00','7EFA02EC7EA6B86F','4A3BA55E08595C81','F894844C34402B67','3F9FBD883D787341','79DF7A1BD138CF11','7C9BA362F8314299','88D8364765FCE6AF','F9DA8977092B7B81','9300C0977D7DC75E','A97282CE3D94E29E','AC9700FD3F1410EB','E7B5D92911C831E1','AC98877DE1297365','66F4EF5650C20355','84B8CBCA4D477FA3','D4C5016086B2DC6A','D4DF7931AB130E37') and account_status = 'OPEN'; |
| 数据库用户信息 | 检查是否存在默认用户未被锁定,如果存在,不正常;否则,正常 | select username from dba_users t where username in ('DBSNMP',' CTXSYS','MDSYS','ODM','ODM_MTR','ORDPLUGINS', 'ORDSYS','OUTLN','SCOTT','WK_PROXY','WK_SYS','WMSYS','XDB', 'TRACESVR','OAS_PUBLIC','WEBSYS','LBACSYS','RMAN', 'EXFSYS','SI_INFORMTN_SCHEMA') AND account_status = 'OPEN'; |
| 数据库持续运行时间 | 检查数据库的持续运行时间,如果持续运行时间超过阀值,不正常;否则,为正常 | select round(sysdate- startup_time) runtime from v$instance; |
| 数据版本 | 显示数据库版本 | select * from v$version; |
| SGA数据缓冲区命中率 | 检查SGA读命中率是否高于阀值,如果高于阀值,正常;否则,不正常。 | SELECT 100 -
round((phy.value - lob.value - dir.value)/ses.value,2)*100 "HIT"
FROM v$sysstat ses,v$sysstat lob,v$sysstat dir,v$sysstat phy WHERE ses.name = 'session logical reads' AND dir.name = 'physical reads direct' AND lob.name = 'physical reads direct (lob)' AND phy.name = 'physical reads'; |
| SGA库高速缓存命中率 | 检查SGA库高速缓存命中率,如果高于阀值,正常;否则,不正常。 | SELECT round(sum(PINHITS)/sum(pins)*100) lib FROM V$LIBRARYCACHE; |
| 自动收集统计信息JOB运行情况 | 检查自动收集统计信息JOB的运行情况,如果运行时间长度超过阀值,不正常;否则,正常。(该项针对oracle 10G) | select
to_number(replace(substr(d.run_duration,4,4),' ','')) from
dba_scheduler_job_run_details d,dba_scheduler_jobs j where d.job_name='GATHER_STATS_JOB' and d.status ='SUCCEEDED' and d.actual_start_date > sysdate -7 and d.job_name=j.job_name and j.state='SCHEDULED'; |
| 运行时间较长的SQL | 检查Oracle中是否存在运行时间超过阀值指定时间的SQL语句,如果存在,不正常;否则,正常。 | select
s.sql_fulltext,s.elapsed_time,s.executions from v$sqlarea s,dba_users u
where u.username=s.parsing_schema_name and u.account_status='OPEN' and u.username not in ('SYS','SYSMAN','SYSTEM') and s.executions >=1 and s.elapsed_time > 3600000000*s.executions; |
| 占用PGA较多的进程 | 检查是否存在占用PGA超过阀值指定大小的进程,如果存在,不正常;否则,正常。 | select
spid,pga_used_mem/1024/1024 pgause from v$process where pga_used_mem > 100*1024*1024; |
| 数据库的坏块 | 根据v$database_block_corruption检查数据库中的是否存在坏块,如果存在,不正常;否则,正常。 | select file#,block# from v$database_block_corruption; |
| 数据库失效对象(考虑增量来提示) | 检查是否存在失效对象,如果存在,不正常;否则,正常 | select
object_name from dba_objects
o,dba_users u where o.owner=u.username and u.account_status='OPEN' and o.status !='VALID'; |
| 以下为新增加的检查项: | ||
| 1.controlfiles个数必须大于等于3 | select count(name) from v$controlfile where name not like '%flash%'; | |
| 2.表空间使用率 80%(undo和temp使用率95%) | 1.普通表空间使用率:select
a.TABLESPACE_NAME||'='||round(nvl(((a.total - b.free) / a.total) * 100, 0))
rate from (select TABLESPACE_NAME, sum(bytes) / (1024 * 1024) total from sys.dba_data_files dbf group by TABLESPACE_NAME ) a, (select TABLESPACE_NAME, sum(bytes) / (1024 * 1024) free from sys.dba_free_space group by tablespace_name) b where a.TABLESPACE_NAME = b.TABLESPACE_NAME; 2.temp表空间使用率:select tablespace_name,decode(nvl(total_blocks,0),0,0,round(used_blocks/total_blocks*100)) from v$sort_segment; |
|
| 3.日志组大于等于3组,每个大于等于500m,成员个数大于等于2 | select group#,bytes/1024/1024,members from v$log; | |
| 6.文件系统使用率不超过85% | df -k | |
| 10.session占用率:90% | select
decode(nvl(b.value,0),0,0,round(a.sid/b.value*100)) from (select count(sid)
sid from v$session) a,(select value from v$parameter where name='processes')
b; |
|
| 11.cpu使用率:80% | vmstat | |
| 12.内存使用率:80% | free | |
| 7.undo_retention的值大于等于900 | select value from v$parameter where name='undo_retention'; | |
| 8.分布式事务锁 | select * from dba_2pc_pending | |
| 9.ASM磁盘组检查 | select * from v$asm_diskgroup | |
| 10.swap空间检查 | free | |
| 备注:加:一期做;不:不需要 | ||
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27042095/viewspace-751958/ ,如需转载,请注明出处,否则将追究法律责任。