oracle datafile 與 object的關係

aaqwsh發表於2012-12-27

有時候為了檢查物理備庫是否正常,我們一般open read only 開啟,然後去查詢一些物件。這個比較直觀,然後如果想知道某些datafile是否正常,可以查詢對應file上的物件(當然還有一些常規方法dbv、VALIDATE DATAFILE),那怎麼知道datafile 與 object的關係呢,通過 v$bh可以大概看出來:


通過v$bh得到一些object:

SQL>  select file#,block#,class#,status,xnc,objd from v$bh where ts#=6 and file#=53;
 
     FILE#     BLOCK#     CLASS# STATUS            XNC       OBJD
---------- ---------- ---------- ---------- ---------- ----------
        53      29073          0 free                0      20798
        53      14928          0 free                0      22287
        53      22151          0 free                0      23840
        53      14352          0 free                0      22287
        53      16216          0 free                0      22287
        53      17936          0 free                0      22287
        53      31882          0 free                0      24140
        53      32581          0 free                0      24140
        53      16627          0 free                0      22287
        53      10370          0 free                0      22287
        53      22774          0 free                0      23840

165 rows selected.


通過dump block得到一些具體的物件記錄:

alter system dump datafile 53 block 14352;


 seg/obj: 0x570f  csc: 0x0f.6c721bd0  itc: 2  flg: E  typ: 1 - DATA   ----&gt 0x570f 轉為十進位制為 22287
     brn: 0  bdba: 0xd402883 ver: 0x01 opc: 0
     inc: 0  exflg: 0

tab 0, row 0, @0x1f29
tl: 111 fb: --H-FL-- lb: 0x0  cc: 10
col  0: [ 2]  c1 02
col  1: [ 5]  c4 07 24 24 0f
col  2: [ 5]  c4 13 60 37 63

 

還原dump資料(可參考http://space.itpub.net/758322/viewspace-751219 oracle 資料型別轉換)

SQL> declare n number;
  2      begin
  3       dbms_stats.convert_raw_value('c40724240f',n);
  4      dbms_output.put_line(n);
  5      end;
  6  /
 
6353514
 
PL/SQL procedure successfully completed
 
SQL>
SQL> declare n number;
  2      begin
  3       dbms_stats.convert_raw_value('c413603763',n);
  4      dbms_output.put_line(n);
  5      end;
  6  /
 
18955498
 
PL/SQL procedure successfully completed

 

驗證,可通過相應記錄的rowid轉換得到:

SQL> select object_name from dba_objects where object_id=22287;
 
OBJECT_NAME
--------------------------------------------------------------------------------
AAAAAA


SQL> select dbms_rowid.rowid_object(rowid) obj,
  2         dbms_rowid.rowid_relative_fno(rowid) "file"
  3    from AAAAAA a
  4   where a.product_id = 6353514
  5     and a.pic_id = 18955498;
 
       OBJ       file
---------- ----------
     22287         53

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

相關文章