通過一個始終處於打開狀態的內存中跟蹤工具,數據庫組件可以在第一次出現嚴重錯誤故障時捕獲診斷數據。系統將自動維護一個稱為“自動診斷資料檔案庫”的特殊資料檔案庫,以保存有關嚴重錯誤事件的診斷信息。此信息可用於創建要發送到 Oracle 支持服務以進行調查的意外事件程序包。
下面是一個典型的診斷會話工作流:
1)意外事件導致 Oracle Enterprise Manager (EM) 中出現預警。
2)DBA 可通過 EM 的“Alert(預警)”頁查看此預警。
3)DBA 可以細化到意外事件和問題的詳細信息。
4)DBA 可以決定或 Oracle 支持服務可以要求將信息打包並通過 MetaLink 發送到 Oracle 支持服務。DBA 可以將文件添加到自動打包的數據中。
2.自動診斷資料檔案庫 (ADR)
ADR 是一個基於文件的資料檔案庫,用於存放數據庫診斷數據(如跟蹤、意外事件轉儲和程序包、預警日志、健康監視報表、核心轉儲等)。它對存儲在任何數據庫外的多個實例和多種產品使用一個統一的目錄結構。因此,在數據庫關閉時可用來診斷問題。
從 Oracle Database 11g R1 開始,數據庫、自動存儲管理 (ASM)、集群就緒服務 (CRS) 和其它 Oracle 產品或組件將所有診斷數據都存儲在 ADR 中。每種產品的每個實例都將診斷數據存儲在自己的 ADR 主目錄下。例如,在具有共享存儲和 ASM 的 Real Application Clusters 環境中,每個數據庫實例和每個 ASM 實例在 ADR 中都有一個主目錄。
利用 ADR 的統一目錄結構、用於各種產品和實例的統一診斷數據格式以及一組統一的工具,客戶和 Oracle 技術支持可以相互關聯並分析多個實例的診斷數據。
ADR 根目錄又稱為 ADR 基目錄,其位置由 DIAGNOSTIC_DEST 初始化參數設置。如果此參數被忽略或留為空值,則數據庫在啟動時將對 DIAGNOSTIC_DEST 進行如下設置:如果設置了環境變量 ORACLE_BASE,則將 DIAGNOSTIC_DEST 設置為 $ORACLE_BASE。如果未設置環境變量 ORACLE_BASE,則將 DIAGNOSTIC_DEST 設置為 $ORACLE_HOME/log。
3.ADR 命令行工具 ADRCI
ADRCI 是一種命令行工具,屬於數據庫故障診斷基礎結構的一部分。
ADRCI 可以通過操作系統提示符與 ADR 進行交互。
使用 ADRCI 可以查看自動診斷資料檔案庫中的診斷數據。
使用 ADRCI 可以:
--查看自動診斷資料檔案庫 (ADR) 中的診斷數據
--將意外事件和問題信息打包成 zip 文件傳輸到 Oracle 技術支持
ADRCI 具有豐富的命令集,可在交互模式下使用,也可以在腳本中使用。此外,ADRCI 還可以執行 ADRCI 命令腳本,使用的方式與 SQL*Plus 執行 SQL 腳本和 PL/SQL 命令的方式相同。
$ adrci
ADRCI: Release 11.1.0.5.0 - On Sat Jul 7 08:01:40 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
ADR base = "/u01/app/oracle"
ADRCI> show incident
ADR Home = /u01/app/oracle/product/11.1.0/db_1/log/diag/rdbms/orcl/orcl:
**************************************************************************
INCIDENT_ID PROBLEM_KEY CREATE_TIME
----------- ------------------------------------ ------------------------
1681 ORA-600_dbgris01:1,_addr=0xa9876541 17-JAN-07 09.17.44.843125…
1682 ORA-600_dbgris01:12,_addr=0xa9876542 18-JAN-07 09.18.59.434775…
2 incident info records fetched
4.V$DIAG_INFO 視圖
SQL> SELECT * FROM V$DIAG_INFO;
NAME VALUE
------------------- -------------------------------------------------
Diag Enabled TRUE
ADR Base /u01/app/oracle
ADR Home /u01/app/oracle/diag/rdbms/orcl/orcl
Diag Trace /u01/app/oracle/diag/rdbms/orcl/orcl/trace
Diag Alert /u01/app/oracle/diag/rdbms/orcl/orcl/alert
Diag Incident /u01/app/oracle/diag/rdbms/orcl/orcl/incident
Diag Cdump /u01/app/oracle/diag/rdbms/orcl/orcl/cdump
Health Monitor /u01/app/oracle/diag/rdbms/orcl/orcl/hm
Default Trace File /u01/app/oracle/diag/.../trace/orcl_ora_11424.trc
Active Problem Count 3
Active Incident Count 8
V$DIAG_INFO 視圖列出了所有重要 ADR 的位置:
ADR Base:ADR 基目錄的路徑。
ADR Home:當前數據庫實例的 ADR 主目錄的路徑。
Diag Trace:文本預警日志和後台/前台進程跟蹤文件的位置。
Diag Alert:XML 版本的預警日志的位置。
Diag Incident:意外事件日志的寫入位置。
Diag Cdump:在此目錄中寫入診斷核心文件。
Health Monitor:運行健康監視時產生的日志的位置。
Default Trace File:會話的跟蹤文件的路徑。SQL 跟蹤文件寫入此位置。
5.Oracle 10g 與 Oracle 11g 的診斷跟蹤的位置
診斷數據 以前的位置 ADR 位置
前台進程跟蹤 USER_DUMP_DEST ADR_HOME/trace
後台進程跟蹤 BACKGROUND_DUMP_DEST ADR_HOME/trace
預警日志數據 BACKGROUND_DUMP_DEST ADR_HOME/alert ADR_HOME/trace
核心轉儲 CORE_DUMP_DEST ADR_HOME/cdump
意外事件轉儲 USER|BACKGROUND_DUMP_DEST ADR_HOME/incident/incdir_n