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