oracle 11g health monitor健康監控

eric0435發表於2014-06-11

health monitor健康監控
從oracle 11g開始,oracle資料庫包含對資料庫執行診斷檢查的健康監控框架

health check健康檢查是對資料庫的各層和元件乾地檢查.健康檢查會檢測檔案錯誤,物理和邏輯塊錯誤,undo和redo錯誤,資料字典錯誤等等.健康檢查會生成一個檢查報告在許多情況下包含了問題解決的建議.健康檢查有兩種執行方式:
.reactive---故障診斷架構為了響應一個嚴重錯誤會自動執行健康檢查.

.manual-----作為一個dba,可以使用dbms_hm包或企業管理器介面來手工執行健康檢查.

健康檢查會儲存調查結果,建議並在ADR中儲存其它的資訊

健康檢查能以以下兩種方式來執行:
DB-online模式意味著當資料庫處於開啟狀態(open或mount)時可以執行健康檢查

DB-offline模式意味著當例項不可用且資料庫處於關閉狀態(nomount)時也能執行健康檢查

所有的健康檢查都能在DB-online模式下執行.只有重做日誌完整性檢查和資料庫結構完整檢查可以在DB-offline模式下執行.

健康檢查的型別
健康監控執行以下檢查:
DB Structure Integrity Check(資料庫結構完整性檢查)--這種檢查驗證資料檔案的完整性,如果這些檔案不能訪問,檔案錯誤
或者不一致時會報告這些錯誤資訊.如果資料庫在mount或者open狀態,這種檢查會檢查控制檔案中所列出的重做日誌檔案和資料檔案.如果資料庫在nomount狀態,只會檢查控制檔案.

Data Block Integrity Check(資料塊完整性檢查)--這種檢查會檢查磁碟映象塊錯誤比如checksum故障,head/tail mismatch和資料塊的邏輯不一致性.大多數的錯誤可以透過使用block media recovery來進行修復.錯誤塊資訊也會被v$database_block_corruption檢視所捕獲.這種檢查不會檢測inter-block或inter-segment錯誤.

Redo Integrity Check(重做完整性檢查)--這種檢查將會掃描重做日誌內容的可訪問性和錯誤資訊,也能對歸檔日誌檔案進行檢查.
這種檢查會報告歸檔日誌或重做日誌的錯誤資訊.

Undo Segment Integrity Check(回滾段完整性檢查)--這種檢查會發現邏輯undo錯誤.在定位一個undo錯誤之後,這種檢查將使用PMON和SMON來嘗試恢復這個錯誤事務.如果恢復失敗,health monitor將會儲存關於這個錯誤的資訊到v$corrupt_xid_list中.大多數undo錯誤都可以透過強制提交來解決.

Transaction Interity Check--這種檢查與undo segment integrity check是相同的只是它只檢查一特定的事務.

Dictionary Integrity Check--這種檢查會檢查核心字典物件比如tab$或col$的完整性.它將執行以下操作:
.驗證每一個字典物件的字典條目內容

.執行cross-row級別的檢查.它將對字典中的行強制執行邏輯約束驗證

.執行物件的關係檢查,它將在字典物件之間強制執行父子關係驗證

Dictionary Integrity Check操作會檢查以下字典物件:
tab$, clu$, fet$, uet$, seg$, undo$, ts$, file$, obj$, ind$, icol$, col$, user$,
con$, cdef$, ccol$, bootstrap$, objauth$, ugroup$, tsq$, syn$, view$, typed_
view$, superobj$, seq$, lob$, coltype$, subcoltype$, ntab$, refcon$, opqtype$,
dependency$, access$, viewcon$, icoldep$, dual$, sysauth$, objpriv$, defrole$,ecol$.

手工執行health check
健康監控提供了兩種方式來手工執行健康檢查:
.使用dbms_hm包

.使用企業管理器介面

使用dbms_hm來執行健康檢查
dbms_hm包中有一個run_check過程用來執行健康檢查.為了呼叫run_check需要提供檢查的名稱和執行的名字比如:

SQL> exec dbms_hm.run_check('Dictionary Integrity Check','jy_dict_run');

PL/SQL procedure successfully completed.

為了獲得一個健康檢查名稱列表執行以下查詢:

