1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Oraclerowid详解课件

1.?????? rowid的介绍 先对rowid有个感官认识: SQL select ROWID from Bruce_test where rownum2; ROWID ------------------ ---------- AAABnlAAFAAAAAPAAA ROWID的格式如下: 数据对象编号??????? 文件编号??????? 块编号?????????? 行编号 OOOOOO???????????? FFF??????????????? BBBBBB RRR 我们可以看出,从上面的rowid可以得知: AAABnl 是数据对象编号 AAF是相关文件编号 AAAAAP是块编号 AAA 是行编号 怎么依据这些编号得到具体的十进制的编码值呢,这是经常遇到的问题。这里需要明白rowid的是基于64位编码的18个字符显示(数据对象编号(6) +文件编号(3) +块编号(6)+?????? 行编号(3)=18位),其中 A-Z == 0 - 25 (26) a-z == 26 - 51 (26) 0-9 == 52 - 61 (10) +/ == 62 - 63 (2) 共64位,明白这个后,就可以计算出10进制的编码值,计算公式如下: d * (b ^ p) 其中:b就是基数,这里就是64,p就是从右到左,已0开始的位置数 比如:上面的例子 文件号AAF,具体的计算应该是: 5*(64^0)=5; 0*(64^1)=0; 0*(64^2)=0; 文件号就是0+0+5=5 刚才提到的是rowid的显示方式:基于64位编码的18个字符显示,其实rowid的存储方式是:10 个字节即80位存储,其中数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,由此,我们可以得出: 32bit的object number,每个数据库最多有4G个对象 10bit的file number,每个对象最多有1022个文件(2个文件预留) 22bit的block number,每个文件最多有4M个BLOCK 16bit的row number,每个BLOCK最多有64K个ROWS 2.?????? rowid相关的有用的sql 最简单的基于rowid的显示方式得到的响应的64位编码对应值的sql: select rowid , substr(rowid,1,6) OBJECT, substr(rowid,7,3) FILE, substr(rowid,10,6) BLOCK, substr(rowid,16,3) ROW from TableName; OWID????????????? OBJECT?????? FILE?? BLOCK??????? ROW ------------------ ------------ ------ ------------ ------ AAABc4AADAAAGLUAAA AAABc4?????? AAD??? AAAGLU?????? AAA AAABc4AADAAAGLUAAB AAABc4?????? AAD??? AAAGLU?????? AAB AAABc4AADAAAGLUAAC AAABc4?????? AAD??? AAAGLU?????? AAC AAABc4AADAAAGLUAAD AAABc4?????? AAD??? AAAGLU?????? AAD AAABc4AADAAAGLUAAE AAABc4?????? AAD??? AAAGLU?????? AAE 通过dbms_rowid这个包,可以直接的得到具体的rowid包含的信息: select dbms_rowid.rowid_object(rowid) object_id, dbms_rowid.rowid_relative_fno(rowid) file_id, dbms_rowid.rowid_block_number(rowid) block_id ,dbms_rowid.rowid_row_number(rowid) num from bruce_t where rownum5; OBJECT_ID??? FILE_ID?? BLOCK_ID??????? NUM ---------- ---------- ---------- ---------- ????? 5944????????? 3????? 25300????????? 0 ????? 5944????????? 3????? 25300????????? 1 ????? 5944????????? 3????? 25300????????? 2 ????? 5944????????? 3????? 25300????

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档