Oracle 常用 Dump 命令收集(轉帖)

tingsheng發表於2010-12-07
Oracle 常用 Dump 命令收集

Oracle常用dump命令  

一 . Memory Dumps

1).Global Area
    ALTER SESSION SET EVENTS 'immediate trace name global_area level n';
    1 包含PGA                2 包含SGA                4 包含UGA                8 包含indrect memory

2).Library Cache
   ALTER SESSION SET EVENTS 'immediate trace name library_cache level n';
   1 library cache統計資訊                2 包含hash table histogram
   3 包含object handle                        4 包含object結構(Heap 0)

3).Row Cache
   ALTER SESSION SET EVENTS 'immediate trace name row_cache level n';
   1 row cache統計資訊                2 包含hash table histogram                8 包含object結構

4).Buffers
   ALTER SESSION SET EVENTS 'immediate trace name buffers level n';
   1 buffer header                                        2 level 1 + block header
   3 level 2 + block contents                4 level 1 + hash chain
   5 level 2 + hash chain                        6 level 3 + hash chain
   8 level 4 + users/waiters                        9 level 5 + users/waiters
   10 level 6 + users/waiters

5).Buffer
   ALTER SESSION SET EVENTS 'immediate trace name buffer level n';
   n為某個指定block的rdba,該命令可以轉儲某個block在buffer中的所有版本。

6).Heap
   ALTER SESSION SET EVENTS 'immediate trace name heapdump level level';
  1 PGA摘要                                                2 SGA摘要                                                4 UGA摘要
  8 Current call(CGA)摘要                16 User call(CGA)摘要                32 Large call(LGA)摘要
  1025 PGA內容                                        2050 SGA內容                                4100 UGA內容
  8200 Current call內容                16400 User call內容                        32800 Large call內容

7).Sub Heap
   Oracle 9.0.1版本之前
   ALTER SESSION SET EVENTS 'immediate trace name heapdump_addr level n';
   若n為subheap的地址,轉儲的是subheap的摘要資訊
   若n為subheap的地址+1,轉儲的則是subheap的內容
   Oracle 9.2.0版本之後
   ALTER SESSION SET EVENTS 'immediate trace name heapdump_addr level n, addr m';
   其中m為subheap的地址,n為1轉儲subheap的摘要,n為2轉儲subheap的內容

8).Process State
   ALTER SESSION SET EVENTS 'immediate trace name processstate level n';

9).System State
   ALTER SESSION SET EVENTS 'immediate trace name systemstate level n';

10).Error State
   ALTER SESSION SET EVENTS 'immediate trace name errorstack level n';
   0 Error stack                                        1 level 0 + function call stack
   2 level 1 + process state                3 level 2 + context area

11).Hang Analysis
    ALTER SESSION SET EVENTS 'immediate trace name hanganalyze level n';

12).Work Area
    ALTER SESSION SET EVENTS 'immediate trace name workareatab_dump level n';
   1 SGA資訊                2 Workarea Table摘要資訊                3 Workarea Table詳細資訊

13).Latches
     ALTER SESSION SET EVENTS 'immediate trace name latches level n';
     1 latch資訊                2 統計資訊

14).Events
      ALTER SESSION SET EVENTS 'immediate trace name events level n';
      1 session                2 process                3 system

15).Locks
      ALTER SESSION SET EVENTS 'immediate trace name locks level n';

16).Shared Server Process
     ALTER SESSION SET EVENTS 'immediate trace name shared_server_state level n';
     n取值為1~14

17).Background Messages
      ALTER SESSION SET EVENTS 'immediate trace name bg_messages level (pid+1)';



二 . File Dumps

1).Block
     ALTER SYSTEM DUMP DATAFILE file# BLOCK block#;
     ALTER SYSTEM DUMP DATAFILE file# BLOCK MIN min # BLOCK MAX max #;

2).Tree Dump
     ALTER SESSION SET EVENTS 'immediate trace name treedump level object_id';