SQL> select name from v$hm_check where internal_check='N';
NAME
----------------------------------------------------------------
DB Structure Integrity Check

CF Block Integrity Check

Data Block Integrity Check

Redo Integrity Check

Transaction Integrity Check

Undo Segment Integrity Check

Dictionary Integrity Check

ASM Allocation Check

大多數的健康檢查接受輸入引數.可以透過查詢v$hm_check_param來檢視引數名和描述.一些引數是強制性的其它的是可選的.
如果一個可選引數被忽略將會使用預設值.下面的查詢將會顯示所有健康檢查的引數資訊:

SQL> SELECT c.name check_name, p.name parameter_name, p.type,
  2  p.default_value, p.description
  3  FROM v$hm_check_param p, v$hm_check c
  4  WHERE p.check_id = c.id and c.internal_check = 'N'
  5  ORDER BY c.name;

CHECK_NAME                       PARAMETER_NAME       TYPE                 DEFAULT_VALUE    DESCRIPTION
-------------------------------- -------------------- -------------------- ---------------- ------------------------------
ASM Allocation Check             ASM_DISK_GRP_NAME    DBKH_PARAM_TEXT                       ASM 組名
CF Block Integrity Check         CF_BL_NUM            DBKH_PARAM_UB4                        控制檔案塊號
Data Block Integrity Check       BLC_DF_NUM           DBKH_PARAM_UB4                        檔案號
Data Block Integrity Check       BLC_BL_NUM           DBKH_PARAM_UB4                        塊號
Dictionary Integrity Check       CHECK_MASK           DBKH_PARAM_TEXT      ALL              檢查掩碼
Dictionary Integrity Check       TABLE_NAME           DBKH_PARAM_TEXT      ALL_CORE_TABLES  表名
Redo Integrity Check             SCN_TEXT             DBKH_PARAM_TEXT      0                最新良好重做的 SCN (如果已知)
Transaction Integrity Check      TXN_ID               DBKH_PARAM_TEXT                       事務處理 ID
Undo Segment Integrity Check     USN_NUMBER           DBKH_PARAM_TEXT                       還原段號

輸入引數透過input_params引數以name/value對用分號來分隔進行傳遞.下面的例子用事務ID作為引數進行事務完整性檢查:

SQL>BEGIN
DBMS_HM.RUN_CHECK (
check_name => 'Transaction Integrity Check',
run_name => 'my_trans_run',
input_params => 'TXN_ID=8.31.4');
END;
/

PL/SQL procedure successfully completed.

檢視檢查報告
在一個檢查執行完後可以檢視它的執行報告.這個可報告包括了調查結果,建議和其它的資訊.也可以使用企業管理器,ADRCI工具,或者
dbms_hm包.其中企業管理器檢視的報告格式為html,dbms_hm包檢視的報告格式為html,xml和text,檢查DRCL工個檢視報告的格式為XML

檢查執行的結果被儲存在ADR,但報告不會立即生成.當你請求檢視報告時可以使用dbms_hm或企業管理器來生成.如果報告不存在,首先
得用ADR中的檢查結果資料來生成並以xml或html格式來儲存.如果使用ADRCI工具如果報告檔案不存必須首先執行命令來生成報告檔案然後執行其它的命令來顯示它的內容.

使用dbms_hm來檢視檢查報告
使用dbms_hm.get_run_report函式可以檢視健康檢查報告.這個函式可以以html,xml或text格式來顯示.預設格式為text:

SQL> SET LONG 100000
SQL> SET LONGCHUNKSIZE 1000
SQL> SET PAGESIZE 1000
SQL> SET LINESIZE 512
SQL> select dbms_hm.get_run_report('jy_dict_run') from dual;

