oracle中rowid是什么,Oracle中的rowid

5268f80b9b1e01f982625ef6fac83ca1.png

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的内容.

logo.gif

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值