Oracle 10g 中的ROWID详解(2)

在SQL语句的SELECT和WHERE子句中都可以使用ROWID的值。大多数情况下,ROWID唯一标识一行。然而,行有可能存储在同一个聚簇中的不同表中,因此包含具有相同ROWID的行。
 
理解ROWID首先需要理解它的两个方面:ROWID的特性和ROWID的结构。
 

一、ROWID的特性
 (1)rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。
 (2)rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来。
(3)利用rowid是访问表中一行的最快方式。
(4)rowid需要10个字节来存储,显示为18位的字符串。
 
二、ROWID的结构
 rowid的组成结构为:
 
data object number(6位字符串) relative file number(3位字符串) block number(6位字符串) row number(3位字符串),如:AAAMieAAFAAAABUAAC
 
64编码的物理地址,编码字符是A-Z, a-z, 0-9, +,and/.
 
      由4部分组成OOOOOOFFFBBBBBBRRR (obj#file#block#row#)
 
      OOOOOO -–data object number
 
      FFF –-表空间相对的数据文件号
 
      BBBBBB –-块号
 
      RRR ---行号

当如下情况发生时,rowid将发生改变:
(1)对一个表做表空间的移动后
(2)对一个表进行了EXP/IMP

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/26dba501392ecff37d9022a64b969b70.html