ITPub博客

首页 > 数据库 > Oracle > 关于rowid小结

关于rowid小结

原创 Oracle 作者:小宇12333 时间:2014-01-02 22:01:51 0 删除 编辑
基础知识:每张表中的每一行数据都具有一个物理地址。一个数据行的地址由以下因素共同确定:
1:对象编号
2:数据文件编号
3:数据块编号
4:数据行在数据文件的地址

rowid使用64进制表示的;
64进制,所用的字符是“0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/”
64进制转10进制:
A-Z 0-25
a-z 26-51
0-9 52-61  
+ 62
/ 63
我们查询一张表:
SYS@oracle > select rowid,t.* from t;
ROWID              TIME
------------------ --------------
AAAXzRAABAAAZWpAAA 31-7月 -13
AAAXzRAABAAAZWpAAB 03-6月 -13
AAAXzRAABAAAZWpAAC 03-8月 -13


以第一行rowid为例:
AAAXzRAABAAAZWpAAA--64进制
 AAAXzR   ---对象编号 51*64+23*64*64+17*64^0=97489
 AAB      ---数据文件编号 0*64^2+0*64^1+1*64^0=1
 AAAZWp   ---块号 0*64^5+0*64^4+0*64^3+25*64^2+22*64^1+41*60^0=103849
 AAA      ---行号 0*64^2+0*64^1+0*64^0=0   


通过dbms_rowid包获取详细信息;
SYS@oracle > select rowid,dbms_rowid.ROWID_OBJECT(rowid) object_id,
  2  dbms_rowid.ROWID_RELATIVE_FNO(rowid) file_id,
  3  dbms_rowid.ROWID_BLOCK_NUMBER(rowid) block_num,
  4  dbms_rowid.ROWID_ROW_NUMBER(rowid) row_num from t
  5  /


ROWID               OBJECT_ID    FILE_ID  BLOCK_NUM    ROW_NUM
------------------ ---------- ---------- ---------- ----------
AAAXzRAABAAAZWpAAA      97489          1     103849          0
AAAXzRAABAAAZWpAAB      97489          1     103849          1
AAAXzRAABAAAZWpAAC      97489          1     103849          2


我们也可以通过数据字典获取对象编号:
SYS@oracle > select owner,object_name,data_object_id from dba_objects
  2  where owner='SYS' and object_name='T'
  3  /


OWNER      OBJECT_NAM  DATA_OBJECT_ID
---------- ----------  --------------
SYS        T           97489
通过查询特定的包与64进制编码计算得出的值是相同的;

结束!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25923810/viewspace-1066628/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-07-22

  • 博文量
    31
  • 访问量
    95062