打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
北极星Polestar Peter 修身、齐家、治国、平天下

racle常用包之dbms_rowid oracle rowid含义分析

如果我们查询一个表的ROWID,就可以获得object的信息,文件信息,块信息与行信息等等,如根据其中块的信息,可以知道该表确切占用了多少个块,每行在哪个块上,哪个数据文件上。

SQL> select rowid from t;

ROWID
------------------
AAANkiAAGAAAAZfAAA
AAANkiAAGAAAAZfAAB

拿第一个rowid AAANkiAAGAAAAZfAAA分解一下看到如下

Data Object number = AAANki

File = AAG

Block = AAAAZf

ROW = AAA


SQL> select dbms_rowid.rowid_block_number(rowid) from t;

DBMS_ROWID.ROWID_BLOCK_NUMBER(
------------------------------
1631
1631

SQL> select header_file, header_block, blocks from dba_segments where segment_name = 'T';

HEADER_FILE HEADER_BLOCK BLOCKS
----------- ------------ ----------
6 1627 8

另外,我们需要注意的是,ROWID是64进制的,分布关系如下

A-Z <==> 0 - 25 (26)

a-z <==> 26 - 51 (26)

0-9 <==> 52 - 61 (10)

+/ <==> 62 - 63 (2)


SQL> --AAANki=55586 AAG=6 AAAAZf=1631 AAA=0

SQL> select 25*64 + 31 from dual;

25*64+31
----------
1631

SQL> select 13*64*64 + 36*64 +34 from dual;

13*64*64+36*64+34
-----------------
55586

SQL> select object_id from user_objects where object_name ='T';

OBJECT_ID
----------
55586

也可以通过dbms_rowid包来查询

SQL> select dbms_rowid.rowid_object('AAANkiAAGAAAAZfAAA') data_object_id#,
2 dbms_rowid.rowid_relative_fno('AAANkiAAGAAAAZfAAA') rfile#,
3 dbms_rowid.rowid_block_number('AAANkiAAGAAAAZfAAA') block#,
4 dbms_rowid.rowid_row_number('AAANkiAAGAAAAZfAAA') row# from dual;

DATA_OBJECT_ID# RFILE# BLOCK# ROW#
--------------- ---------- ---------- ----------
55586 6 1631 0

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
deadlock的一些Sample
Oracle的rowid
linux输入输出重定向使用详解(收藏)
Oracle rowid 详解 (转)
[20191011]拆分rowid 2.txt
DATA BLOCK内部结构的解析续二
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服