-
监控项目
监控子项
监控指标
脚本
等级
数据库状态
数据库是否正常启动
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
版本控制
定期跟踪Oracle的bugList升级数据库
人工
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';
- 上一篇:Oracle 系统表大全