tech_memo / ORACLE / BlockDump


tech_memo/ORACLE

ブロックダンプ方法

単一のデータ・ブロックをダンプする

  • ファイルNoとブロックNoを取得する。
    select rowid, dbms_rowid.rowid_relative_fno(rowid) as fno, dbms_rowid.rowid_block_number(rowid) as blkno from TEST_TAB where rownum = 1;
    ROWID                     FNO      BLKNO
    ------------------ ---------- ----------
    AAAVmOAAGAACTScAAA          6     603292
  • 上記ファイルNoと、ブロックNoを使って以下を実行
    alter system dump datafile 6 block 603292;
    
    システムが変更されました。
  • 以下に出力される
    $ORACLE_BASE/diag/rdbms/<SERVICE_NAME>/<SID>/trace/<SID>_ora_xxxx.trc
  • ITLの情報とか見れる
     Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
    0x01   0x03af.011.0000083d  0x00c01d7f.1a9b.3c  --U-   21  fsc 0x0000.0e2df5a5
    0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

複数のデータ・ブロックをダンプする

  • FILE_ID, 開始BLOCK_ID, 終了BLOCK_IDを取得
    SELECT FILE_ID, BLOCK_ID as MIN_BLOCK_ID, BLOCK_ID+BLOCKS-1 as MAX_BLOCK_ID FROM DBA_EXTENTS WHERE SEGMENT_NAME = 'TEST_TABLE';
  • 上記で取得したFILE_ID等を当て込む
    ALTER SYSTEM DUMP DATAFILE <FILE_ID> BLOCK MIN <開始BLOCK_ID> BLOCK MAX <終了BLOCK_ID>;
  • TEMPFILEや、FILE名でも出力できる
    ALTER SYSTEM DUMP { DATAFILE | TEMPFILE } { file_id | 'file_name' } BLOCK MIN <block_id_min> BLOCK MAX <block_id_max>;