Oracle循檢
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;
PROMPT --************************************************
PROMPT -- ** 專案:緩衝區命中率(Buffer Cache)
PROMPT -- ** 等級:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 說明:如果發現該值低於90%,馬上報告
PROMPT -- ** 監控頻度:定期
PROMPT -- ** Sql:BufferHitRatio.sql
PROMPT
SELECT (1 - (SUM(DECODE(NAME, 'physical reads', VALUE, 0)) /
(SUM(DECODE(NAME, 'db block gets', VALUE, 0)) +
SUM(DECODE(NAME, 'consistent gets', VALUE, 0))))) * 100
"緩衝區命中率"
FROM V$SYSSTAT;
PROMPT --************************************************
PROMPT -- ** 專案:資料字典命中率(Dictionary Cache)
PROMPT -- ** 等級:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 說明:如果發現該值低於90%,馬上報告
PROMPT -- ** 監控頻度:定期
PROMPT -- ** Sql:DictionaryHitRatio.sql
PROMPT
SELECT (1 - (SUM(GETMISSES) / SUM(GETS))) * 100 "資料字典命中率"
FROM V$ROWCACHE;
PROMPT --************************************************
PROMPT -- ** 專案:庫快取命中率(Library Cache)
PROMPT -- ** 等級:中
PROMPT -- ** 正常值:>95%
PROMPT -- ** 說明:如果發現該值低於90%,馬上報告
PROMPT -- ** 監控頻度:定期
PROMPT -- ** Sql:LibraryHitRatio.sql
PROMPT
SELECT SUM(PINS) / (SUM(PINS) + SUM(RELOADS)) * 100 "庫快取命中率"
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",
SUM(DECODE(STATUS,'AVAILABLE',VAL,0))/(SUM(DECODE(STATUS,'AVAILABLE',VAL,0))+SUM(DECODE(STATUS,'BEING USED',VAL,0)))*100||'%' "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 - Decode(gets,0,0,misses/(gets+misses))*100 ratio1,
100 - Decode(immediate_gets+immediate_misses,0,0,immediate_misses/(immediate_gets+immediate_misses))*100 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 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;
PROMPT --************************************************
PROMPT -- ** 專案:長時間執行的Sql
PROMPT -- ** 等級:中
PROMPT -- ** 正常值:
PROMPT -- ** 說明:提交開發人員建議對這些SQL進行調整
PROMPT -- ** 監控頻度:多次
PROMPT -- ** Sql:LongRuningSql.sql
PROMPT
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;
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/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 - 20 AND ROUND((A.FIRST_TIME-B.FIRST_TIME)*24*60,2)<30
ORDER BY A.FIRST_TIME DESC;
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';
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【TUNE_ORACLE】Oracle檢查點(二)檢查點效能Oracle
- Oracle DG 日常點檢Oracle
- Oracle OCP(24):檢視Oracle
- 【TUNE_ORACLE】Oracle檢查點(一)檢查點(Checkpoint)概念介紹Oracle
- oracle DBA 巡檢專案Oracle
- oracle 檢視錶空間Oracle
- 11、Oracle中的檢視Oracle
- 【TUNE_ORACLE】Oracle檢查點(五)建立並利用Statspack定位檢查點故障Oracle
- 深度剖析定時器、提一嘴事件輪循定時器事件
- 使用OpenCV進行ROS 2的循線跟蹤OpenCVROS
- Oracle普通檢視和物化檢視的區別Oracle
- Oracle 檢查點涉及的SCNOracle
- Oracle OCP(15):分層檢索Oracle
- Oracle檢視歷史TOP SQLOracleSQL
- oracle檢視物件DDL語句Oracle物件
- 檢視ORACLE中鎖定物件Oracle物件
- 【SQL】Oracle SQL共享池檢查SQLOracle
- Oracle SCN健康狀態檢查Oracle
- Oracle完全檢查點和增量檢查點詳解Oracle
- 【TUNE_ORACLE】Oracle檢查點(三)增量檢查點四個關鍵引數介紹Oracle
- ORACLE 檢視IP,解析機器名Oracle
- Oracle相關資料字典檢視Oracle
- Oracle常用檢視錶結構命令Oracle
- 19 Oracle Data Guard 相關檢視Oracle
- Oracle的全文檢索技術(轉)Oracle
- ORACLE常見檢視和表整理Oracle
- 【PDB】Oracle跨PDB檢視查詢Oracle
- Oracle 如何高效的檢視官方文件Oracle
- 【SCN】Oracle檢查scn值指令碼Oracle指令碼
- 檢視oracle臨時表空間佔用率的檢視Oracle
- 【TUNE_ORACLE】Oracle健康檢查基礎專案(二)專案檢查步驟概述其一Oracle
- 【TUNE_ORACLE】Oracle健康檢查基礎專案(四)專案檢查步驟概述其三Oracle
- 【TUNE_ORACLE】Oracle健康檢查基礎專案(三)專案檢查步驟概述其二Oracle
- POLIR-MANAGEMENT-Communication: 循循善誘: 精準的組織語言+適當的表達+心理影響的效果+適時丟擲問題
- 【BAK_ORACLE】Oracle DB Cloud上的備份檢查命令合集OracleCloud
- 相親交友原始碼中的事件循壞,你瞭解多少?原始碼事件
- Oracle“並行執行”——監控檢視Oracle並行
- Oracle檢視執行計劃的命令Oracle