Oracle 11g ADR(Automatic Diagnostic Repository)在數(shù)據(jù)庫維護和故障排除中發(fā)揮著不可替代的作用。它收集和存儲數(shù)據(jù)庫實例和組件提供的診斷、警告和錯誤信息,有助于管理員分析和解決問題。下面將以具體案例來介紹ADR是如何工作的。
SQL>select count(*) from customers; ERROR at line 1: ORA-00942: table or view does not exist
當我們嘗試訪問一個不存在的表時,Oracle會提示錯誤和錯誤代碼。這時,ADR會自動記錄錯誤信息和相關診斷數(shù)據(jù)。這些信息存儲在ADR的基礎目錄中,包括日志文件、跟蹤文件、核心轉(zhuǎn)儲文件等。一個典型的ADR路徑是:$ORACLE_BASE/diag/rdbms/db_name/instance_name。
在這個路徑下,可以找到諸如alert.log、incident/incident_number/alert_db_name_instance_name.log等日志文件。這些文件中包含了數(shù)據(jù)庫中發(fā)生的診斷信息、警告和錯誤的詳細描述以及建議的解決方案。通過讀取這些信息,管理員可以快速定位問題所在并解決它。
SQL>create table customers(id number, name varchar2(50)); Table created. SQL>desc customers; Name Null? Type ------------------------------------- -------- ------------------ ID NUMBER NAME VARCHAR2(50) SQL>alter table customers add age number; Table altered. SQL>select id, name, age from customers; ERROR at line 1: ORA-00904: "AGE": invalid identifier
在這個案例中,我們試圖查詢customers表的三個字段,但其中的一個字段age并不存在。這時,Oracle會再次記錄錯誤信息并將它們保存到ADR路徑下。可以通過ADR中的incident/incident_number文件找到相應的信息。此外,一個更方便的方法是使用ADR命令行實用程序diagcommand,這個工具提供了一些可用于診斷、查詢和管理ADR的命令。
SQL>show parameter diagnostic_dest NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ diagnostic_dest string /u01/app/oracle/diag
在上面的例子中,我們剛剛使用了show parameter命令來查看當前數(shù)據(jù)庫實例的diagnostic_dest參數(shù),它指向ADR的基礎路徑。使用ADR有助于管理員更快地排除故障、記錄錯誤、診斷問題以及優(yōu)化數(shù)據(jù)庫性能。同時,也應該了解ADR的基礎知識和操作方法,以便在需要時快速響應。