天天看點

oracle中rowid轉mysql_Oracle 中的rowid

Oracle中的每個表都有一個rowid,它是一個18位字元組成字元串,例:AAANgBAABAAAO/KAAA.它包含的字元串由A-Z,a-z,0-9,+,/這些字元組

Oracle中的每個表都有一個rowid,它是一個18位字元組成字元串,例:AAANgBAABAAAO/KAAA.它包含的字元串由A-Z,a-z,0-9,+,/這些字元組成.是64進制.

其中A-Z對應0-25,a-z對應26-51,0-9對應52-61,+對應62,/對應63.

這個18位的字元串分成4段分别表示不同的意思(6,3,6,3),1-6位表示對象ID,7-9位代表資料檔案編号,10-12位代表資料塊編号,13-18代表在資料塊中的行.

假設建立下面一個表:

create table tb(id int,name varchar2(10))

insert into tb values(1,'a')

insert into tb values(2,'b')

通過select rowid,id from tb得到:

AAANgBAABAAAO/KAAA 1

AAANgBAABAAAO/KAAB 2

以AAANgB AAB AAAO/K AAA 為例,

AAANgB為表tb的id,

通過select * from all_objects where object_name='TB' 看到 object_id為55297,

計算AAANgB的10進制的值為:select 13*64*64+32*64+1 from dual 得到的值也為55297.

AAB為資料檔案的編号:1,代表dba_data_files的file_id,通過select * from dba_data_files可以看到對應的資料檔案資訊.

AAAO/K代表塊的編号:61386,通過 select 14*64*64 +63*64 + 10 from dual計算得到

行的編号是:0,上面兩行是鄰接的,僅僅行号不同.

通過下面的sql可以檢視這個資料塊是不是加載到了資料緩沖區:select * from v$bh where block#=61386 and file#=1

知道了塊号之後,可以dump這個塊在記憶體(資料緩沖區)中的内容: alter system dump datafile 1 block 61386

知道了塊号之後,可以dump這個塊在資料檔案中的内容:

alter system dump datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF' block 61386

然後在udump檔案夾下的trace檔案中可以看到dump的内容.

oracle中rowid轉mysql_Oracle 中的rowid

oracle中rowid轉mysql_Oracle 中的rowid

本文原創釋出php中文網,轉載請注明出處,感謝您的尊重!