博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle redo解析之-4、rowid的计算
阅读量:7233 次
发布时间:2019-06-29

本文共 1519 字,大约阅读时间需要 5 分钟。

对rowid的理解

  rowid是数据库的一个伪列,在建立表的时候Oracle会自动为每个表建立ROWID列。伪列实际上不存储在表中,可以从这些伪列中查询值,但不能插入、更新或删除。

  rowid是用来唯一标识一行记录的,是存储每条记录的实际物理地址。

查询某条记录的rowid值

SQL> select ROWID from user_test where rownum<3;ROWID------------------AAAQObAAFAAAACDAAAAAAQObAAFAAAACFAAArowid的格式如下:1. 数据对象编号: AAAQOb, data_obj#,即obj$2. 相对文件编号: AAF, file#3. 块编号: AAAACD, block#4. 行编号: AAA, slot复制代码

计算具体的dataobj#, file#, block#, slot

rowid是base64编码,用A-Z,a-z, 0-9,+,/共64个字符来表示,A表示0,B表示1等等。	则:		data_obj#=AAAQOb=0*64^5 + 0*64^4 + 0*64^3 + 16*64^2 + 14*64^1 + 27*64^0 = 66459	file#=AAF=0*64^2 + 0*64^1 + 5*64^0 = 5	block#=AAAACD=2*64^1 + 3*64^0 = 128	slot=AAA = 0复制代码

根据data_obj#, file#, block#, slot计算rowid

  实际上就是将十进制数转化成64进制,当然从二进制转换比较简单。

  将二进制数从右往左,6位一组,然后将这6位二进制转成十进制,然后替换成base64的字符即可。

例:	dataobj#=66444=1 00000011 10001100 = 010000 001110 001100 = 16 14 12 = Q O M = AAAQOM(补齐6位)	file#=1 = AAB	block#=70321=1 00010010 10110001 = 010001 001010 110001 = 17 10 49 = R K x = AAARKx	slot=0 = AAA则:rowid=AAAQOMAABAAARKxAAA复制代码

SQL查询出data_obj#,file#,block#,slot的值

SQL> select dbms_rowid.rowid_object(rowid) object_id,  2  dbms_rowid.rowid_relative_fno(rowid) file_id,  3  dbms_rowid.rowid_block_number(rowid) block_id,  4  dbms_rowid.rowid_row_number(rowid) num   5  from user_test; OBJECT_ID    FILE_ID	BLOCK_ID	NUM---------- ---------- ---------- ----------     66459	    5	     131	  0     66459	    5	     133	  0复制代码

#总结   根据data_obj#确定数据保存的数据段,根据file#确定数据所在的文件,根据block#确定数据保存在文件的哪里块,根据slot确定数据保存在块中的哪一行,因此根据rowid可以具体定位数据的位置。对数据库中记录行的最快检索操作就是通过rowid来进行查找的。

转载地址:http://wujfm.baihongyu.com/

你可能感兴趣的文章
大话企业级移动应用的开发策略
查看>>
jquery插件整理篇(二)消息提示类jquery插件
查看>>
ASP.NET数据绑定的记忆碎片
查看>>
SDUT 2012春季ACM内部测试赛4's
查看>>
分享一款超棒的jQuery Google地图插件:Gmaps
查看>>
html color
查看>>
一个javascript文件上传组件.
查看>>
AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
查看>>
设计模式(Abstract Factory)抽象工厂
查看>>
修改工程名称
查看>>
使用intellij idea搭建MAVEN+springmvc+mybatis框架
查看>>
ubuntu 编译运行 opencv C++ 项目
查看>>
Node入门教程(10)第八章:Node 的事件处理
查看>>
html5 css3构造的漂亮表格
查看>>
m2014_c->c语言容器类工具列
查看>>
spider-抓取网页内容
查看>>
在Ubuntu下安装和配置Rails 3详解 (LightTPD + FastCGI)
查看>>
DRBD试用手记
查看>>
argparse – Command line option and argument parsing.¶
查看>>
UML 图使用心得
查看>>