熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何對Oracle進行健康檢查

2013-11-13 16:19:12  來源: Oracle 

  通過健康檢查讓你的Oracle數據庫遠離損壞

  俗話說解決一件事往往能有種辦法那麼我們如何按照這些方法去做?

  甲骨文公司發布Oracle g時在被稱作為健康監控器的框架下推出了數據庫健康檢查功能在這個框架內健康檢查運行目的是診斷檢查你的Oracle數據庫它將監測數據庫的各個不同組成部分—主要是檢查損壞包括物理和邏輯上的雖然沒有種方式 但甲骨文有的是正如我們在過去關於自動診斷庫(Automatic Diagnostic RepositoryADR)的文章上看到的那些還試圖通過ADR執行和接入到健康檢查然而正如我們將看到它也許不是最好的辦法做到這一點

  所以在你的數據庫中有數據文件撤消重做字典或坐標系損壞嗎?你實際上可能運行得很好因此甚至我們不知道這些損壞的存在正如我們將看到在下面的例子中我有一個新安裝的Oracle並且有些損壞在其中我真正地希望搜尋那些錯誤; 但那是在另一天當運行健康檢查你作為一個數據庫管理員可以決定是使用臨時模式還是使用完全反應模式運行當以完全反應模式運行時會有人會抱怨錯誤訊息或你可能會看到一個Oracle警報警告運行健康檢查所出現的錯誤你還可以通過使用DBMS_HM PL/SQL軟件包進行健康檢查操作依賴於這些是如何運行在你的系統上他們將花費多久你如何頻繁看到損壞信息你可能要安排這些作為一個任務不過請注意這是一個新功能並附帶所有其他的新功能你應該 %相信他們不會造成損壞或鎖定你的系統只要適當低測試和監視那些操作同樣值得注意的是這些健康檢查可以運行在在線和現有的據庫上或者當數據庫是離線( NOMOUNT )時 由於有多種類型的健康檢查因此有些健康檢查只能運行在離線數據庫的上舉例來說重做完整性檢查只能是脫機運行當仔細想想就能明白這其中的奧秘不用進行各個不同的損壞/完整性檢查你可以使用下列SQL查看他們它可以讓你知道那些檢查是可以在線進行的那些檢查是要在脫機的情況下進行的 

    SQL> SELECT nameinternal_checkoffline_capabledescription FROM v$hm_check;

  NAME I O DESCRIPTION

  

  HM Test Check Y Y Check for HM Functionality

  DB Structure Integrity Check N Y Checks integrity of all database files

  Data Block Integrity Check N Y Checks integrity of a datafile block

  Redo Integrity Check N Y Checks integrity of redo log content

  Logical Block Check Y N Checks logical content of a block

  Transaction Integrity Check N N Checks a transaction for corruptions

  Undo Segment Integrity Check N N Checks integrity of an undo segment

  All Control Files Check Y Y Checks all control files in the database

  CF Member Check Y Y Checks a multiplexed copy of the control file

  All Datafiles Check Y Y Check for all datafiles in the database

  Single Datafile Check Y Y Checks a datafile

  Log Group Check Y Y Checks all members of a log group

  Log Group Member Check Y Y Checks a particular member of a log group

  Archived Log Check Y Y Checks an archived log

  Redo Revalidation Check Y Y Checks redo log content

  IO Revalidation Check Y Y Checks file accessability

  Block IO Revalidation Check Y Y Checks file accessability

  Txn Revalidation Check Y N Revalidate corrupted txn

  Failure Simulation Check Y Y Creates dummy failures

  Dictionary Integrity Check N N Checks dictionary integrity
    
    由於一些健康檢查需要額外的輸入參數為了簡便起見我決定只演示那裡有不需要輸入參數的檢查如果你想要看看那些需要輸入參數的檢查你可以執行下列SQL中我在Oracle文件中發現的

    SELECT cname check_name pname parameter_name

  ptype pdefault_value pdescription

  FROM v$hm_check_param p v$hm_check c

  WHERE pcheck_id = cid and cinternal_check = N

  ORDER BY cname;
    
    我不知道我已經遭遇多少次字典問題從字典表的錯誤信息到鎖定問題所以我對字典完整性檢查比較興奮字典完整性檢查將檢查字典的核心對象完整性包括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$這是我很關心的一個很好很長的列表以及檢查應該看看字典的條目內容制約因素和參照完整性

  通過手動運行字典完整性檢查我們需要分配下列DBMS_HMRUN_CHECK PL/SQL軟件包—給予該操作額外的名稱在這個例子中我將命名我的操作為DICTIONARY_CHECK_

    BEGIN

  DBMS_HMRUN_CHECK(Dictionary Integrity Check

  DICTIONARY_CHECK_);

  END;

  /
    
     現在這是它得到一些有趣的DBMS_HMRUN_CHECK在ADR存貯其相關信息因此使用DBMS_HM PL/SQL軟件包或ADRCI功能生成的報告對我來說當DBMS_HM PL/SQL軟件包將以HTML XML或文本格式輸出報告時我們已經沒有多少選擇 因為ADRCI功能只以XML的形式輸出報告 然而我們通過對比這兩種方法能使我們看到ADR存在的不足以及知道ADR和DBMS_HM在什麼地方功能有重疊

  由於DBMS_HMRUN_CHECK將其信息存儲在ADR中我們可以很容易地看到HM_RUN 通過輸入下列ADRCI命令 

  

    adrci> show hm_run

  ADR Home = /opt/app/oracle/diag/rdbms/dbfs/dbFS:

  *****************************************************

  **********************************************************

  HM RUN RECORD

  **********************************************************

  RUN_ID

  RUN_NAME DICTIONARY_CHECK_

  CHECK_NAME Dictionary Integrity Check

  NAME_ID

  MODE

  START_TIME :: :

  RESUME_TIME

  END_TIME :: :

  MODIFIED_TIME :: :

  TIMEOUT

  FLAGS

  STATUS

  SRC_INCIDENT_ID

  NUM_INCIDENTS

  ERR_NUMBER

  REPORT_FILE

  這最顯著的信息或缺失信息是REPORT_FILE為 此欄只有當報告生成時才能被填充建立一個報告可以通過DBMS_HM包或通過ADRCI的 CREATE REPORT命令
   

  使用DBMS_HM包 
    
   

    SET LONG

  SET LONGCHUNKSIZE

  SET PAGESIZE

  SET LINESIZE

  SELECT DBMS_HMGET_RUN_REPORT(DICTIONARY_CHECK_) FROM DUAL;

  使用ADRCI CREATE REPORT命令 
    
 

    CREATE REPORT hm_run DICTIONARY_CHECK_

  When using the DBMS_HM package the output looks like:

  當使用DBMS_HM包時輸出結果如下

  DBMS_HMGET_RUN_REPORT(DICTIONARY_CHECK_)

  

  Basic Run Information

  Run Name : DICTIONARY_CHECK_

  Run Id :

  Check Name : Dictionary Integrity Check

  Mode : MANUAL

  Status : COMPLETED

  Start Time : :: :

  End Time : :: :

  Error Encountered :

  Source Incident Id :

  Number of Incidents Created :

  Input Paramters for the Run

  TABLE_NAME=ALL_CORE_TABLES

  CHECK_MASK=ALL

  Run Findings And Recommendations

  Finding

  Finding Name : Dictionary Inconsistency

  Finding ID :

  Type : FAILURE

  Status : OPEN

  Priority : CRITICAL

  Message : SQL dictionary health check: file$ pk on object FILE$

  failed

  Message : Damaged rowid is AAAAARAABAAAAByAAF description: No further

  damage description available

  Finding

  Finding Name : Dictionary Inconsistency

  Finding ID :

  Type : FAILURE

  Status : OPEN

  Priority : CRITICAL

  Message : SQL dictionary health check: dependency$dobj# fk on

  object DEPENDENCY$ failed

  Message : Damaged rowid is AAAABnAABAAAOiHABI description: No further

  damage description available

  Finding

  Finding Name : Dictionary Inconsistency

  Finding ID :

  Type : FAILURE

  Status : OPEN

  Priority : CRITICAL

  Message : SQL dictionary health check: dependency$dobj# fk on

  object DEPENDENCY$ failed

  Message : Damaged rowid is AAAABnAABAAAQXqAA description: No further

  damage description available

  運行後DBMS_HM包或ADRCI 的CREATE REPORT命令後我們可以重新輸入ADRCI顯示hm_run命令現在可以看到REPORT_FILE信息被填充了

  REPORT_FILE /opt/app/oracle/diag/rdbms/dbfs/dbFS/hm/HMREPORT_DICTIONARY_CHECK_hm

  當使用ADRCI功能你必須先運行生成報告文件的命令如果該文件不存在那麼運行另一個命令以顯示其內容你還可以查看該報告通過ADRCI輸入以下命令因為輸出的結果在XML文檔中因此它不會在這裡顯示

  show report hm_run DICTIONARY_CHECK_

  不管用什麼方法這些檢查結果對調查Oracle數據庫的損壞將是一個重要的信息雖然我還沒有進行任何詳細的測試包括時機鎖定或性能等問題對此應該謹慎使用任何時候執行損壞檢查必須有某種形式的對象鎖定這將只需要時間來觀看這些程序在一個數據庫上操作的步驟和實際效果其實我知道事情會是怎樣如果你有問題你不希望找到他們嗎?這對DBA來說只不過是另一個值得驕傲的成就


From:http://tw.wingwit.com/Article/program/Oracle/201311/18140.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.