3).Undo Segment Header
     ALTER SYSTEM DUMP UNDO_HEADER 'segment_name';

4).Undo for a Transaction
     ALTER SYSTEM DUMP UNDO BLOCK 'segment_name' XID xidusn xidslot xidsqn;

5).File Header
     ALTER SESSION SET EVENTS 'immediate trace name file_hdrs level n';
     1 控制檔案中的檔案頭資訊                2 level 1 + 檔案頭資訊
     3 level 2 + 資料檔案頭資訊                10 level 3

6).Control file
     ALTER SESSION SET EVENTS 'immediate trace name controlf level n';
     1 檔案頭資訊                                        2 level 1 + 資料庫資訊 + 檢查點資訊
     3 level 2 + 可重用節資訊        10 level 3

7).Redo log Header
     ALTER SESSION SET EVENTS 'immediate trace name redohdr level n';
     1 控制檔案中的redo log資訊                2 level 1 + 檔案頭資訊
     3 level 2 + 日誌檔案頭資訊                        10 level 3

8).Redo log
     ALTER SYSTEM DUMP LOGFILE 'FileName';
     ALTER SYSTEM DUMP LOGFILE 'FileName'
     SCN MIN MinSCN SCN MAX MaxSCN TIME MIN MinTime TIME MAX MaxTime
     LAYER Layer OPCODE Opcode
     DBA MIN File#.Block# DBA MAX File#.Block#
     RBA MIN LogFileSequence#.Block# RBA MAX LogFileSequence#.Block#;
     其中time = ((((yyyy - 1988) * 12 + mm - 1) * 31 + dd - 1) * 24 + hh) * 60 + mi) * 60 + ss;

9).Loghist
     ALTER SESSION SET EVENTS 'immediate trace name loghist level n';
     1 dump控制檔案中最早和最遲的日誌歷史項                >1 dump 2^n個日誌歷史項


Oracle跟蹤檔案


Oracle跟蹤檔案分為三種型別,一種是後臺報警日誌檔案,記錄資料庫在啟動、關閉和執行期間後
臺程式的活動情況,如表空間建立、回滾段建立、某些alter命令、日誌切換、錯誤訊息等。在資料庫出現故障時,應首先檢視該檔案,但檔案中的資訊與任何錯誤狀態沒有必然的聯絡。後臺報警日誌
檔案儲存BACKGROUND_DUMP_DEST引數指定的目錄中,檔案格式為SIDALRT.LOG。另一種型別是DBWR、LGWR、SMON等後臺程式建立的後臺跟蹤檔案。後臺跟蹤檔案根據後臺程式執行情況產生,後臺跟蹤檔案也儲存在BACKGROUND_DUMP_DEST引數指定的目錄中,檔案格式為siddbwr.trc、sidsmon.trc等。還有一種型別是由連線到Oracle的使用者程式(Server Processes)生成的使用者跟蹤檔案。這些檔案僅在使用者會話期間遇到錯誤時產生。此外,使用者可以通過執行oracle跟蹤事件(見後面)來生成該類檔案,使用者跟蹤檔案儲存在USER_DUMP_DEST引數指定的目錄中,檔案格式為oraxxxxx.trc,xxxxx為建立檔案的程式號(或執行緒號)。

