程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 初了解Oracle11g的AutomaticDiagnosticRepository新特性

初了解Oracle11g的AutomaticDiagnosticRepository新特性

編輯:Oracle教程

Oracle 11g之前,當數據庫出現問題時,往往第一時間需要看alert日志,看看裡面記錄了哪些錯誤,可以給我們提示。alert文件名則

是alert_<ORACLE_SID>.log,文件存儲路徑由參數background_dump_dest決定,例如:

SQL> show parameter background_dump_dest

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

background_dump_dest string /opt/app/ora10g/admin/petest/bdump

可以知道alert日志就保存在/opt/app/ora10g/admin/petest/bdump路徑下。

例如如下這個log後綴的alert日志,內容是文本格式的,可以直接打開查看:

-rw-r-----. 1 oracle root 1.8G Jun 21 19:30 alert_bisal.log

從Oracle 11g開始,alert除了文本格式,還提供了xml格式的,且日志路徑有所變化。如果設置了參數diagnostic_dest,則原來的

background_dump_dest等路徑將失效。Oracle 11g提供的新特性“自動診斷庫(Automatic Diagnostic Repository, ADR)”的目

錄就是通過這個參數設置的,這個目錄下存放的是數據庫診斷日志、跟蹤文件等之前分布於bdump、cdump等路徑中的文件,這個

目錄通常稱為ADR base。例如:

SQL> show parameter diag

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

diagnostic_dest string /home/oracle

diagnostic_dest的缺省值還和環境變量ORACLE_BASE有關,例如:

>如果設置了ORACLE_BASE,則diagnostic_dest = $ORACLE_BASE

>如果未設置ORACLE_BASE,則diagnostic_dest = $ORACLE_HOME/log

根據eygle的介紹,11g將環境變量ORACLE_BASE引入到了數據庫內部,使用隱含參數記錄:

SELECT x.ksppinm NAME, y.ksppstvl VALUE, x.KSPPDESC PDESC

FROM SYS.x$ksppi x, SYS.x$ksppcv y

WHERE x.indx = y.indx AND x.ksppinm LIKE '%&par%';

NAME VALUE PDESC

--------------- ----------------- ------------------

_oracle_base /home/oracle ORACLE_BASE

注意這裡SQL的輸入的是小寫oracle_base。

可以使用v$diag_info查看ADR信息:

SQL> select * from v$diag_info;

INST_ID NAME VALUE

---------- ------------------------- -------------------------

1 Diag Enabled TRUE

1 ADR Base /home/oracle

1 ADR Home /home/oracle/diag/rdbms/galt/galt

1 Diag Trace /home/oracle/diag/rdbms/galt/galt/trace

1 Diag Alert /home/oracle/diag/rdbms/galt/galt/alert

1 Diag Incident /home/oracle/diag/rdbms/galt/galt/incident

1 Diag Cdump /home/oracle/diag/rdbms/galt/galt/cdump

1 Health Monitor /home/oracle/diag/rdbms/galt/galt/hm

1 Default Trace File /home/oracle/diag/rdbms/galt/galt/trace/galt_ora_8970.trc

1 Active Problem Count 1

1 Active Incident Count 50

11 rows selected.

其中Diag Alert保存的是xml格式的alert日志,Diag Trace保存的是文本格式的alert日志。

還提供了一個新工具ADRCI(ADR Command Interpreter),說是用於管理診斷數據,友好閱讀xml格式的日志,但這裡我還沒搞清楚為什麼需要xml格式的日志,請高手指教。

命令行中輸入adrci就可以登錄了,例如:

[oracle@riserver2 diag]$ adrci

ADRCI: Release 11.2.0.1.0 - Production on Sat Jun 21 18:51:31 2014

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

ADR base = "/home/oracle"

adrci>

使用show alert可以選擇需要查看的日志文件:

adrci> show alert

Choose the alert log from the following homes to view:

1: diag/tnslsnr/riserver2/listener

2: diag/rdbms/galt/galt

Q: to quit

Please select option:

接下來就是為什麼要有ADR?

ADR是將各類跟蹤文件、日志文件的存儲進行統一,不會像之前需要不同文件時要到不同目錄中查找,有時還得看看參數設置到哪

些路徑下了。Oracle 11g提出了FDI,故障診斷基礎框架,Fault Diagnosability Infrastructure,宗旨就是簡化用戶的數據庫出現

故障時向Oracle請求協助需要反復交互的過程。以前用戶需要根據Oracle的要求,不斷反復交互,收集數據,再反饋Oracle,才能

解決SR,通過FDI,可能會提高故障分析解決的效率。(因為我還沒提過,所以不知道是否真的節省了成本?)

