Oracle ROWID格式及rdba

Oracle 8i以上smallfile表空间的ROWID格式是:OOOOOO.FFF.BBBBBB.RRR,其中:

O--对象号

F--文件号

B--块号

R--行号

ROWID是一个64位数,共18位。

64位编码表如下:

64位码 对应十进制数值
A~Z0~25
a~z26~51
0~952~61
+62
/63

 

ROWID存储为10个字节,共80位,组成形式:32bit obj# +10bit rfile#+22bit block# +16bit row#

可以使用dbms_rowid包对ROWID进行解析:

select dbms_rowid.rowid_object('&&rowid') obj_id#, dbms_rowid.rowid_relative_fno('&&rowid') rfile#, dbms_rowid.rowid_block_number('&&rowid') block#, dbms_rowid.rowid_row_number('&&rowid') row# from dual;

 

从Oracle10g开始,Oracle引入了bigfile表空间,ROWID格式随之变为:OOOOOO.LLLLLLLLL.RRR,其中:

O--对象号

L--块号

R--行号

存储格式也调整为:32bit obj# + 32bit block# +16bit row#

 

RDBA是relative data block address, 即相对数据块地址。在DUMP数据库块时会经常看到RDBA,RDBA是一个16进制数,组成形式:10bit rfile#+22bit block#。

以下两种方法可以用来转换RDBA:

1. 使用dbms_utility包

select dbms_utility.data_block_address_file(to_number('&&rdba','xxxxxxxxxxxxx')) file_id, dbms_utility.data_block_address_block(to_number('&&rdba','xxxxxxxxxxxxx'))  block_id from dual;

2. 直接解析

select trunc(to_number('&&rdba','xxxxxxxxxxxxx')/power(2,22)) file_id, mod(to_number('&&rdba','xxxxxxxxxxxxx'),power(2,22)) block_id from dual;

转载于:https://www.cnblogs.com/cqubityj/archive/2012/02/06/2339691.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值