【发布时间】:2012-07-21 16:09:35
【问题描述】:
Oracle/SQL中ROWID的数据类型是什么?这个值是如何存储的?
【问题讨论】:
Oracle/SQL中ROWID的数据类型是什么?这个值是如何存储的?
【问题讨论】:
以下链接解释了 ROWID 的数据类型是什么 - ROWID data type
ROWID 存储为psuedocolumn。
【讨论】:
ROWID(因为 Oracle8 称为扩展 ROWID,直到 Oracle7 现在称为受限 ROWID)存储/编码行的物理位置。
(扩展的)ROWID 编码(以十六进制格式)以下字段: OBJID(行所属对象的唯一 ID)、FILENO(创建对象的 TABLESPACE 内的相对文件编号、BLOCKNO(文件内的相对块编号)和 ROWNUM(行的相对编号)块内)。
(受限)ROWID 仅包含 FILENO(数据库中的相对文件号)、BLOCKNO 和 ROWNUM(与扩展 ROWID 类似),没有 OBJID。
在任何给定时间,ROWID 都会对数据库中的行进行唯一编码(可能共享相同 ROWID 的集群故事除外)。 ROWID 可能会更改(由于数据库的重组),也可能会被重新使用(例如在删除和插入之后,新行可能会重新使用 ROWID)。导出/导入表也会为表重新分配新的 ROWID。
注意,扩展ROWID格式的每个数据库的FILENO不一定是唯一的,但由于扩展格式还包含OBJID(唯一标识存储表对象段的表空间),我们可以找到一个唯一的文件.
BLOCKNO 在每个数据库文件中是唯一的,而 ROWNUM 在每个数据库块中是唯一的。
例外:索引组织表 - 由于索引重组(叶块的移动),ROWID 无法定位确切的块。
ROWID 可能会因数据库重组操作而改变。
【讨论】:
ROWID 数据类型存储与表行的磁盘位置相关的信息。它们还唯一标识表中的行。 ROWID 数据类型存储为十六进制。
因此,十六进制字符串表示行在其表中的唯一地址。
【讨论】: