10

Oracle/SQL中ROWID的数据类型是什么?这个值是如何存储的?

4

3 回答 3

9

以下链接解释了 ROWID 的数据类型是什么 - ROWID 数据类型

ROWID 存储为伪列

于 2012-07-23T12:15:12.907 回答
2

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 可能会因数据库重组操作而改变。

于 2016-12-07T00:13:55.513 回答
1

ROWID 数据类型存储与表行的磁盘位置相关的信息。它们还唯一标识表中的行。ROWID 数据类型存储为十六进制。

因此,十六进制字符串表示其表中行的唯一地址。

于 2015-09-19T15:18:41.520 回答