查看: 7544|回复: 16

[一周一帖之五]Rowid简单总结

[复制链接]
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44CTO参与奖
日期:2009-01-15 11:42:46
跳转到指定楼层
1#
发表于 2008-12-4 09:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Rowid简单总结

本文是看到了精华帖中的warehouse的“rowed的一点总结”后写的一点总结,主要是自己归纳的一个过程。原来一直弄不明白显示rowid的18位64进制和10byte之间的关系,看了此文后总算有点理解了。感谢warehouse!
Rowid分类:物理rowid,逻辑rowid
物理rowid:extended rowid,restricted rowid
restricted rowid是oracle7 采用的,从oracle8开始都是使用extended rowid,主要是因为数据量的膨胀原来的rowid不够用了。
逻辑rowid出现有两个原因:iot表的记录物理上可能会发生变化,如果用物理rowid就不适用了;其次是oracle数据库可能会引用一些其他数据库(db2等)的数据,对于这部分数据也只能用逻辑rowid。逻辑rowid是基于primary key的所以iot表必须有pk。

显示:18位64进制字符  
OOOOOO FFF BBBBBB RRR  对应  data_object_id, rfile#, block#, Rows
显示出来的是64进制数,oracle在设计rowid时用A~Z表示0-25,用a~z表示26-51,用0~9表示52-61,用+表示62,用/表示63
例如:AAACdcAABAAAHCKAAA
AAACdc   = 2*power(64,2)+29*64+28   OOOOOO
AAB       = 2                           FFF
AAAHCK   = 7*power(64,2)+2*64+10    BBBBBB
AAA       =0                            RRR

内部处理:
Rowid是伪列,在数据库中是不进行存储的(某些特殊情况除外例如索引中)而是在获取时根据存储位置构造出来的。
sql>SELECT VSIZE(ROWID) FROM SCOTT.EMP;
    10
Rowid在显示上采用的是64位编码,但是内部处理上是通过10个字节即80位来进行的。
其中data_object_id占用32 位  
(显示时用6位64进制的字符 power(64,6)=power(2,36)>power(2,32))
rfile#占用10 位,
(显示时用3位64进制的字符 power(64,3)=power(2,18)>power(2,10))
block_number占22位,
(显示时用6位64进制的字符 power(64,6)=power(2,36)>power(2,22))
row#占用16位
(显示时用3位64进制的字符 power(64,3)=power(2,18)>power(2,16))
由此:
32bit的objects number,每个数据库最多有4G个对象
10bit的rfile#,由于rfile#占用了10位,因此每个表空间最多有1022个文件(2个预留)
22bit的block number,每个文件最多有4M个BLOCK
16bit的row number,每个BLOCK最多有64K个ROWS。
rowid在索引中是真实存储的,但在索引(gloab index?有待确定)中rowid没有必要存储data_object_id,所以索引中rowid为80-32=48位,采用12位16进制的字符来表示。
btw:在索引中键值和rowid是成对出现的,也就是说一个键值有多少重复的记录,它就将在索引叶节点中出现多少次每次都对应一个rowid,只不过键值相同的记录是顺序出现的。
以下节选自对索引的dump文件(alter system dump datafile xxx block xxx;)
row#0[8019] flag: ------, lock: 0, len=17
col 0; len 7; (7):  41 4e 41 4c 59 53 54  ---键值
col 1; len 6; (6):  01 00 00 20 00 07  ---无data_object_id ,16进制12位占6个字节
row#1[8002] flag: ------, lock: 0, len=17
col 0; len 7; (7):  41 4e 41 4c 59 53 54
col 1; len 6; (6):  01 00 00 20 00 0c
row#2[7987] flag: ------, lock: 0, len=15
col 0; len 5; (5):  43 4c 45 52 4b
col 1; len 6; (6):  01 00 00 20 00 00
row#3[7972] flag: ------, lock: 0, len=15
col 0; len 5; (5):  43 4c 45 52 4b
col 1; len 6; (6):  01 00 00 20 00 0a
row#4[7957] flag: ------, lock: 0, len=15
col 0; len 5; (5):  43 4c 45 52 4b
col 1; len 6; (6):  01 00 00 20 00 0b
row#5[7942] flag: ------, lock: 0, len=15
col 0; len 5; (5):  43 4c 45 52 4b
col 1; len 6; (6):  01 00 00 20 00 0d
rowid操作package:dbms_rowid ,相关过程、函数使用方法可以通过帮助获得。
论坛徽章:
4
祖国60周年纪念徽章
日期:2009-10-09 08:28:00
2#
发表于 2008-12-4 13:31 | 只看该作者

