熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫event事件與dump文件介紹

2013-11-13 15:41:06  來源: Oracle 

  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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.