ORACLE ROWID
物理 rowid[physical rowid]:用于存储常规表,聚簇表,表分区及子分区,索引,索引分区及子分区数据行的地址。
逻辑 rowid[logical rowid]:用于存储索引组织表数据行的地址。
物理 rowid 数据类型有两种格式:
扩展 rowid[extended rowid]:格式支持与表空间相关的数据块地址,能够高效地定位分区表及分区索引中的数据行,同样也能用于对非分区表及非分区索引进行高效地检索。在 Oracle8i(或更高版本)数据库中创建的表及索引均使用扩展 rowid。
受限 rowid[restricted rowid]:格式的作用是为 Oracle 7 或更早版本的数据库应用程序提供向后兼容能力。
扩展 rowid [数据对象编号+文件+块+行] (80 bit 位)
使用 64 进制对每个数据行的物理地址进行编码。编码字符为 A-Z,a-z,0-9,+,和 /。
扩展 rowid 的格式可分为 4 段,OOOOOOFFFBBBBBBRRR
OOOOOO:数据对象编号[data object number]用于确定数据库的段。位于相同数据段中的方案对象具有相同的数据对象编号。
FFF:与表空间相关的数据文件编号[datafile number],代表包含此行的数据文件。
BBBBBB:包含数据行的数据块[data block]。数据块编号与其所在的数据文件相关,而非与表空间相关。因此两个具备相同数据块编号的数据行可能存在于同一个表空间的不同数据文件中。
RRR: 数据块中的数据行。
可以使用 DBMS_ROWID 包通过扩展 rowid 获取数据库对象信息,在扩展格式及受限格式间转换 rowid。
受限 rowid [块+行+文件](48 bit 位)
块:含数据行的数据块[data block](示例中为 DD5)。数据块编号与其所在的数据文件相关,而非与表空间相关。因此两个具备相同数据块编号的数据行可能存在于同一个表空间的不同数据文件中。
行:数据行[row]在数据块中的位置(示例中各行分别为 0,1,2)。数据块内的行号总是从 0 开始。
数据文件:数据行所在的数据文件[datafile](示例中的文件号为 1)。数据库内的数据文件编号总是从 1 开始,数据文件编号在一个数据库内唯一。
使用 rowid
访问特定数据行的最快的方法。
了解数据表是如何组织的。
rowid 是数据表内各数据行的唯一标识。