使用道具 举报

回复
论坛徽章:
10
生肖徽章2007版:蛇
日期:2008-10-16 15:37:262011新春纪念徽章
日期:2011-02-18 11:43:35祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:蛇
日期:2009-04-23 10:20:26生肖徽章2007版:鸡
日期:2009-03-10 21:16:44数据库板块每日发贴之星
日期:2009-01-08 01:01:022009新春纪念徽章
日期:2009-01-04 14:52:28生肖徽章2007版:蛇
日期:2008-10-27 16:26:10奥运会纪念徽章:举重
日期:2008-10-24 13:16:31一汽
日期:2013-10-28 20:43:00
3#
发表于 2008-12-4 13:54 | 只看该作者
不錯

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2008-06-18 16:39:36BLOG每日发帖之星
日期:2009-05-13 01:01:05
4#
发表于 2008-12-4 14:10 | 只看该作者
学习了

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44ITPUB9周年纪念徽章
日期:2010-10-08 09:34:02
5#
发表于 2008-12-4 15:28 | 只看该作者
路过就帮你顶了

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2008-07-29 21:25:09
6#
发表于 2008-12-5 00:37 | 只看该作者
好东西,顶起来

使用道具 举报

回复
论坛徽章:
5
生肖徽章2007版:牛
日期:2009-12-03 13:37:50ITPUB9周年纪念徽章
日期:2010-10-08 09:34:02ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:292013年新春福章
日期:2013-02-25 14:51:24
7#
发表于 2008-12-5 17:32 | 只看该作者
好东东

使用道具 举报

回复
论坛徽章:
2
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44CTO参与奖
日期:2009-01-15 11:42:46
8#
 楼主| 发表于 2008-12-7 11:14 | 只看该作者
up

使用道具 举报

回复
论坛徽章:
98
2009日食纪念
日期:2009-07-22 09:30:002010新春纪念徽章
日期:2010-03-01 11:05:012010年世界杯参赛球队:美国
日期:2010-05-02 21:32:232010数据库技术大会纪念徽章
日期:2010-05-13 09:34:23ITPUB季度 技术新星
日期:2010-05-17 15:53:17数据库板块每日发贴之星
日期:2010-05-24 01:01:072010年世界杯参赛球队:意大利
日期:2010-05-31 20:55:432010年世界杯参赛球队:巴拉圭
日期:2010-07-03 13:06:582010世博会纪念徽章
日期:2010-08-18 23:53:44ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51
9#
发表于 2008-12-7 13:03 | 只看该作者
好定西。顶起来。

使用道具 举报

回复
论坛徽章:
58
生肖徽章2007版:马
日期:2009-11-06 23:12:33授权会员
日期:2013-01-10 14:38:592013年新春福章
日期:2013-02-25 14:51:24马自达
日期:2013-08-07 10:54:45红旗
日期:2013-08-09 13:48:48劳斯莱斯
日期:2013-09-12 15:56:37萤石
日期:2013-10-31 08:44:19优秀写手
日期:2013-12-18 09:29:13Jeep
日期:2014-01-14 10:53:432014年新春福章
日期:2014-02-18 16:43:09
10#
发表于 2008-12-7 14:35 | 只看该作者
很支持这种学习中总结性的帖子,水平有限但可以自己实验基础之上再查阅诸多资料之后来总结是再好不过啦!不过高手和版主不会有什么意见吧!

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表