天天看點

Oracle的跟蹤檔案(trace file)

跟蹤檔案通常都是因為通過DBMS_MONITOR(在Oracle Database 9i Relese 2)及更早版本中則是ALTER SESSION SET SQL_TRACE=TRUE啟用了跟蹤的結果,或者是通過10046事件使用擴充的跟蹤工具生成的,如下

<a href="https://s1.51cto.com/wyfs02/M02/96/2E/wKioL1kdoCXRHFuBAAAMgwxEAvE932.png" target="_blank"></a>

這些跟蹤檔案包含與診斷和性能有關的資訊。它們對于了解資料庫應用的内部工作有着非凡的意義。在一個正常運作的資料庫中,你會經常看到這些跟蹤檔案,而且遠比看到其他類型的跟蹤檔案多得多。

1 檔案位置

不論是使用DBMS_MONITOR、SQL_TRACE還是擴充的跟蹤工具,Oracle都會在資料庫伺服器主機的以下兩個位置生成一個跟蹤檔案。

如果使用專用伺服器連接配接,會在user_dump_dest參數指定的目錄中生成跟蹤檔案。

如果使用共享伺服器連接配接,則會在background_dump_dest參數指定的目錄中生成跟蹤檔案。

注意:11g版本中background_dump_dest和user_dump_dest參數将要被廢棄掉,雖然還可以使用這兩個參數進行查詢但可以使用使用新的參數或視圖進行查詢。

使用show parameter dump_dest指令來檢視目錄,也可以直接查詢V$PARAMETER視圖,或查詢新的V$DIAG_INFO 視圖。

<a href="https://s2.51cto.com/wyfs02/M02/96/2E/wKiom1kdoDPzRDwUAAAkLQFFwO8264.png" target="_blank"></a>

V$DIAG_INFO是Oracle Database 11g新增的視圖,這在較早的版本中還沒有。它是通路新增ADR工具所用跟蹤資訊的一個更容易的接口。

Oracle Database 11g調整了很多檔案的預設存儲位置,使它們組織得更好一些,進而能更容易地記錄對Oracle的服務請求。其中最重要的行包括下面兩項:

Diag Trace:這是Oracle Database     11g中跟蹤檔案(包括背景和使用者轉儲目标)所在的位置。

Default Trace File:這是目前會話的跟蹤檔案名。在較早的版本中,這個檔案名可能很難得到。在Oracle Database     11g中,隻需要對V$DIAG_INFO簡單的查詢就可以傳回這個檔案的完全限定檔案名。

2命名約定

Oracle中跟蹤檔案的命名約定總在變化,示例如下:

跟蹤檔案名

資料庫版本

ora_10583.trc

9i Release 1

ora9ir2_ora_1905.trc

9i Release 2

ora10gr2_ora_6793.trc

10g Release 2

ora11gr2_ora_1990.trc

11g Release 2

跟蹤檔案名可以分為以下幾個部分。

檔案名的第一部分是ORACLE_SID(但9i Release 1例外)

檔案名的下一部分隻有一個ora。

跟蹤檔案名中的數字是專用伺服器的程序ID,可以從V$PROCESS視圖得到。

Oracle Database 11g能友善使用V$DIAG_INFO視圖,在該版本之前,實際(假設使用專用伺服器模式)需要通路4個視圖。

V$PARAMETER:找到USER_DUMP_DEST指定的跟蹤檔案位置,找到可能在跟蹤檔案名中用到的可選的tracefile_identifier。

V$PROCESS:查找程序ID。

V$SESSION:正确地辨別其他視圖中的會話資訊。

V$INSTALCE:得到ORACLE_SID。

使用下面的查詢可以生成跟蹤檔案名:

SELECT C.VALUE || '/' || D.INSTANCE_NAME || '_ora_' || A.SPID || CASE

         WHEN E.VALUE IS NOT NULL THEN

          '_' || E.VALUE

       END || '.trc' TRACE

  FROM V$PROCESS A, V$SESSION B, V$PARAMETER C, V$INSTANCE D, V$PARAMETER E

 WHERE A.ADDR = B.PADDR

   AND B.SID = USERENV('sid')

   AND C.NAME = 'user_dump_dest'

   AND E.NAME = 'tracefile_identifier';

如果檔案存在就可以通過名字通路它。隻有在啟用跟蹤後才能出現跟蹤檔案。在Windows平台上要把/換成\。

3 對跟蹤檔案加标記

有一種辦法可以對跟蹤檔案“加标記”,這樣即便無權通路V$PROCESS和V$SESSION,也能找到跟蹤檔案。假設你能讀取user_dump_dest目錄,就可以使用會話參數tracefile_identifier。采用這種方法可以為跟蹤檔案名增加一個可以唯一辨別的串:

可以看到,跟蹤檔案還是采用标準的&lt;ORACLE_SID&gt;_ora_&lt;PROCESS_ID&gt;格式命名,但是這裡還有為它指定的唯一的串,這樣就能很容易找到跟蹤檔案名。

參考《Oracle 9i 10g 11g程式設計藝術  深入資料庫體系結構 》

      本文轉自hbxztc 51CTO部落格,原文連結:http://blog.51cto.com/hbxztc/1927326,如需轉載請自行聯系原作者