【问题标题】:Datatype of ROWID in Oracle/SQLOracle/SQL 中 ROWID 的数据类型
【发布时间】:2012-07-21 16:09:35
【问题描述】:

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

【问题讨论】:

标签: sql oracle rowid


【解决方案1】:

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

ROWID 存储为psuedocolumn

【讨论】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • rowid 对于特定行不必是唯一的。存储在集群中的行可以具有相同的 rowid,尽管它们具有不同的 urowid。有些行根本没有 rowid。在存储 ROWID 的地方,它们是连接的十六进制的字符串表示形式,而不是十六进制本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2013-01-05
    • 2010-10-28
    • 1970-01-01
    • 2020-05-29
    • 2018-02-20
    相关资源
    最近更新 更多