视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Oracle中的rowid
2020-11-09 11:46:03 责编:小采
文档


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

Oracle中的每个表都有一个rowid,它是一个18位字符组成字符串,例:AAANgBAABAAAO/KAAA.它包含的字符串由A-Z,a-z,0-9,+,/这些字符组成.是进制.

其中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**+32*+1 from dual 得到的值也为55297.

AAB为数据文件的编号:1,代表dba_data_files的file_id,通过select * from dba_data_files可以看到对应的数据文件信息.

AAAO/K代表块的编号:61386,通过 select 14** +63* + 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的内容.

下载本文
显示全文
专题