oracle巡检内容


  • 监控项目

    监控子项

    监控指标

    脚本

    等级

    数据库状态

    数据库是否正常启动

     

    DbStatus.sql

    critical

    Listenter是否启动

     

    $>lsnrclt status

    critical

    数据库空间

    表空间使用情况

     

    TableSpaceStatus.sql

    critical

    警告日志文件大小

     

    OS

    critical

    归档日志目录使用情况

     

    OS

    critical

    Dump文件目录使用

     

    OS

    critical

    数据库性能

    缓冲区命中率(Buffer Cache

    >95%

    BufferHitRatio.sql

    High

    数据字典命中率(Dictionary Cache

    >95%

    DictionaryHitRatio.sql

    High

    库缓存命中率(Library Cache

    >95%

    LibraryHitRatio.sql

    High

    内存排序百分比(Sort in Memory

    >95%

    MemorySortRatio.sql

    High

    空闲的数据缓冲区比例

    10-25%

    FreeBufferRatio.sql

    High

    检查重做日志命中率

    >95%

    RedoHitRatio.sql

    High

    检查多版本Sql

     

    MultiVersionSql.sql

    High

    检查低效Sql

     

    InefficientSql.sql

    High

    检查长时间运行的Sql

     

    LongRuningSql.sql

    High

    检查数据库的Statspack是否定期被执行

     

    N/A

    High

    检查Statspack每两个小时产生的报告

     

    N/A

    High

    数据库资源

    检查表空间IO比例

     

    TablespaceIO.sql

    Low

    检查文件系统IO比例

     

    DatafileIO.sql

    Low

    检查临时表空间使用情况

     

    TempUsage.sql

    critical

    检查锁与等待

     

    LockAndWait.sql

    critical

    Process

     

    ResourceLimit.sql

    critical

    Session

     

    ResourceLimit.sql

    critical

    检查活动会话

     

    SameTimeActive.sql

    High

    检查日志切换的频率

    >=(15-20)分钟

    LogSyncTime.sql

    High

    数据库对象

    检查数据库里Invalid Objects

     

    InvalidObject.sql

    critical

    检查数据库里Disabled Indexes

     

    UnusableIndex.sql

     

    检查数据库里Disabled Constraints

     

    DisabledConstraints.sql

    critical

    检查数据库里Disabled Triggers

     

    DisabledTriggers.sql

    critical

    数据库备份

    检查数据库全备份的情况

     

    OS

    High

    检查数据库累积备份的情况

     

    OS

    High

    检查数据库增量备份的情况

     

    OS

    High

    每周验证数据库的备份是否可恢复

     

    OS

    High

    数据库错误

    检查警告日志里是否有异常错误

     

    OS

    critical

    检查数据库的归档进程是否被挂起

     

    OS

    critical

    检查数据库里是否有坏块

     

    利用dbv命令

    critical

    版本控制

    定期跟踪OraclebugList升级数据库

     

    人工

    Low

 

SCRIPTS:


execute.sql

spool OralceHealthReport.txt
@OracleHealthReport.sql
spool off

OracleHealthReport.sql

SET NEWPAGE NONE LINESIZE 2000 TRIMSPOOL ON TERMOUT OFF 
COL FILE FORMAT A80
COL FILE_NAME FORMAT A80




PROMPT --************************************************
PROMPT -- ** 项目:数据库状态
PROMPT -- ** 等级:高
PROMPT -- ** 正常值:数据库状态正常
PROMPT -- ** 说明:如果发现该项目没有输出,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:DbStatus.sql
PROMPT


SELECT '数据库'||INSTANCE_NAME||'状态正常' 数据库状态 FROM V$INSTANCE;


PROMPT --************************************************
PROMPT -- ** 项目:表空间使用情况
PROMPT -- ** 等级:高
PROMPT -- ** 正常值:
PROMPT -- ** 说明:如果发现用户表空间超过85%,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:TableSpaceStatus.sql
PROMPT


/*


SELECT D.TABLESPACE_NAME,FILE_NAME "FILE_NAME",SPACE "SUM_SPACE(M)",SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)", 
ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",AUTOEXTENSIBLE
FROM (SELECT FILE_ID,FILE_NAME,TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS 
FROM DBA_DATA_FILES 
GROUP BY TABLESPACE_NAME,FILE_ID,FILE_NAME) D, 
(SELECT FILE_ID,TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE 
FROM DBA_FREE_SPACE 
GROUP BY TABLESPACE_NAME,FILE_ID) E,
(SELECT FILE_ID,AUTOEXTENSIBLE FROM DBA_DATA_FILES) F
WHERE D.TABLESPACE_NAME = E.TABLESPACE_NAME(+) AND D.FILE_ID = E.FILE_ID(+) AND D.FILE_ID = F.FILE_ID(+)
UNION ALL --if have tempfile 
SELECT D.TABLESPACE_NAME,FILE_NAME "FILE_NAME",SPACE "SUM_SPACE(M)", USED_SPACE "USED_SPACE(M)",
ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",AUTOEXTENSIBLE
FROM 
(SELECT FILE_ID,FILE_NAME,TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS 
FROM DBA_TEMP_FILES 
GROUP BY TABLESPACE_NAME,FILE_ID,FILE_NAME) D, 
(SELECT FILE_ID,TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE, 
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE 
FROM V$TEMP_SPACE_HEADER 
GROUP BY TABLESPACE_NAME,FILE_ID) E,
(SELECT FILE_ID,AUTOEXTENSIBLE FROM DBA_TEMP_FILES) F
WHERE D.TABLESPACE_NAME = E.TABLESPACE_NAME(+) AND D.FILE_ID = E.FILE_ID(+) AND D.FILE_ID = F.FILE_ID(+)
ORDER BY TABLESPACE_NAME,FILE_NAME;


*/


--按表空间汇总


SELECT d.tablespace_name, space "SUM_SPACE(G)", space - nvl(free_space, 0) "USED_SPACE(G)",
free_space "FREE_SPACE(G)",
round((1 - nvl(free_space, 0) / space) * 100, 2) "USED_RATE(%)",
round((nvl(free_space, 0) / space) * 100, 2) "FREE_RATE(%)"
FROM (SELECT tablespace_name, round(SUM(bytes) / (1024 * 1024 * 1024), 2) space,
SUM(blocks) blocks
FROM dba_data_files
GROUP BY tablespace_name) d,
(SELECT tablespace_name, round(SUM(bytes) / (1024 * 1024 * 1024), 2) free_space
FROM dba_free_space
GROUP BY tablespace_name) e
 WHERE d.tablespace_name = e.tablespace_name(+)
UNION ALL --if have tempfile 
SELECT d.tablespace_name, space "SUM_SPACE(G)", used_space "USED_SPACE(G)",
free_space "FREE_SPACE(G)",
round(nvl(used_space, 0) / space * 100, 2) "USED_RATE(%)",
round((1 - nvl(used_space, 0) / space) * 100, 2) "FREE_RATE(%)"
FROM (SELECT tablespace_name, round(SUM(bytes) / (1024 * 1024 * 1024), 2) space,
SUM(blocks) blocks
FROM dba_temp_files
GROUP BY tablespace_name) d,
(SELECT tablespace_name, round(SUM(bytes_used) / (1024 * 1024 * 1024), 2) used_space,
round(SUM(bytes_free) / (1024 * 1024 * 1024), 2) free_space
FROM v$temp_space_header
GROUP BY tablespace_name) e
 WHERE d.tablespace_name = e.tablespace_name(+)
 ORDER BY tablespace_name;
PROMPT --************************************************
PROMPT -- ** 项目:缓冲区命中率(Buffer Cache)
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 说明:如果发现该值低于90%,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:BufferHitRatio.sql
PROMPT


SELECT round((1 - (SUM(DECODE(NAME, 'physical reads', VALUE, 0)) /
(SUM(DECODE(NAME, 'db block gets', VALUE, 0)) +
SUM(DECODE(NAME, 'consistent gets', VALUE, 0))))) * 100 ,2)
"缓冲区命中率"
FROM V$SYSSTAT;


PROMPT --************************************************
PROMPT -- ** 项目:数据字典命中率(Dictionary Cache)
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 说明:如果发现该值低于90%,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:DictionaryHitRatio.sql
PROMPT


SELECT round((1 - (SUM(GETMISSES) / SUM(GETS))) * 100 ,2)"数据字典命中率"
FROM V$ROWCACHE;


PROMPT --************************************************
PROMPT -- ** 项目:库缓存命中率(Library Cache)
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 说明:如果发现该值低于90%,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:LibraryHitRatio.sql
PROMPT


SELECT round(SUM(PINS) / (SUM(PINS) + SUM(RELOADS)) * 100 ,2)"库缓存命中率"
FROM V$LIBRARYCACHE;


PROMPT --************************************************
PROMPT -- ** 项目:内存排序百分比(Sort in Memory)
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 说明:如果发现该值低于90%,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:MemorySortRatio.sql
PROMPT


select a.value "磁盘排序",
b.value "内存排序",
round((100 * b.value) /decode((a.value + b.value), 0, 1, (a.value + b.value)),2) "内存排序百分比"
from v$sysstat a, v$sysstat b
where a.name = 'sorts (disk)'
and b.name = 'sorts (memory)';
PROMPT --************************************************
PROMPT -- ** 项目:空闲的数据缓冲区比例
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 说明:如果发现该值低于90%,马上报告
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:FreeBufferRatio.sql
PROMPT


SELECT SUM(DECODE(STATUS,'AVAILABLE',VAL,0)) "AVAILABLE",SUM(DECODE(STATUS,'BEING USED',VAL,0)) "BEING USED",
round(SUM(DECODE(STATUS,'AVAILABLE',VAL,0))/(SUM(DECODE(STATUS,'AVAILABLE',VAL,0))+SUM(DECODE(STATUS,'BEING USED',VAL,0)))*100,2)||'%' "AVAILABLE PERCENT"
FROM(SELECT DECODE(STATE,0,'FREE',1,DECODE(LRBA_SEQ, 0, 'AVAILABLE', 'BEING USED'),3,'BEING USED',STATE) "STATUS",
COUNT(*) VAL
FROM X$BH
GROUP BY DECODE(STATE,0,'FREE',1,DECODE(LRBA_SEQ, 0, 'AVAILABLE', 'BEING USED'),3,'BEING USED',STATE));


PROMPT --************************************************
PROMPT -- ** 项目:重做日志命中率
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 说明:如果发现该值低于90%,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:RedoHitRatio.sql
PROMPT


SELECT name, gets, misses, immediate_gets, immediate_misses, 
100 - round(Decode(gets,0,0,misses/(gets+misses))*100,2) ratio1, 
100 - round(Decode(immediate_gets+immediate_misses,0,0,immediate_misses/(immediate_gets+immediate_misses))*100,2) ratio2 
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');


PROMPT --************************************************
PROMPT -- ** 项目:多版本Sql
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:提交开发人员建议对这些SQL进行调整
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:MultiVersionSql.sql
PROMPT


SELECT SUBSTR(SQL_TEXT,1,80) "SQL", COUNT(*) "记录数", SUM(EXECUTIONS) "执行次数"
FROM V$SQLAREA
WHERE EXECUTIONS < 5
GROUP BY SUBSTR(SQL_TEXT,1,80)
HAVING COUNT(*) > 30
ORDER BY 2 DESC;


PROMPT --************************************************
PROMPT -- ** 项目:低效Sql
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:提交开发人员建议对这些SQL进行调整
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:InefficientSql.sql
PROMPT


select * from (
SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,
ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,
ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,
SQL_TEXT
FROM V$SQLAREA
WHERE EXECUTIONS>0 
AND BUFFER_GETS > 0 
AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 
ORDER BY 4 DESC)
where rownum<=100;




PROMPT --************************************************
PROMPT -- ** 项目:长时间运行的Sql
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:提交开发人员建议对这些SQL进行调整
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:LongRuningSql.sql
PROMPT
select * from (
SELECT sql_text "SQL", executions "运行次数", buffer_gets / decode(executions, 0, 1, executions) / 4000 "响应时间" 
FROM v$sql 
WHERE buffer_gets / decode(executions, 0,1, executions) / 4000 > 10 
AND executions > 0
order by 3 desc)
where rownum<=100;


PROMPT --************************************************
PROMPT -- ** 项目:表空间IO比例
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:发现并报告物理读、物理写特别大的表空间
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:TablespaceIO.sql
PROMPT


select df.tablespace_name name,df.file_name "file",f.phyrds "物理读次数", 
f.phyblkrd "物理读BLOCKS",f.phywrts "物理写次数", f.phyblkwrt "物理写BLOCKS" 
from v$filestat f, dba_data_files df 
where f.file# = df.file_id 
order by df.tablespace_name;


PROMPT --************************************************
PROMPT -- ** 项目:文件系统IO比例
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:发现并报告物理读、物理写特别大的数据文件
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:DatafileIO.sql
PROMPT
/*
select substr(a.file#,1,2) "#", substr(a.name,1,30) "Name", 
a.status, a.bytes, b.phyrds, b.phywrts 
from v$datafile a, v$filestat b 
where a.file# = b.file#;
*/


PROMPT --************************************************
PROMPT -- ** 项目:临时表空间使用情况
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:发现并报告临时表空间使用过高的SESSION机PROGRAM
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:TempUsage.sql
PROMPT


SELECT se.username 用户名,
se.sid,
se.serial#,
se.sql_address,
se.machine,
se.program,
su.tablespace,
su.blocks*(8192*4)/1024/1024 "Used Space(M)",
su.segtype,
su.contents 
FROM v$session se,
v$sort_usage su
WHERE se.saddr=su.session_addr;


PROMPT --************************************************
PROMPT -- ** 项目:锁与等待
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:发现并报告锁与等待的对象
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:LockAndWait.sql
PROMPT


SELECT /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username User_name, 
o.owner,o.object_name,o.object_type,s.sid,s.serial# 
FROM v$locked_object l,dba_objects o,v$session s 
WHERE l.object_id=o.object_id AND l.session_id=s.sid 
ORDER BY o.object_id,xidusn DESC;


PROMPT --************************************************
PROMPT -- ** 项目:Lock,Process,Session
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:发现并报告MAX_UTILIZATION 接近INITIAL_ALLOCATION的项目
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:ResourceLimit.sql
PROMPT


select * from v$resource_limit;


PROMPT --************************************************
PROMPT -- ** 项目:活动会话
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:同时活动的会话过高,通知开发人员
PROMPT -- ** 监控频度:多次
PROMPT -- ** Sql:SameTimeActive.sql
PROMPT


select count(1) "同时ACTIVE的会话数量"
from v$session 
where status='ACTIVE' and username not in ('SYS','SYSTEM');


PROMPT --************************************************
PROMPT -- ** 项目:日志切换间隔
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:>=(15-20)分钟
PROMPT -- ** 说明:业务高峰期日志切换频繁,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:LogSyncTime.sql
PROMPT
/*
SELECT B.RECID,B.FIRST_TIME,A.FIRST_TIME,ROUND((A.FIRST_TIME-B.FIRST_TIME)*24*60,2) MINATES 
FROM V$LOG_HISTORY A,V$LOG_HISTORY B 
WHERE A.RECID=B.RECID +1 AND A.FIRST_TIME>SYSDATE - 1 AND ROUND((A.FIRST_TIME-B.FIRST_TIME)*24*60,2)<30
ORDER BY A.FIRST_TIME DESC;
*/


select sequence#,
       to_char(first_time,'yyyymmdd_hh24:mi:ss'),
       round((first_time-lag(first_time) over(order by first_time))*24*60,2) minutes 
   from v$log_history where first_time > sysdate - 1 
   order by first_time;
PROMPT --************************************************
PROMPT -- ** 项目:Invalid Objects
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:检查INVALID对象,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:InvalidObject.sql
PROMPT


SELECT OWNER,OBJECT_NAME,OBJECT_TYPE FROM DBA_OBJECTS 
WHERE STATUS = 'INVALID';


PROMPT --************************************************
PROMPT -- ** 项目:Disabled Indexes
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:检查UNUSABLE索引,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:UnusableIndex.sql
PROMPT


SELECT OWNER,INDEX_NAME,INDEX_TYPE,TABLE_NAME,STATUS FROM DBA_INDEXES 
WHERE STATUS = 'UNUSABLE';


PROMPT --************************************************
PROMPT -- ** 项目:Disabled Constraints
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:检查Disabled Constraints,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:DisabledConstraints.sql
PROMPT


SELECT OWNER,CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME FROM DBA_CONSTRAINTS 
WHERE STATUS='DISABLED';


PROMPT --************************************************
PROMPT -- ** 项目:Disabled Triggers
PROMPT -- ** 等级:中
PROMPT -- ** 正常值:
PROMPT -- ** 说明:检查Disabled Triggers,马上报告
PROMPT -- ** 监控频度:定期
PROMPT -- ** Sql:DisabledTriggers.sql
PROMPT


SELECT OWNER,TRIGGER_NAME,TRIGGER_TYPE FROM DBA_TRIGGERS 
WHERE STATUS='DISABLED';



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值