Automatic Diagnostic Repository

EXEM Knowledge Base

Jump to: navigation, 찾기

ADR은 기존의 Dump File, Trace File, Alert log, 그리고 Oracle의 여러가지 report와 같이 file base로 생성되는 로그들을 모아놓은 저장소이다. 이 저장소는 물론 file base로 구성되어 있다. 이 기능을 위해 Oracle 11g에서는 기존의 Dump destination의 구조를 새로운 구조로 바꾸었다.

ADR은 기본적으로 저장소 이기 때문에 log, dump, trace와 같은 다양한 종류의 로그(Diagnostics Log) 뿐만이 아니고 RAC같은 다수의 instance그리고 다양한 agent, module, component들이 쏟아내는 로그들도 한꺼번에 관리가 가능하도록 일원화 하여 구현하고 있는 것이다.

[편집] ADR 디렉토리 구조

기존의 Diagnostics Log의 경우는 보통 $ORACLE_BASE/admin/SID/ 하위로 bdump, udump, cdump, adump, pfile등으로 구성이 되어 있었고 이는 *_DUMP_DEST라는 파라메터를 통해 지정이 되어 있었다.

그러나 11g의 경우는 이와는 사뭇 다른 형태를 보여주고 있다. 기본적으로 Diagnostics Log들은 ADR이라는 범주안에서 구분되고 저장된다. 그래서 기존의 admin 하위에 있던 것들은 이제 ADR Base라는 ADR root directory하위로 저장이 된다. 이 위치는 DIAGNOSTIC_DEST라는 파라메터를 통해 지정되는데 기본적으로 ORACLE_BASE가 지정되면 같은 위치를 나타내고 만약 ORACLE_BASE가 설정되어 있지 않은 경우는 $ORACLE_HOME/log 라는 디렉토리를 파라메터의 값으로 사용한다.

ADR 디렉토리 구조

ADR 디렉토리는 위의 그림과 같은 구조를 지닌다. 위의 그림을 보면 불필요하게 중간 디렉토리가 많다는 생각이 들기도 하는데 이것은 아래와 같은 내용으로 구성된다.

   DIAGNOSTIC_DEST/diag/PRODUCT_TYPE/PRODUCT_ID/INSTANCE_ID 

다음은 oracle 11g가 설치된 실제 디렉토리 구조이다.

[/oracle/ORA111/diag/rdbms/ora111/ORA111] ls -al
total 120
drwxr-xr-x  13 oracle oinstall  4096 Aug 23 11:25 .
drwxr-x---   4 oracle oinstall  4096 Aug 23 11:25 ..
drwxr-xr-x   2 oracle oinstall  4096 Oct 22 16:12 alert
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 11:25 cdump
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 11:25 hm
drwxr-xr-x   7 oracle oinstall  4096 Aug 23 13:18 incident
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 11:25 incpkg
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 22:00 ir
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 13:18 lck
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 11:25 metadata
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 13:18 stage
drwxr-xr-x   2 oracle oinstall  4096 Aug 23 13:18 sweep
drwxr-xr-x   7 oracle oinstall 69632 Oct 22 16:09 trace

이 구조를 디렉토리 naming rule에 적용 시켜 보면 DIAGNOSTIC_DEST는 /oracle/ORA111이고 diag라는 디렉토리 밑에 PRODUCT_TYPE은 rdbms, PRODUCT_ID는 ora111, INSTANCE_ID는 ORA111로 생각할 수 있다. 이는 다수의 제품과 다수의 instance를 하나의 ADR로 구성할 수 있는 형태로 ADR에 대한 Oracle의 전략적인 구상을 엿볼 수 있다.

[편집] ADR의 diagnostic data

ADR의 하위 디렉토리의 내용은 다음과 같다.

  • alert : XML형태의 alert log를 저장하고 있다. oracle 11g부터 alert log를 xml형태와 text format형태 두가지로 제공하고 있다. 그러나 메인은 xml형태이며 oracle에서도 이를 파싱해서 사용하는 것을 권장한다.
  • cdump : Core File들로 메모리 dump들을 포함한다.
  • incident : 이 디렉토리 밑에는 다수의 하위의 디렉토리들이 있는데 이는 특정 사건에 대한 dump파일들을 담고 있다. oracle은 각각의 사건들을 id를 부여하여 관리하고 있는데 ADR에서는 이를 각각 하위 디렉토리로 자료를 관리하는 것이다. 하위 디렉토리의 예는 아래와 같다.
[/oracle/ORA111/diag/rdbms/ora111/ORA111/incident] ls -al
total 28
drwxr-xr-x   7 oracle oinstall 4096 Aug 23 13:18 .
drwxr-xr-x  13 oracle oinstall 4096 Aug 23 11:25 ..
drwxr-xr-x   2 oracle oinstall 4096 Aug 23 13:13 incdir_113
drwxr-xr-x   2 oracle oinstall 4096 Aug 23 13:13 incdir_114
drwxr-xr-x   2 oracle oinstall 4096 Aug 23 13:13 incdir_115
drwxr-xr-x   2 oracle oinstall 4096 Aug 23 13:13 incdir_116
drwxr-xr-x   2 oracle oinstall 4096 Oct 22 10:50 incdir_145
  • trace : 기존의 bdump와 cdump의 내용들이 여기에 들어간다. 즉 background, foreground에 대한 trace파일들을 보관하고 있다. 우리가 자주 사용하는 10046이나 10053이벤트의 trace파일들도 여기에 떨어지게 된다. 이 디렉토리를 보면 기존의 trc라는 확장자와 더불어 trm이라는 확장자를 찾아볼 수 있는데 이것은 데이터베이스가 serching이나 navigation시 활용할 수 있도록 구조적인 map을 가지고 있는 trace map파일이다. udump와 bdump를 합쳐놓아 file list를 확인할 때 가독성을 떨어지지만 oracle은 이를 자동화하여 사람이 직접 찾아볼 필요도 없게 할 생각을 가지고 있는 것은 아닐까 하는 생각을 하게 한다.

또한 SQL을 통해 현재 자신이 사용하는 혹은 각 프로세스의 trace파일을 찾아 볼 수 있다. 아래는 이들 sql의 예이다.

SQL>SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';
VALUE                                   
----------------------------------------
/oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_ora_25988.trc
SQL>SELECT PID, PROGRAM, TRACEFILE FROM V$PROCESS;
PID PROGRAM                                  TRACEFILE
--- ------------------- ----------------------------------------
  1 PSEUDO              /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_ora_0.trc
  2 oracle@TEST(PMON)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_pmon_28990.trc
  3 oracle@TEST(VKTM)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_vktm_28992.trc
  4 oracle@TEST(DIAG)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_diag_28996.trc
  5 oracle@TEST(DBRM)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_dbrm_28998.trc
  6 oracle@TEST(PSP0)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_psp0_29000.trc
  7 oracle@TEST(LGWR)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_lgwr_29010.trc
  8 oracle@TEST(DIA0)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_dia0_29004.trc
  9 oracle@TEST(MMAN)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_mman_29006.trc
 10 oracle@TEST(DBW0)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_dbw0_29008.trc
 11 oracle@TEST(CKPT)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_ckpt_29012.trc
 12 oracle@TEST(SMON)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_smon_29014.trc
 13 oracle@TEST(RECO)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_reco_29016.trc
 14 oracle@TEST(MMON)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_mmon_29018.trc
 15 oracle@TEST(MMNL)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_mmnl_29020.trc
 16 oracle@TEST(D000)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_d000_29022.trc
 17 oracle@TEST(S000)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_s000_29024.trc
 18 oracle@TEST(CJQ0)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_cjq0_1405.trc
 19 oracle@TEST(FBDA)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_fbda_29275.trc
 20 oracle@TEST(SMCO)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_smco_29277.trc
 21 oracle@TEST(W000)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_w000_22970.trc
 22 oracle@TEST(QMNC)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_qmnc_29362.trc
 23 oracle@TEST(q000)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_q000_29526.trc
 24 oracle@TEST(q001)   /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_q001_29528.trc
 25 oracle@TEST         /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_ora_31085.trc
 26 oracle@TEST         /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_ora_25988.trc
  • 기타 디렉토리 : 그밖에 health-monitor report(HM), data repair report(IR), SQL test cases, incident packages(INCPKG)등등의 디렉토리가 있다.

[편집] ADR 관련 도구들

  • V$DIAG_INFO : 이 뷰는 현재 instance의 주요 ADR location의 정보를 보여준다.
SQL>select * from V$DIAG_INFO;
INST_ID NAME                   VALUE
------- ---------------------- ----------------------------------------
      1 Diag Enabled           TRUE
      1 ADR Base               /oracle/ORA111
      1 ADR Home               /oracle/ORA111/diag/rdbms/ora111/ORA111
      1 Diag Trace             /oracle/ORA111/diag/rdbms/ora111/ORA111/trace
      1 Diag Alert             /oracle/ORA111/diag/rdbms/ora111/ORA111/alert
      1 Diag Incident          /oracle/ORA111/diag/rdbms/ora111/ORA111/incident
      1 Diag Cdump             /oracle/ORA111/diag/rdbms/ora111/ORA111/cdump
      1 Health Monitor         /oracle/ORA111/diag/rdbms/ora111/ORA111/hm
      1 Default Trace File     /oracle/ORA111/diag/rdbms/ora111/ORA111/trace/ORA111_ora_25988.trc
      1 Active Problem Count   1
      1 Active Incident Count  50

  • ADRCI : 이것은 oracle이 제공하는 command line 방식의 ADR해석 툴이다. ADR Commande Interpreter의 약자이기도 하다. 이 툴은 주로 ADR의 각종 diagnostic data나 Health Monitor report를 열람하거나 incident또는 문제 상항을 zip file로 묶어 ORACLE Support에게 전달하는 IPS(Incident Packaging Service)를 수행한다.