分享

ROWID_一路走过

 YES_MAN 2009-04-13
ROWID
2008年10月15日 星期三 17:34

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 是数据表内各数据行的唯一标识。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多