二、Oracle跟蹤事件
Oracle提供了一類命令,可以將Oracle各類內部結構中所包含的資訊轉儲(dump)到跟蹤檔案中,以便使用者能根據檔案內容來解決各種故障。設定跟蹤事件有兩種方法,一種是在init.ora檔案中設定事件,這樣open資料庫後,將影響到所有的會話。設定格式如下:
EVENT="eventnumber trace name eventname [forever,] [level lv#] : ......."
通過:符號,可以連續設定多個事件,也可以通過連續使用event來設定多個事件。
另一種方法是在會話過程中使用alter session set events命令,只對當前會話有影響。設定格式如下:
alter session set events '[event# |immediate] trace name eventname [forever] [, level levelnumber] : .......'
通過:符號,可以連續設定多個事件,也可以通過連續使用alter session set events 來設定多個事件。
格式說明:
event#        指觸發dump的事件號,事件號可以是Oracle錯誤號(出現相應錯誤時跟蹤指定的事件)或oralce內部事件號,內部事件號在10000到10999之間,不能與immediate關鍵字同用。
immediate        關鍵字表示命令發出後,立即將指定的結構dump到跟蹤檔案中,這個關鍵字只用在altersession語句中,並且不能與 eventnumber、forever關鍵字同用。
trace name         是關鍵字。
eventname                指事件名稱(見後面),即要進行dump的實際結構名。若eventname為context,則指根據內部事件號進行跟蹤。
forever                關鍵字表示事件在例項或會話的週期內保持有效狀態,不能與immediate同用。
level                        為事件級別關鍵字。但在dump錯誤棧(errorstack)時不存在級別。
levelnumber                表示事件級別號,一般從1到10,1表示只dump結構頭部資訊,10表示dump結構的所有資訊。

2、blockdump事件:dump資料檔案、索引檔案、回滾段檔案結構
      alter session set events 'immediate trace name blockdump level 66666'; --表示dump塊地址為6666的資料塊。
     在Oracle 8以後該命令已改為:
     alter system dump datafile 11 block 9; --表示dump資料檔案號為11中的第9個資料塊。

3、controlf事件:dump控制檔案結構
     alter session set events 'immediate trace name controlf level 10'; --表示dump控制檔案的所有內容。

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';

三 、 內部事件號

1、10013:用於監視事務恢復                                2、10015:轉儲UNDO SEGMENT頭部
3、10029:用於給出會話期間的登陸資訊        4、10030:用於給出會話期間的登出資訊
5、10032:轉儲排序的統計資訊                                6、10033:轉儲排序增長的統計資訊
7、10045:跟蹤Freelist管理操作                        8、10046:跟蹤SQL語句
9、10053:轉儲優化策略                                        10、10059:模擬redo日誌中的建立和清除錯誤
11、10061:阻止SMON在啟動時清除臨時段                12、10079:轉儲 SQL*NET統計資訊
13、10081:轉儲高水標記變化                                14、10104:轉儲Hash連線統計資訊
15、10128:轉儲分割槽休整資訊                                16、10200:轉儲一致性讀資訊
17、10201:轉儲一致性讀中Undo應用        18、10209:允許在控制檔案中模擬錯誤
19、10210:觸發資料塊檢查事件                        20、10211:觸發索引檢查事件
21、10213:模擬在寫控制檔案後崩潰               
22、10214:模擬在控制檔案中的寫錯誤,lv#1-9表示產生錯誤的塊號,否則則每個控制檔案將出錯
23、10215:模擬在控制檔案中的讀錯誤                24、10220:轉儲Undo頭部變化
25、10221;轉儲Undo變化                                26、10224:轉儲索引的分隔與刪除
27、10225:轉儲基於字典管理的區間的變化                28、10229:模擬在資料檔案上的I/O錯誤
29、10231:設定在全表掃描時忽略損壞的資料塊       
alter session set events '10231 trace name context off';
event = "10231 trace name context forever, level 10";
30、10232:將設定為軟損壞(DBMS_REPAIR包設定或DB_BLOCK_CHECKING為TRUE時設定)
資料塊dump到跟蹤檔案
31、10235:用於記憶體堆檢查
alter session set events '10235 trace name context forever, level 1';
32、10241:轉儲遠端SQL執行                        33、10246:跟蹤PMON程式
34、10248:跟蹤dispatch程式                        35、10249:跟蹤MTS程式
36、10252:模擬寫資料檔案頭部錯誤                37、10253:模擬寫redo日誌檔案錯誤
38、10262:允許連線時存在記憶體洩漏
alter session set events '10262 trace name context forever, level 300';
39、10270:轉儲共享遊標                                        40、10285:模擬控制檔案頭部損壞
41、10286:模擬控制檔案開啟錯誤                        42、10287:模擬歸檔出錯
43、10357:除錯直接路徑機制                                44、10500:跟蹤SMON程式
45、10608:跟蹤點陣圖索引的建立                        46、10704:跟蹤enqueues
47、10706:跟蹤全域性enqueues                        48、10708:跟蹤RAC的buffer cache
49、10710:跟蹤對點陣圖索引的訪問                        50、10711:跟蹤點陣圖索引合併操作
51、10712:跟蹤點陣圖索引OR操作                        52、10713:跟蹤點陣圖索引AND操作
53、10714:跟蹤點陣圖索引MINUS操作        54、10715:跟蹤點陣圖索引向ROWID的轉化
55、10716:跟蹤點陣圖索引的壓縮與解壓                56、10719:跟蹤點陣圖索引的修改
57、10731:跟蹤遊標宣告                                        58、10928:跟蹤PL/SQL執行
59、10938:轉儲PL/SQL執行統計資訊

