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