DBMS_HM.GET_RUN_REPORT('JY_DICT_RUN')
--------------------------------------------------------------------------------
Run Name : JY_DICT_RUN
Run Id : 1061
Check Name : Data Block Integrity Check
Mode : REACTIVE
Status : COMPLETED
Start Time : 2007-05-12 22:11:02.032292 -07:00
End Time : 2007-05-12 22:11:20.835135 -07:00
Error Encountered : 0
Source Incident Id : 7418
Number of Incidents Created : 0
Input Paramters for the Run
BLC_DF_NUM=1
BLC_BL_NUM=64349
Run Findings And Recommendations
Finding
Finding Name : Media Block Corruption
Finding ID : 1065
Type : FAILURE
Status : OPEN
Priority : HIGH
Message : Block 64349 in datafile 1:
'/u01/app/oracle/dbs/t_db1.f' is media corrupt
Message : Object BMRTEST1 owned by SYS might be unavailable
Finding
Finding Name : Media Block Corruption
Finding ID : 1071
Type : FAILURE
Status : OPEN
Priority : HIGH
Message : Block 64351 in datafile 1:
'/u01/app/oracle/dbs/t_db1.f' is media corrupt
Message : Object BMRTEST2 owned by SYS might be unavailable

使用ADRCI工具來檢視檢查報告
1.確保作業系統環境變數(比如 ORACLE_HOME)已經被設定.並輸入以下命令:

[oracle@jyrac1 ~]$ adrci

ADRCI: Release 11.2.0.1.0 - Production on Wed Jun 11 17:18:53 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/u01/app/oracle"

工具啟動後會顯示以下提示符
adrci>

可以改變當前的ADR home目錄.使用show homes命令可以列出所有的ADR home目錄,set homepath命令用來改變當前ADR home目錄.

adrci> show homes
ADR Homes:
diag/tnslsnr/jyrac1/listener
diag/rdbms/cs/cs
diag/rdbms/jytest/jytest
diag/rdbms/jy/jy
diag/rdbms/jycs/jycs
adrci> set homepath diag/rdbms/jycs/jycs

2.輸入以下命令:
show hm_run
這個命令會列出所有執行過並(儲存在v$hm_run)註冊到ADR檔案庫中的檢查

adrci> show hm_run

ADR Home = /u01/app/oracle/diag/tnslsnr/jyrac1/listener:
*************************************************************************
0 rows fetched



ADR Home = /u01/app/oracle/diag/rdbms/cs/cs:
*************************************************************************
0 rows fetched



ADR Home = /u01/app/oracle/diag/rdbms/jytest/jytest:
*************************************************************************
0 rows fetched



ADR Home = /u01/app/oracle/diag/rdbms/jy/jy:
*************************************************************************
0 rows fetched



ADR Home = /u01/app/oracle/diag/rdbms/jycs/jycs:
*************************************************************************

**********************************************************
HM RUN RECORD 1
**********************************************************
   RUN_ID                        1
   RUN_NAME                      HM_RUN_1
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2014-03-24 13:32:58.872509 +08:00
   RESUME_TIME                   
   END_TIME                      2014-03-24 13:33:01.710518 +08:00
   MODIFIED_TIME                 2014-03-24 13:33:01.710518 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   

**********************************************************
HM RUN RECORD 2
**********************************************************
   RUN_ID                        61
   RUN_NAME                      HM_RUN_61
   CHECK_NAME                    DB Structure Integrity Check
   NAME_ID                       2
   MODE                          2
   START_TIME                    2014-04-08 10:22:43.295203 +08:00
   RESUME_TIME                   
   END_TIME                      2014-04-08 10:22:43.723241 +08:00
   MODIFIED_TIME                 2014-04-08 10:22:43.723241 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   

**********************************************************
HM RUN RECORD 3
**********************************************************
   RUN_ID                        81
   RUN_NAME                      jy_dict_run
   CHECK_NAME                    Dictionary Integrity Check
   NAME_ID                       24
   MODE                          0
   START_TIME                    2014-06-11 16:42:00.675293 +08:00
   RESUME_TIME                   
   END_TIME                      2014-06-11 16:42:02.950141 +08:00
   MODIFIED_TIME                 2014-06-11 17:14:33.658642 +08:00
   TIMEOUT                       0
   FLAGS                         0
   STATUS                        5
   SRC_INCIDENT_ID               0
   NUM_INCIDENTS                 0
   ERR_NUMBER                    0
   REPORT_FILE                   /u01/app/oracle/diag/rdbms/jycs/jycs/hm/HMREPORT_jy_dict_run.hm

3.定位你要建立報告的檢查並注意檢查執行的名稱.如果檢查報告已經存在那麼report_file欄位就會包含一個檔名比如上面的
/u01/app/oracle/diag/rdbms/jycs/jycs/hm/HMREPORT_jy_dict_run.hm.否則使用下面的命令來生成一個報告.

