【发布时间】:2010-09-30 21:51:04
【问题描述】:
Oracle 中的 AFAIK ROWID 表示相应数据文件中记录的物理位置。 在哪些情况下记录的 ROWID 可能会改变?
我知道的是分区表上的更新,它将记录“移动”到另一个分区。
还有其他情况吗?我们的大多数数据库都是 Oracle 10。
【问题讨论】:
Oracle 中的 AFAIK ROWID 表示相应数据文件中记录的物理位置。 在哪些情况下记录的 ROWID 可能会改变?
我知道的是分区表上的更新,它将记录“移动”到另一个分区。
还有其他情况吗?我们的大多数数据库都是 Oracle 10。
【问题讨论】:
正如您所说,只要行在磁盘上物理移动,就会发生这种情况,例如:
如果是在索引组织的表中,那么对主键的更新也会给你一个不同的 ROWID。
【讨论】:
+1 @WW
顺便说一句:
索引组织表的 ROWID 是不同的(我相信它们被称为 UROWID),因为行的物理位置可能会在表更新期间发生变化(当树节点拆分或连接时)。
为了使索引仍然可行,UROWID 包括“逻辑 id”(主键)和“可能的物理 id”(常规 ROWID),后者可能已过期。
【讨论】:
对 WW 的另一个 +1,但只是为了添加一点额外...
如果驱动问题是您是否可以存储 ROWID 以供以后使用,我会说“不要这样做”。
您可以在事务中使用 ROWID - 例如收集一组 ROWID 以执行后续操作 - 但您应该永远将 ROWID 存储在表中并假设它们'以后可以用了。
【讨论】: