Oracle中DUMP的轉儲方法

shuyingxi發表於2013-04-09

什麼是DUMP:

DUMP是一個動詞,它代表一種操作,說的簡單一點,拿記憶體舉例,就是原封不動的把某一片記憶體給展現出來。拿跟蹤舉例,就是它原始的展示了Oracle處理某個問題的過程。

大家在學習研究ORACLE的過程中,為了更深入的瞭解內部的機制,免不了要經常DUMP來研究學習。

Oracle 11g的Trace檔案存放路徑:oracle\diag\rdbms\**\**\trace

1、DUMP出控制檔案
alter system (session) set events 'immediate trace name controlf level 10'

—————————————————————————————

2、DUMP出日誌檔案分析
alter system dump logfile logfilename;

—————————————————————————————

3、DUMP出日誌檔案頭分析
alter session set events 'immediate trace name REDOHDR level 10'

———————————————————————————

4、DUMP出LIBRARY CACHE
alter system (session) set events 'immediate trace name library_cache level 10'

—————————————————————————————

5、 DUMP出share_pool
alter system (session) set events 'immediate trace name heapdump level 10'

———————————————————————————

6、DUMP出所有資料檔案頭
alter system (session) set events 'immediate trace name file_hdrs level 10';

———————————————————————————

7、DUMP出資料檔案(只能是alter system)

alter system dump datafile n block m

select file_id,block_id,blocks from dba_extents where segment_name='EMPLOYEES'
FILE_ID BLOCK_ID BLOCKS 
---------- ---------- ------------------ 
     5           81           8


SQL>alter system dump datafile 5 block 81;

System altered.
另外是做很具體的針對某行所在的BLOCK 並DUMP出來研究,可以用如下方法

1、取BLOCK號
select dbms_rowid.rowid_block_number(rowid) from wdjk1999;

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
78

2、取檔案號
select file_id from dba_data_files where tablespace_name='WDJK1999'

FILE_ID

----------
16

SQL>alter system dump datafile 16 block 78;

System altered.

—————————————————————————

8、DUMP出索引
SQL> select object_id from dba_objects where object_name=upper('index_name');
  
OBJECT_ID
----------
70591
SQL> alter session set events 'immediate trace name TREEDUMP level 70591';

—————————————————————————————

9、DUMP出回滾段資訊
select xidusn,xidslot,xidsqn,ubafil,ubablk,ubasqn,ubarec from v$transaction;

XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK UBASQN UBAREC
----------- ------------ ------------ ---------- ------------ ------------ -------------
     1          31            442          2           21           242          52
dump對應的undo block
system dump datafile 2 block 21;
System altered.


——————————————————————————

10、 DUMP出系統狀態分析 (只能是SYSTEM)
alter system set events 'immediate trace name systemdate level 10'

——————————————————————————

11、 DUMP出程式狀態分析 
alter session set events 'immediate trace name PROCESSSTATE level 10'

附:

event的定義:event = event_name + action。

首先,這裡的event name是一個event的名字或者是event的程式碼。如果event name不是“immediate”,那麼oracle解析器會在event name table中找到這個event。關於immediate event,它是一個特殊的event,它顯示一個立即的無條件的event,它不會等待其他人去提交它而是立即執行。

action是由一個action keyword和一個或者多個qualifier(值)組成。

action keyword是如下三個值:

crash:它會引起一個oracle crash,一般是為了測試recovery的時候才用它。

debugger:呼叫一個系統的debugger。(invokes a system debugger if any)

trace:is context specific or named context-independent ones。

crash和debugger這兩個值一般是oracle的核心開發人員使用。我們這裡只討論trace的情況。

這裡有必要解釋一下,它就是你需要dump的“某個物件”的“trace id”,或者就是你想要做的“某種trace”。如你想dump記憶體中的library cache,就是想看看記憶體中library cache的trace,那麼這裡的就是“library_cache”。

trace qualifiers的含義分別是:

“forever”:表示這個trace一旦設定,每當這個event發生的時候,就啟用這個trace。

“off”:表示對這個event關閉這個trace。

“level ”:當event發生的時候,你想要trace的級別,每個trace的級別的取值是都是不一樣的,它一個非負整數。通常情況下,它的值越大,就會有更多的內容顯示,但是如果你是做某個塊的dump,這裡的level就是data block address(dba)。

綜上所述,event可大概的如下表示為:

event_name CRASH    ....

event_name DEBUGGER ....

event_name TRACE    NAME trace_name|CONTEXT [ FOREVER|OFF|LEVEL ]

這個裡面“|”表示“或者”,“[]”表示出現一次或者多次。


轉載自:http://space.itpub.net/?uid-28673746-action-viewspace-itemid-757995

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

相關文章