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

 

 

轉載自http://www.itpub.net/forum.php?mod=viewthread&tid=1375630

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章