一Oracle跟蹤文件
Oracle跟蹤文件分為三種類型一種是後台報警日志文件記錄數據庫在啟動關閉和運行期間後台進程的活動情況如表空間創建回滾段創建某些alter命令日志切換錯誤消息等
在數據庫出現故障時應首先查看該文件但文件中的信息與任何錯誤狀態沒有必然的聯系後台報警日志文件保存BACKGROUND_DUMP_DEST參數指定的目錄中文件格式為SIDALRTLOG另一種類型是DBWRLGWRSMON等後台進程創建的後台跟蹤文件後台跟蹤文件根據後台進程運行情況產生後台跟蹤文件也保存在BACKGROUND_DUMP_DEST參數指定的目錄中文件格式為siddbwrtrcsidsmontrc等還有一種類型是由連接到Oracle的用戶進程(Server Processes)生成的用戶跟蹤文件這些文件僅在用戶會話期間遇到錯誤時產生此外用戶可以通過執行oracle跟蹤事件(見後面)來生成該類文件用戶跟蹤文件保存在USER_DUMP_DEST參數指定的目錄中文件格式為oraxxxxxtrcxxxxx為創建文件的進程號(或線程號)
二Oracle跟蹤事件
Oracle提供了一類命令可以將Oracle各類內部結構中所包含的信息轉儲(dump)到跟蹤文件中以便用戶能根據文件內容來解決各種故障設置跟蹤事件有兩種方法一種是在initora文件中設置事件這樣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內部事件號內部事件號在到之間不能與immediate關鍵字同用
immediate關鍵字表示命令發出後立即將指定的結構dump到跟蹤文件中這個關鍵字只用在alter session語句中並且不能與 eventnumberforever關鍵字同用
trace name 是關鍵字
eventname指事件名稱(見後面)即要進行dump的實際結構名若eventname為context則指根據內部事件號進行跟蹤
forever關鍵字表示事件在實例或會話的周期內保持有效狀態不能與immediate同用
levelnumber表示事件級別號一般從到表示只dump結構頭部信息表示dump結構的所有信息
buffers事件dump SGA緩沖區中的db buffer結構
alter session set events immediate trace name buffers level ; 表示dump緩沖區的頭部
blockdump事件dump數據文件索引文件回滾段文件結構
alter session set events immediate trace name blockdump level ; 表示dump塊地址為的數據塊
在Oracle 以後該命令已改為
alter system dump datafile block ; 表示dump數據文件號為中的第個數據塊
controlf事件dump控制文件結構
alter session set events immediate trace name controlf level ; 表示dump控制文件的所有內容
locks事件dump LCK進程的鎖信息
alter session set events immediate trace name locks level ;
redohdr事件dump redo日志的頭部信息
alter session set events immediate trace name redohdr level ; 表示dump redo日志頭部的控制文件項
alter session set events immediate trace name redohdr level ; 表示dump redo日志的通用文件頭
alter session set events immediate trace name redohdr level ; 表示dump redo日志的完整文件頭
注意redo日志的內容dump可以采用下面的語句:
alter system dump logfile logfilename;
loghist事件dump控制文件中的日志歷史項
alter session set events immediate trace name loghist level ; 表示只dump最早和最遲的日志歷史項
levelnumber大於等於時表示的levelnumber次方個日志歷史項
alter session set events immediate trace name loghist level ; 表示dump 個日志歷史項
file_hdrs事件dump 所有數據文件的頭部信息
alter session set events immediate trace name file_hdrs level ; 表示dump 所有數據文件頭部的控制文件項
alter session set events immediate trace name file_hdrs level ; 表示dump 所有數據文件的通用文件頭
alter session set events immediate trace name file_hdrs level ; 表示dump 所有數據文件的完整文件頭
errorstack事件dump 錯誤棧信息通常Oracle發生錯誤時前台進程將得到一條錯誤信息但某些情況下得不到錯誤信息可以采用這種方式得到Oracle錯誤
alter session set events trace name errorstack forever; 表示當出現錯誤時dump 錯誤棧和進程棧
systemstate事件dump所有系統狀態和進程狀態
alter session set events immediate trace name systemstate level ; 表示dump 所有系統狀態和進程狀態
coalesec事件dump指定表空間中的自由區間
levelnumber以十六進制表示時兩個高位字節表示自由區間數目兩個低位字節表示表空間號如x表示dump系統表空間中的個自由區間轉換成十進制就是即
alter session set events immediate trace name coalesec level ;
processsate事件dump進程狀態
alter session set events immediate trace name processsate level ;
library_cache事件dump library cache信息
alter session set events immediate trace name library_cache level ;
heapdump事件dump PGASGAUGA中的信息
alter session set events immediate trace name heapdump level ;
row_cache事件dump數據字典緩沖區中的信息
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時設置)的數據塊dump到跟蹤文件
用於內存堆檢查
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 ON
DECLARE
err_msg VARCHAR();
BEGIN
dbms_outputenable ();
FOR err_num IN
LOOP
err_msg := SQLERRM (err_num);
IF err_msg NOT LIKE %Message ||err_num|| not found% THEN
dbms_outputput_line (err_msg);
END IF;
END LOOP;
END;
/
select sidserial#usernameosusermachine from v$session;查詢session的sidserial#
exec dbms_systemset_sql_trace_in_session(true);開始跟蹤
exec dbms_systemset_sql_trace_in_session(true) 停止跟蹤
tkprof *trc *txt
select sidserial#usernameosusermachine from v$session;查詢session的sidserial#
exec dbms_systemset_sql_trace_in_session(true);開始跟蹤
exec dbms_systemset_sql_trace_in_session(true) 停止跟蹤
tkprof *trc *txt
查看文件
get trace file name
select
dvalue||/||lower(rtrim(iinstance chr()))||_ora_||pspid||trc trace_file_name
from
( select pspid
from sysv$mystat msysv$session ssysv$process p
where mstatistic# = and ssid = msid and paddr = spaddr) p
( select tinstance from sysv$thread tsysv$parameter v
where vname = thread and (vvalue = or tthread# = to_number(vvalue))) i
( select value from sysv$parameter where name = user_dump_dest) d
From:http://tw.wingwit.com/Article/program/Oracle/201311/17136.html