天天看點

DUMP操作介紹

寫在前面:其實dump操作是很簡單的事情,但是對于像我這樣的新手可能還是會有很多搞不明白的事情,是以打算簡單說明一下:首先大家所說的把*** dump出來的意思,就是使用者自己對程序中的一些事件進行trace,然後會在udump檔案目錄下産生trace記錄,可以檢視到當時記憶體的情況。

      普通的immediate類型的事件trace是不用去關閉的,因為隻執行了一次。而對于事件代碼指定的trace如果不關閉,會一直trace下去,直到session結束。如果忘記關閉可能會導緻dump檔案很大。       另外還需要注意一點,一般的事件trace是不用多于的操作的,dump出來後直接檢視.trc檔案就可以了,但是對于SQL的trace(包括SQL_TRACE和10046事件),在trace之後可以用tkprof工具來進行格式化,否則是很難看懂的。       最後需要注意的是:關鍵不是如何dump資訊,而是如何看懂dump出來的資訊。下面的文章為網上轉載,由于出處太多,實在找不到源頭,索性就不寫了。     一、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 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内部事件号,内部事件号在10000到10999之間,不能與immediate關鍵字同用。     immediate關鍵字表示指令發出後,立即将指定的結構dump到跟蹤檔案中,這個關鍵字隻用在alter session語句中,并且不能與 eventnumber、forever關鍵字同用。     trace name是關鍵字。     eventname指事件名稱(見後面),即要進行dump的實際結構名。若eventname為context,則指根據内部事件号進行跟蹤。     forever關鍵字表示事件在執行個體或會話的周期内保持有效狀态,不能與immediate同用。     levelnumber表示事件級别号,一般從1到10,1表示隻dump結構頭部資訊,10表示dump結構的所有資訊。       1、buffers事件:dump SGA緩沖區中的db buffer結構   alter session set events 'immediate trace name buffers level 1'; --表示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控制檔案的所有内容。     4、locks事件:dump LCK程序的鎖資訊   alter session set events 'immediate trace name locks level 5';     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頭部         event = "10015 trace name context forever"   3、10029:用于給出會話期間的登陸資訊   4、10030:用于給出會話期間的登出資訊   5、10032:轉儲排序的統計資訊   6、10033:轉儲排序增長的統計資訊   7、10045:跟蹤Freelist管理操作   8、10046:跟蹤SQL語句      alter session set events '10046 trace name context forever, level 4'; --跟蹤SQL語句并顯示綁定變量      alter session set events '10046 trace name context forever, level 8'; --跟蹤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:觸發資料塊檢查事件      event = "10210 trace name context forever, level 10"   20、10211:觸發索引檢查事件   21、10213:模拟在寫控制檔案後崩潰   22、10214:模拟在控制檔案中的寫錯誤      levelnumber從1-9表示産生錯誤的塊号,大于等于10則每個控制檔案将出錯   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" -- 對任何程序讀入SGA的資料塊進行檢查   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'; -- 允許存在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;

/

1.select sid,serial#,username,osuser,machine from v$session; --查詢session的sid,serial# 2.exec dbms_system.set_sql_trace_in_session(141,6,true); --開始跟蹤 3.exec dbms_system.set_sql_trace_in_session(141,6,true); --停止跟蹤 4.tkprof *.trc *.txt 5.檢視檔案 6.get trace file name:

select d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name

from

( select p.spid

from sys.v$mystat m,sys.v$session s,sys.v$process p

where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,

( select t.instance from sys.v$thread  t,sys.v$parameter  v

where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,

( select value from sys.v$parameter where name = 'user_dump_dest') d

          再轉一篇eygle的dump類型說明文章:   ---------------------------------------------- Oracle常用dump指令介紹   連結: http://www.eygle.com/digest/2008/04/oracledump.html   一.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 n';   n為pid+1       二.File Dumps   1).Block   Oracle 7之前   ALTER SESSION SET EVENTS 'immediate trace name blockdump level n';   n為block的rdba   Oracle8以後   ALTER SYSTEM DUMP DATAFILE file# BLOCK block#;   ALTER SYSTEM DUMP DATAFILE file#

BLOCK MIN minimum_block#

BLOCK MAX maximum_block#;   2).Tree Dump   ALTER SESSION SET EVENTS 'immediate trace name treedump level n';   n為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 MinimumSCN

SCN MAX MaximumSCN

TIME MIN MinimumTime

TIME MAX MaximumTime

LAYER Layer

OPCODE Opcode

DBA MIN FileNumber . BlockNumber

DBA MAX FileNumber . BlockNumber

RBA MIN LogFileSequenceNumber . BlockNumber

RBA MAX LogFileSequenceNumber . BlockNumber;   其中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個日志曆史項   ----------------------------------------------