adrci> create report hm_run jy_dict_run_1
DIA-48448: This command does not support multiple ADR homes

這是因為當前存在多個ADR home目錄

adrci> show homes
ADR Homes:
diag/tnslsnr/jyrac1/listener
diag/rdbms/cs/cs
diag/rdbms/jytest/jytest
diag/rdbms/jy/jy
diag/rdbms/jycs/jycs
adrci> set homepath diag/rdbms/jycs/jycs
adrci> create report hm_run jy_dict_run_1

4.執行以下命令來檢視報告:

adrci> show report hm_run jy_dict_run_1
< ?xml version="1.0" encoding="US-ASCII"?>HM Report: jy_dict_run_1
    
        Dictionary Integrity Check
        101
        jy_dict_run_1
        MANUAL
        COMPLETED
        0
        0
        0
        2014-06-11 17:27:13.477462 +08:00
        2014-06-11 17:27:14.734166 +08:00
    
    
        TABLE_NAME=ALL_CORE_TABLES
        CHECK_MASK=ALL
    
    

health monitor檢視
可以用檢視來代替檢查報告來檢視特定檢查的結果.可用的檢視有v$hm_run,v$hm_finding,v$hm_recommendation
下面查詢v$hm_run來判斷執行檢查的確良歷史資訊:

SQL> SELECT run_id, name, check_name, run_mode, src_incident FROM v$hm_run;

    RUN_ID NAME                             CHECK_NAME                       RUN_MODE SRC_INCIDENT
---------- -------------------------------- -------------------------------- -------- ------------
        61 HM_RUN_61                        DB Structure Integrity Check     REACTIVE            0
        81 jy_dict_run                      Dictionary Integrity Check       MANUAL              0
       101 jy_dict_run_1                    Dictionary Integrity Check       MANUAL              0
         1 HM_RUN_1                         DB Structure Integrity Check     REACTIVE            0

下面查詢v$hm_finding來獲得RUN_ID 61的詳細資訊:

SELECT type, description FROM v$hm_finding WHERE run_id = 61;
TYPE          DESCRIPTION
------------- -----------------------------------------------------------------------------
FAILURE      Block 64349 in datafile 1: '/u01/app/oracle/dbs/t_db1.f' is media corrupt
FAILURE      Block 64351 in datafile 1: '/u01/app/oracle/dbs/t_db1.f' is media corrupt

health check引數

Table 9–6 Parameters for Data Block Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                  Default Value           Description
------------------------------------------------------------------------------------------------------------------
BLC_DF_NUM                    Number                (none)                  Block datafile number
BLC_BL_NUM                    Number                (none)                  Data block number
------------------------------------------------------------------------------------------------------------------


Table 9–7 Parameters for Redo Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------
SCN_TEXT                      Text                   0                      SCN of the latest good redo (if known)
------------------------------------------------------------------------------------------------------------------


Table 9–8 Parameters for Undo Segment Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------
USN_NUMBER                    Text                   (none)                 Undo segment number
------------------------------------------------------------------------------------------------------------------


Table 9–9 Parameters for Transaction Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------              
TXN_ID                        Text                   (none)                 Transaction ID
------------------------------------------------------------------------------------------------------------------

Table 9–10 Parameters for Dictionary Integrity Check
------------------------------------------------------------------------------------------------------------------
Parameter Name                Type                   Default Value          Description
------------------------------------------------------------------------------------------------------------------
CHECK_MASK                    Text                   ALL                    Possible values are:
                                                                            COLUMN_CHECKS—Run column
                                                                            checks only. Verify column-level
                                                                            constraints in the core tables.

                                                                            ROW_CHECKS—Run row checks only.
                                                                            Verify row-level constraints in the
                                                                            core tables.

                                                                            REFERENTIAL_CHECKS—Run
                                                                            referential checks only. Verify
                                                                            referential constraints in the core
                                                                            tables.
                       
                                                                            ALL—Run all checks.

TABLE_NAME                    Text                   ALL_CORE_TABLES        Name of a single core table to check. If
                                                                            omitted, all core tables are checked.
------------------------------------------------------------------------------------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-1180769/,如需轉載,請註明出處,否則將追究法律責任。

相關文章