dump 轉儲檔案內容

xz43發表於2011-01-18
1。轉儲資料檔案
 
    在最佳化專案中,有時候為了分析表和索引等的碎片、行遷移等情況,需要對資料檔案進行轉儲。把資料庫檔案(資料檔案、日誌檔案、控制檔案等)的內容取出有利於對Oracle資料庫內部結構展開分析。
    Oracle提供的ALTER SYSTEM DUMP命令就可以把資料匯出到Trace檔案中,這一命令是以資料塊為單位的。
    對於普通的資料檔案,透過下面的命令可以匯出資料檔案中的資料塊:
    ALTER SYSTEM DUMP DATAFILE [ | ] block ;
或者:
    ALTER SYSTEM DUMP DATAFILE [ | ] block min  block max ;
    第一條命令匯出一個資料塊,第二條命令可以匯出多個連續的資料塊。以上命令不能轉儲LMT的臨時表空間檔案,否則會報ORA-1205錯誤。
    要轉儲LMT的臨時檔案,需要使用DUMP TEMPFILE命令:
SQL>ALTER SYSTEM DUMP TEMPFILE 'E:\ORACLE\ORADATA\ORC9\SK_TEMP.DBF' BLOCK 1;
System altered.
 
2。轉儲物件的段頭
 
    在Oracle中,每個段都包含一個段頭。段頭一般來說是某個段第一個擴充套件的第一個塊,包含段的資訊(段的擴充套件情況、FREE LIST的數量等)。要轉儲段頭的資訊,首先需要定位某個段的段頭所在的位置。透過下面的查詢可以檢視到段頭的相關資訊:
select segment_name,header_file,header_block from dba_segments where wner='' and segment_name='';
比如:
SQL> select segment_name, header_file, header_block
  2    from dba_segments
  3   where wner = 'TEST'
  4     and segment_name = 'T_SCHOOL';
SEGMENT_NAME          HEADER_FILE HEADER_BLOCK
-------------------------------- -------------------  ------------
T_SCHOOL                             5                    4748
這個例子說明T_SCHOOL的段頭在5號檔案的4748資料塊。再用ALTER SYSTEM DUMP 命令來轉儲該檔案對應的block即可。
   
    如果要轉儲回退段,那麼可以這樣操作:
select segment_name, header_file, header_block
  from dba_segments
 where segment_name = 'RBS01';
SEGMENT_NAME          HEADER_FILE HEADER_BLOCK
-------------------------------- -------------------  ------------
RBS01                               2                         518
再用:
    alter system dump datafile 2 block 518;
或者直接用下面的命令轉儲:
    alter system dump undo header RBS01;
 
3。轉儲控制檔案
 
    透過設定系統事件,可以把控制檔案轉儲到Trace檔案:
    ALTER SESSION SET EVENTS 'immediate trace name controlf level ';
的取值如下表所示。
    Level          轉儲的內容
     1        檔案頭資訊
     2        檔案頭資訊,資料庫資訊記錄和檢查點程式記錄
     3        所有的記錄,僅僅包含最新和最老的迴圈使用型別的記錄
     4        類似3,不過包含4條最新的迴圈使用型別的記錄
     5+    類似3,迴圈使用型別的記錄是每個級別的雙倍
 
4。轉儲日誌檔案
 
    使用ALTER SYSTEM DUMP LOGFILE可以轉儲線上日誌檔案。也可以使用ALTER SESSION命令去轉儲重做日誌頭的資訊。在資料庫處於NOMOUNT、MOUNT或者OPEN狀態時,就可以使用上面的命令。在作業系統相同的情況下,可以透過客戶端去轉儲另外一個資料庫的重做日誌。
    可以用下面的方法轉儲線上日誌。
a、根據DBA(Data Block Address)轉儲記錄。
    ALTER SYSTEM DUMP LOGFILE 'filename‘
          DBA MIN fileno . blockno
                DBA MAX fileno . blockno;
比如
    ALTER SYSTEM DUMP LOGFILE ’uo1/oracle/v7323/dbs/arch1_2.dbf'
        DBA MIN 5 . 31125
        DBA MAX 5 . 31150;
這個命令轉儲5號檔案的31125~31150塊相關的記錄。
 
b、根據RBA轉儲線上日誌記錄
    ALTER SYSTEM DUMP LOGFILE 'filename‘
           RBA MIN seqno . blockno
           RBA MAX seqno . blockno
比如
    ALTER SYSTEM DUMP LOGFILE ’uo1/oracle/v7323/dbs/arch1_2.dbf'
           RBA MIN 2050 . 13255
           RBA MAX 2050 . 15555;
 
c、根據時間點轉儲線上日誌記錄
    ALTER SYSTEM DUMP LOGFILE 'filename‘
          TIME MIN value
          TIME MAX value;
比如
   ALTER SYSTEM DUMP LOGFILE ’uo1/oracle/v7323/dbs/arch1_2.dbf'
          TIME MIN 299425687
          TIME MAX 299458808;
 
d、根據層次和操作程式碼轉儲記錄
    ALTER SYSTEM DUMP LOGFILE 'filename‘
          LAYER value
          OPCODE value;
 
e、轉儲檔案頭資訊
    ALTER SESSION SET EVENTS 'immediate trace name redohdr level 10';
 
f、轉儲整個重做日誌
    ALTER SYSTEM DUMP LOGFILE ‘filename’;
 
 

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

相關文章