据我所知,Oracle中的ROWID代表适当数据文件中记录的物理位置。
哪些情况下记录的ROWID可能会发生变化?
我知道的一个情况是对分区表进行更新,将记录“移动”到另一个分区。
还有其他情况吗?我们大多数数据库都是Oracle 10。
正如您所说,每当行在磁盘上物理移动时会发生这种情况,例如:
如果是在索引组织表中,则对主键的更新也会给您不同的 ROWID。
再次强调,使用 WW(Write Ahead Logging)是非常必要的。
如果问题是是否可以存储 ROWID 以供以后使用,我会说"不要这样做"。
在事务内部使用 ROWID 是可以的 - 例如收集一组 ROWID 以执行后续操作 - 但您永远不应该将 ROWID 存储在表中并假定它们在以后的某个日期可以使用。
+1 @WW
顺便提一句:
索引组织表的ROWID是不同的(我相信它们被称为UROWID),因为在对表进行更新时(当树节点分裂或合并时),行的物理位置可能会发生变化。
为了仍然实现索引,UROWID包括“逻辑ID”(主键)和“可能的物理ID”(常规ROWID),后者可能已过期。