Oracle跟蹤文件、事件

壹、oracle跟蹤文件
    Oracle跟蹤文件分為三種類型。
    1.  壹種是後臺報警日誌文件,記錄數據庫在啟動、關閉和運行期間後臺進程的活動情況,如表空間創建、回滾段創建、某些alter命令、日誌切換、錯誤消息等。
    在數據庫出現故障時,應首先查看該文件,但文件中的信息與任何錯誤狀態沒有必然的聯系。後臺報警日誌文件保存BACKGROUND_DUMP_DEST參數指定的目錄中,文件格式為SIDALRT.LOG。
    2. 另壹種類型是DBWR、LGWR、SMON等後臺進程創建的後臺跟蹤文件。
    後臺跟蹤文件根據後臺進程運行情況產生,後臺跟蹤文件也保存在BACKGROUND_DUMP_DEST參數指定的目錄中,文件格式為siddbwr.trc、sidsmon.trc等。
    3. 還有壹種類型是由連接到Oracle的用戶進程(Server Processes)生成的用戶跟蹤文件。
    這些文件僅在用戶會話期間遇到錯誤時產生。此外,用戶可以通過執行oracle跟蹤事件(見後面)來生成該類文件,用戶跟蹤文件保存在USER_DUMP_DEST參數指定的目錄中,文件格式為oraxxxxx.trc,xxxxx為創建文件的進程號(或線程號)。
    二、Oracle跟蹤事件
    Oracle提供了壹類命令,可以將Oracle各類內部結構中所包含的信息轉儲(dump)到跟蹤文件中,以便用戶能根據文件內容來解決各種故障。
    設置跟蹤事件有兩種方法,壹種是在init.ora文件中設置事件,這樣open數據庫後,將影響到所有的會話。設置格式如下:
    EVENT=”eventnumber trace name eventname [forever,] [level levelnumber] : ……” 通過:符號,可以連續設置多個事件,也可以通過連續使用event來設置多個事件。
    另壹種方法是在會話過程中使用alter session set events命令,只對當前會話有影響。設置格式如下:
    alter session set events ‘[eventnumber|immediate] trace name eventname [forever] [, level levelnumber] : ……’
    通過:符號,可以連續設置多個事件,也可以通過連續使用alter session set events 來設置多個事件。
    格式說明:eventnumber指觸發dump的事件號,事件號可以是Oracle錯誤號(出現相應錯誤時跟蹤指定的事件)或oralce內部事件號,內部事件號在10000到10999之間,不能與immediate關鍵字同用。
    immediate關鍵字表示命令發出後,立即將指定的結構dump到跟蹤文件中,這個關鍵字只用在alter session語句中,並且不能與 eventnumber、forever關鍵字同用。
    trace name 是關鍵字。
    eventname指事件名稱(見後面),即要進行dump的實際結構名。若eventname為context,則指根據內部事件號進行跟蹤。
    forever關鍵字表示事件在實例或會話的周期內保持有效狀態,不能與immediate同用。
    levelnumber表示事件級別號,壹般從1到10,1表示只dump結構頭部信息,10表示dump結構的所有信息。
    跟蹤事件說明:
    1、buffers事件:dump SGA緩沖區中的db buffer結構
    alter session set events ‘immediate trace name buffers level 1’; –表示dump緩沖區的頭部。
    2、blockdump事件:dump數據文件、索引文件、回滾段文件結構
    alter session set events ‘immediate trace name blockdump level 66666’; –表示dump塊地址為6666的數據塊。
    在Oracle 8i以後該命令已改為:
    alter system dump datafile 11 block 9; –表示dump數據文件號為11中的第9個數據塊。
    3、controlf事件:dump控制文件結構
    alter session set events ‘immediate trace name controlf level 10’; –表示dump控制文件的所有內容。
    4、locks事件:dump LCK進程的鎖信息
    alter session set events ‘immediate trace name locks level 5’;
    5、redohdr事件:dump redo日誌的頭部信息
    alter session set events ‘immediate trace name redohdr level 1’; –表示dump redo日誌頭部的控制文件項。
    alter session set events ‘immediate trace name redohdr level 2’; –表示dump redo日誌的通用文件頭。
    alter session set events ‘immediate trace name redohdr level 10’; –表示dump redo日誌的完整文件頭。
    註意:redo日誌的內容dump可以采用下面的語句:
    alter system dump logfile ‘logfilename’;
    6、loghist事件:dump控制文件中的日誌歷史項
    alter session set events ‘immediate trace name loghist level 1’; –表示只dump最早和最遲的日誌歷史項。
    levelnumber大於等於2時,表示2的levelnumber次方個日誌歷史項。
    alter session set events ‘immediate trace name loghist level 4’; –表示dump 16個日誌歷史項。
    7、file_hdrs事件:dump 所有數據文件的頭部信息
    alter session set events ‘immediate trace name file_hdrs level 1’; –表示dump 所有數據文件頭部的控制文件項。
    alter session set events ‘immediate trace name file_hdrs level 2’; –表示dump 所有數據文件的通用文件頭。
    alter session set events ‘immediate trace name file_hdrs level 10’; –表示dump 所有數據文件的完整文件頭。
    8、errorstack事件:dump 錯誤棧信息,通常Oracle發生錯誤時前臺進程將得到壹條錯誤信息,但某些情況下得不到錯誤信息,可以采用這種方式得到Oracle錯誤。
    alter session set events ‘604 trace name errorstack forever’; –表示當出現604錯誤時,dump 錯誤棧和進程棧。
    9、systemstate事件:dump所有系統狀態和進程狀態
    alter session set events ‘immediate trace name systemstate level 10’; –表示dump 所有系統狀態和進程狀態。
    10、coalesec事件:dump指定表空間中的自由區間
    levelnumber以十六進制表示時,兩個高位字節表示自由區間數目,兩個低位字節表示表空間號,如0x00050000表示dump系統表空間中的5個自由區間,轉換成十進制就是327680,即:
    alter session set events ‘immediate trace name coalesec level 327680’;
    11、processsate事件:dump進程狀態
    alter session set events ‘immediate trace name processsate level 10’;
    12、library_cache事件:dump library cache信息
    alter session set events ‘immediate trace name library_cache level 10’;
    13、heapdump事件:dump PGA、SGA、UGA中的信息
    alter session set events ‘immediate trace name heapdump level 1’;
    14、row_cache事件:dump數據字典緩沖區中的信息
    alter session set events ‘immediate trace name row_cache level 1’;