最後要說明的是,由於版本不同以上語法可能有些變化,但大多數還是可用的。
附完整的跟蹤事件列表,event No.10000 to 10999
SET SERVEROUTPUT ON
DECLARE
err_msg VARCHAR2(120);
BEGIN
dbms_output.enable (1000000);
FOR err_num IN 10000..10999
LOOP
err_msg := SQLERRM (-err_num);
IF err_msg NOT LIKE '%Message '||err_num||' not found%' THEN
dbms_output.put_line (err_msg);
END IF;
END LOOP;
END;
/

2、  Event分類

診斷事件大體上可以分為四類:
a.  轉儲類事件:它們主要用於轉儲Oracle的一些結構,例如轉儲一下控制檔案、資料檔案頭等內容。
b.  捕捉類事件:它們用於捕捉一些Error事件的發生,例如捕捉一下ORA-04031發生時一些Rdbms資訊,以判斷是Bug還是其它原因引起的這方面的問題。
c.  改變執行途徑類事件:它們用於改主一些Oracle內部程式碼的執行途徑,例如設定10269將會使Smon程式不去合併那些Free的空間。
d.  跟蹤類事件:這們用於獲取一些跟蹤資訊以用於Sql調優等方面,最典型的便是10046了,將會對Sql進行跟蹤。
4、 其它說明:
a. 如果immediate放在第一個說明是無條件事件,即命令發出即轉儲到跟蹤檔案。
b. trace name位於第二、三項,除它們外的其它限定詞是供Oracle內部開發組用的。
c. level通常位於1-10之間(10046有時用到12),10意味著轉儲事件所有的資訊。例如當轉儲控制檔案時,level1表示轉儲控制檔案頭,而level 10表明轉儲控制檔案全部內容。
d. 轉儲所生成的trace檔案在user_dump_dest初始化引數指定的位置。
3、 使用DBMS_SYSTEM.SET_EV的方法
a. 過和定義如下
DBMS_SYSTEM.SET_EV(        SI Binary_integer,SE Binary_integer,
EV Binary_integer,LE Binary_integer,
NM Binary_integer);
SI        :        即v$session中的sid                        SE        :        即v$session中的serial#
EV        :        要設定的事件                LE        :        要設定事件的級別                NM        :        名稱
SQL> EXECUTE SYS.DBMS_SYSTEM.SET_EV(sid,serial#,10046,12,'');
注意不要用oradug去跟蹤oracle的smon,pmon等幾個程式,操作不當可能會殺掉這幾個後臺進引起宕庫。

1、 我如何知道在系統中設定了哪些event?
a. 如果你的事件是在init.ora中設定的可以用show parameter event;來檢視
b. Michael R.Ault給的SQL
serveroutput on size 1000000
declare
event_level number;
begin
for i in 10000..10999 loop
sys.dbms_system.read_ev(i,event_level);
if (event_level > 0) then
dbms_output.put_line('Event '||to_char(i)||' set at level '||
to_char(event_level));
end if;
end loop;
end;
/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7734298/viewspace-681101/,如需轉載,請註明出處,否則將追究法律責任。

相關文章