FDI的核心組件是ADR,相關的日志文件進行了歸類匯總都存儲於ADR之下。同時使用IPS,事件打包服務,Incident Packaging

Service,可以將相關的數據、日志文件打包壓縮,然後用戶將這個文件傳給Oracle診斷。

例如:

adrci> show incident

ADR Home = /home/oracle/diag/tnslsnr/riserver2/listener:

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

0 rows fetched

ADR Home = /home/oracle/diag/rdbms/galt/galt:

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

INCIDENT_ID PROBLEM_KEY CREATE_TIME

-------------------- ------------------------ ----------------------------------------

129708 ORA 4030 2014-06-21 05:35:06.727000 +08:00

129709 ORA 4030 2014-06-21 05:35:15.598000 +08:00

129710 ORA 4030 2014-06-21 05:35:23.600000 +08:00

129711 ORA 4030 2014-06-21 05:35:31.526000 +08:00

129712 ORA 4030 2014-06-21 05:35:39.611000 +08:00

5 rows fetched

可以看到這裡有5次INCIDENT,可以用如下命令查看具體的信息:

adrci> show incident -mode DETAIL -p "incident_id=129708";
ADR Home = /home/oracle/diag/tnslsnr/riserver2/listener:
*************************************************************************
0 rows fetched
<INCIDENT_INFO mode="detail">
<ADR_HOME name="/home/oracle/diag/tnslsnr/riserver2/listener">
ADR Home = /home/oracle/diag/rdbms/galt/galt:
*************************************************************************
**********************************************************
INCIDENT INFO RECORD 1
**********************************************************
INCIDENT_ID 129708
STATUS ready
CREATE_TIME 2014-06-21 05:35:06.727000 +08:00
PROBLEM_ID 1
CLOSE_TIME <NULL>
FLOOD_CONTROLLED none
ERROR_FACILITY ORA
ERROR_NUMBER 4030
ERROR_ARG1 832
ERROR_ARG2 callheap
ERROR_ARG3 temporary memory
ERROR_ARG4 <NULL>
ERROR_ARG5 <NULL>
ERROR_ARG6 <NULL>
ERROR_ARG7 <NULL>
ERROR_ARG8 <NULL>
ERROR_ARG9 <NULL>
ERROR_ARG10 <NULL>
ERROR_ARG11 <NULL>
ERROR_ARG12 <NULL>
SIGNALLING_COMPONENT <NULL>
SIGNALLING_SUBCOMPONENT <NULL>
SUSPECT_COMPONENT <NULL>
SUSPECT_SUBCOMPONENT <NULL>
ECID <NULL>
IMPACTS 0
PROBLEM_KEY ORA 4030
FIRST_INCIDENT 129708
FIRSTINC_TIME 2014-06-21 05:35:06.727000 +08:00
LAST_INCIDENT 129757
LASTINC_TIME 2014-06-21 05:35:52.409000 +08:00
IMPACT1 34668547
IMPACT2 34668546
IMPACT3 0
IMPACT4 0
KEY_NAME ProcId
KEY_VALUE 2.1
KEY_NAME Client ProcId
KEY_VALUE [email protected]_140012269696768
KEY_NAME SID
KEY_VALUE 383.1
OWNER_ID 1
INCIDENT_FILE /home/oracle/diag/rdbms/galt/galt/trace/galt_pmon_3005.trc
OWNER_ID 1
INCIDENT_FILE /home/oracle/diag/rdbms/galt/galt/incident/incdir_129708/galt_pmon_3005_i129708.trc
1 rows fetched

可以看到目錄下有異常事件的跟蹤信息:

[oracle@riserver2 diag]$ cd /home/oracle/diag/rdbms/galt/galt/incident/incdir_129708/

[oracle@riserver2 incdir_129708]$ ls -l

total 7408

-rw-r-----. 1 oracle root 7561282 Jun 21 05:35 galt_pmon_3005_i129708.trc

-rw-r-----. 1 oracle root 19034 Jun 21 05:35 galt_pmon_3005_i129708.trm

下面就使用IPS進行打包:

adrci> set homepath diag/rdbms/galt/galt

adrci> ips create package incident 129708

Created package 1 based on incident id 129708, correlation level typical

adrci> ips generate package 1 in /home/oracle/diag

Generated package 1 in file /home/oracle/diag/ORA4030_20140621184527_COM_1.zip, mode complete

Additional incremental files:

/home/oracle/diag/ORA4030_20140621184527_INC_2.zip

解壓縮這兩個文件可以看到像alert日志等都打進來了,這裡兩文件壓縮後是17MB左右,但alert日志就有1.7GB,所以壓縮效率還很高。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved