在Oracle中,各個組件(監聽器、資料庫執行個體、各種組態工具)在安裝和運行時都會有相應的日誌Log和追蹤檔案Trace產生。Oracle 11g之前,這些資訊都是零散的分布在Oracle組件目錄中的。在11g,Oracle推出了ADR(Automatic Diagnostic Repository)的概念,將這些資訊統一的列入到其中管理。
1、ADRCI初探
在11g中,提供了ADR_HOME目錄,其中集中儲存各類型的日誌和跟蹤資訊。
[oracle@bspdev app]$ ls -l
total 24
drwxrwxr-x. 3 oracle oinstall 4096 Mar 25 2011 11.2.0
drwxr-x---. 3 oracle oinstall 4096 Apr 1 2011 admin
drwxr-x---. 5 oracle oinstall 4096 Apr 1 2011 cfgtoollogs
drwxr-xr-x. 2 oracle oinstall 4096 Mar 31 2011 checkpoints
drwxrwxr-x. 6 oracle asmadmin 4096 Apr 1 2011 diag
drwxrwxr-x. 76 oracle oinstall 4096 Feb 23 09:34 oracle
[oracle@bspdev diag]$ ls
asm asmtool rdbms tnslsnr
[oracle@bspdev diag]$ cd rdbms
[oracle@bspdev rdbms]$ ls
ora11g
[oracle@bspdev rdbms]$ cd ora11g
[oracle@bspdev ora11g]$ ls
i_1.mif ora11g
[oracle@bspdev ora11g]$ cd ora11g
[oracle@bspdev ora11g]$ ls
alert cdump hm incident incpkg ir lck metadata stage sweep trace
在$ORACLE_BASE目錄下,存在diag檔案夾,裡面儲存如asm、asmtool、rdbms和TNS listener等重要組件的日誌資訊。針對每一個組件,又按照警示檔案、追蹤檔案和dump等分類進行組織。
Diag目錄實際上就形成了一個輸出日誌資訊資料庫,所有的診斷資訊和日誌資訊都在該目錄中進行分類儲存。此外,Oracle推出了ADRCI工具,可以統一的使用介面命令檢查日誌和管理診斷資訊。
ora11g:/home/ora11g>adrci
ADRCI: Release 11.2.0.1.0 - Production on Mon May 21 13:56:53 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/nbsdu01/app/oracle"
adrci>
通過命令列adrci,我們可以在統一的命令列中進行診斷資訊管理。
adrci> help
HELP [topic]
Available Topics:
CREATE REPORT
ECHO
EXIT
HELP
HOST
IPS
PURGE
RUN
SET BASE
SET BROWSER
SET CONTROL
SET ECHO
SET EDITOR
SET HOMES | HOME | HOMEPATH
SET TERMOUT
SHOW ALERT
SHOW BASE
SHOW CONTROL
SHOW HM_RUN
SHOW HOMES | HOME | HOMEPATH
SHOW INCDIR
SHOW INCIDENT
SHOW PROBLEM
SHOW REPORT
SHOW TRACEFILE
SPOOL
There are other commands intended to be used directly by Oracle, type
"HELP EXTENDED" to see the list
2、查看日誌資訊
在使用adrci的過程中,要注意當前homepath的問題。每個Oracle組件,都存在一個診斷資訊目錄。
ADR base = "/nbstu01/app/oracle"
adrci> show homepath
ADR Homes:
diag/rdbms/nbstest/NBSTEST
diag/tnslsnr/P550_05_LC/listener
要注意,如果要進入具體的那個組件查看日誌資訊和診斷資訊,首先需要設定homepath到一個組件目錄裡面。上面的兩個ADR home中,是Oracle資料庫和監聽器兩個組件。如果我們要查看資料庫日誌,需要如下的配置。
adrci> set homepath diag/rdbms/nbstest/NBSTEST
adrci>show alert -TAIL 10
2012-05-21 15:37:59.861000 +08:00
Thread 1 cannot allocate new log, sequence 2319
Private strand flush not complete
Current log# 2 seq# 2318 mem# 0: /nbstdata01/oradata/NBSTEST/redo02a.log
Current log# 2 seq# 2318 mem# 1: /nbstdata02/oradata/NBSTEST/redo02b.log
2012-05-21 15:38:02.931000 +08:00
Thread 1 advanced to log sequence 2319 (LGWR switch)
Current log# 1 seq# 2319 mem# 0: /nbstdata01/oradata/NBSTEST/redo01a.log
Current log# 1 seq# 2319 mem# 1: /nbstdata02/oradata/NBSTEST/redo01b.log
2012-05-21 15:49:34.382000 +08:00
Thread 1 cannot allocate new log, sequence 2320
Private strand flush not complete
Current log# 1 seq# 2319 mem# 0: /nbstdata01/oradata/NBSTEST/redo01a.log
Current log# 1 seq# 2319 mem# 1: /nbstdata02/oradata/NBSTEST/redo01b.log
2012-05-21 15:49:37.420000 +08:00
Thread 1 advanced to log sequence 2320 (LGWR switch)
Current log# 3 seq# 2320 mem# 0: /nbstdata01/oradata/NBSTEST/redo03a.log
Current log# 3 seq# 2320 mem# 1: /nbstdata02/oradata/NBSTEST/redo03b.log
2012-05-21 16:03:48.579000 +08:00
Thread 1 cannot allocate new log, sequence 2321
Private strand flush not complete
Current log# 3 seq# 2320 mem# 0: /nbstdata01/oradata/NBSTEST/redo03a.log
Current log# 3 seq# 2320 mem# 1: /nbstdata02/oradata/NBSTEST/redo03b.log
2012-05-21 16:03:51.656000 +08:00
Thread 1 advanced to log sequence 2321 (LGWR switch)
Current log# 2 seq# 2321 mem# 0: /nbstdata01/oradata/NBSTEST/redo02a.log
Current log# 2 seq# 2321 mem# 1: /nbstdata02/oradata/NBSTEST/redo02b.log
上面命令show alert顯示的內容是資料庫組件日誌alert資訊。注意,此處我們也可以使用tail –n命令,但是後面的數字表示的是日誌的條目數,而不是記錄行數!