㈠ Oracle資料庫event事件與mp文件介紹
一 Oracle跟蹤文件
Oracle跟蹤文件分為三種類型 一種是後台報警日誌文件 記錄資料庫在啟動 關閉和運行期間後台進程的活動情況 如表空間創建 回滾段創建 某些alter命令 日誌切換 錯誤消息等
在資料庫出現故障時 應首先查看該文件 但文件中的信息與任何錯誤狀態沒有必然的聯系 後台報警日誌文件保存BACKGROUND_DUMP_DEST參數指定的目錄中 文件格式為SIDALRT LOG 另一種類型是DBWR LGWR SMON等後台進程創建的後台跟蹤文件 後台跟蹤文件根據後台進程運行情況產生 後台跟蹤文件也保存在BACKGROUND_DUMP_DEST參數指定的目錄中 文件格式為siddbwr trc sid *** on trc等 還有一種類型是由連接到Oracle的用戶進程(Server Processes)生成的用戶跟蹤文件 這些文件僅在用戶會話期間遇到錯誤時產生 此外 用戶可以通過執行oracle跟蹤事件(見後面)來生成該類文件 用戶跟蹤文件保存在USER_DUMP_DEST參數指定的目錄中 文件格式為oraxxxxx trc xxxxx為創建文件的進程號(或線程號)
二 Oracle跟蹤事件
Oracle提供了一類命令 可以將Oracle各類讓告內部結構中所包含的信息轉儲(mp)到跟蹤文件中 以便用戶能根據文件內容來解決各種故障 設置跟蹤事件有兩種方法 一種是在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指觸發mp的事件號 事件號可以是Oracle錯誤號(出現相應錯誤時跟蹤指定的事件)或oralce內部事件號 內部事件號在 到 之間 不能與immediate關鍵字同用
immediate關鍵字表示命令發出後 立即將指定的結構mp到跟蹤文件中 這個關鍵字只用在alter session語句中 並且不能與 eventnumber forever關鍵字同用
trace name 是關鍵字
eventname指事件名稱(見後面) 即要進行mp的實際銷滑穗結構名 若eventname為context 則指根據內部事件號進行跟蹤
forever關鍵字表示事件在實例或會話的周期內保持有效狀態 不能與immediate同用
levelnumber表示事件級別號 一般從 到 表示只mp結構頭部信息 表示mp結構的所有信息
buffers事件 mp SGA緩沖區中的db buffer結構
alter session set events immediate trace name buffers level ; 表示mp緩沖區的頭部
blockmp事件 mp數據文件 索引文件 回滾段文件結構
alter session set events immediate trace name blockmp level ; 表示mp塊地址為 的數據塊
在Oracle 以後該命令已改為
alter system mp datafile block ; 表示mp數據文件號為 中的第 個數據塊
controlf事件 mp控制文件結構
alter session set events immediate trace name controlf level ; 表示mp控制文件的所有內容
locks事件 mp LCK進程的鎖信息
alter session set events immediate trace name locks level ;
redohdr事件 mp redo日誌的頭部信息
alter session set events immediate trace name redohdr level ; 表示mp redo日誌頭部的控制文件項
alter session set events immediate trace name redohdr level ; 表示mp redo日誌的通用文件頭
alter session set events immediate trace name redohdr level ; 表示mp redo日誌的完整文件頭
注意 redo日誌的內容mp可以採用下面的語句:
alter system mp logfile logfilename ;
loghist事件 mp控制文件中的日誌歷史項
alter session set events immediate trace name loghist level ; 表示只mp最早和最遲的日誌歷史項
levelnumber大於等於 時 表示 的levelnumber次方個日誌歷史項
alter session set events immediate trace name loghist level ; 表示mp 個日誌歷史項
file_hdrs事件 mp 所有數據文件的頭部信息
alter session set events immediate trace name file_hdrs level ; 表示mp 所有數據文件頭部的控制文件項
alter session set events immediate trace name file_hdrs level ; 表示mp 所有數據文件的通用文件頭
alter session set events immediate trace name file_hdrs level ; 表示mp 所有數據文件的完整文件頭
errorstack事件 mp 錯誤棧信息 通常Oracle發生錯誤時前台進程將得到一條錯誤信息 但某些情況下得不到錯誤信息 可以採用這種方式得到Oracle錯誤
alter session set events trace name errorstack forever ; 表示當出現 錯誤時 mp 錯誤棧和進程棧
systemstate事件 mp所有系統狀態和進程狀態
alter session set events immediate trace name systemstate level ; 表示mp 所有系統狀態和進程狀態
coalesec事件 mp指定表空間中的自由區間
levelnumber以十六進製表示時 兩個高位位元組表示自由區間數目 兩個低位位元組表示表空間號 如 x 表示mp系統表空間中的 個自由區間 轉換成十進制就是 即
alter session set events immediate trace name coalesec level ;
processsate事件 mp進程狀態
alter session set events immediate trace name processsate level ;
library_cache事件 mp library cache信息
alter session set events immediate trace name library_cache level ;
heapmp事件 mp PGA SGA UGA中的信息
alter session set events immediate trace name heapmp level ;
row_cache事件 mp數據字典緩沖區中的信息
alter session set events immediate trace name row_cache level ;
三 內部事件號
用於監視事務恢復
轉儲UNDO SEGMENT頭部
event = trace name context forever
用於給出會話期間的登陸信息
用於給出會話期間的注銷信息
轉儲排序的統計信息
轉儲排序增長的統計信息
跟蹤Freelist管理操作
跟蹤SQL語句
alter session set events trace name context forever level ; 跟蹤SQL語句並顯示綁定變數
alter session set events trace name context forever level ; 跟蹤SQL語句並顯示等待事件
轉儲優化策略
模擬redo日誌中的創建和清除錯誤
阻止SMON進程在啟動時清除臨時段
轉儲 SQL*NET統計信息
轉儲高水標記變化
轉儲Hash連接統計信息
轉儲分區休整信息
轉儲一致性讀信息
轉儲一致性讀中Undo應用
允許在控制文件中模擬錯誤
觸發數據塊檢查事件
event = trace name context forever level
觸發索引檢查事件
模擬在寫控制文件後崩潰
模擬在控制文件中的寫錯誤
levelnumber從 表示產生錯誤的塊號 大於等於 則每個控制文件將出錯
模擬在控制文件中的讀錯誤
轉儲Undo頭部變化
;轉儲Undo變化
轉儲索引的分隔與刪除
轉儲基於字典管理的區間的變化
模擬在數據文件上的I/O錯誤
設置在全表掃描時忽略損壞的數據塊
alter session set events trace name context off ; 關閉會話期間的數據塊檢查
event = trace name context forever level 對任何進程讀入SGA的數據塊進行檢查
將設置為軟損壞(DBMS_REPAIR包設置或DB_BLOCK_CHECKING為TRUE時設置)的數據塊mp到跟蹤文件
用於內存堆檢查
alter session set events trace name context forever level ;
轉儲遠程SQL執行
跟蹤PMON進程
跟蹤dispatch進程
跟蹤MTS進程
模擬寫數據文件頭部錯誤
模擬寫redo日誌文件錯誤
允許連接時存在內存泄漏
alter session set events trace name context forever level ; 允許存在 個位元組的內存泄漏
轉儲共享游標
模擬控制文件頭部損壞
模擬控制文件打開錯誤
模擬歸檔出錯
調試直接路徑機制
跟蹤SMON進程
跟蹤點陣圖索引的創建
跟蹤enqueues
跟蹤全局enqueues
跟蹤RAC的buffer cache
跟蹤對點陣圖索引的訪問
跟蹤點陣圖索引合並操作
跟蹤點陣圖索引OR操作
跟蹤點陣圖索引AND操作
跟蹤點陣圖索引MINUS操作
跟蹤點陣圖索引向ROWID的轉化
跟蹤點陣圖索引的壓縮與解壓
跟蹤點陣圖索引的修改
跟蹤游標聲明
跟蹤PL/SQL執行
轉儲PL/SQL執行統計信息
最後要說明的是 由於版本不同以上語法可能有些變化 但大多數還是可用的
附完整的跟蹤事件列表 event No to
SET SERVEROUTPUT ONDECLAREerr_msg VARCHAR ( );BEGINdbms_output enable ( );FOR err_num IN LOOPerr_msg := SQLERRM ( err_num);IF err_msg NOT LIKE %Message ||err_num|| not found% THENdbms_output put_line (err_msg);END IF;END LOOP;END;/
select sid serial# username osuser machine from v$session;查詢session的sid serial#
exec dbms_system set_sql_trace_in_session( true);開始跟蹤
exec dbms_system set_sql_trace_in_session( true) 停止跟蹤
tkprof * trc * txt
select sid serial# username osuser machine from v$session;查詢session的sid serial#
exec dbms_system set_sql_trace_in_session( true);開始跟蹤
exec dbms_system set_sql_trace_in_session( true) 停止跟蹤
tkprof * trc * txt
查看文件
get trace file nameselectd value|| / ||lower(rtrim(i instance chr( )))|| _ora_ ||p spid|| trc trace_file_namefrom( select p spidfrom sys v$mystat m sys v$session s sys v$process pwhere m statistic# = and s sid = m sid and p addr = s paddr) p ( select t instance from sys v$thread t sys v$parameter vwhere v name = thread and (v value = or t thread# = to_number(v value))) i ( select value from sys v$parameter where name = user_mp_dest ) d
lishixin/Article/program/Oracle/201311/17136