17

Oracle 中的 AFAIK ROWID 表示相应数据文件中记录的物理位置。在哪些情况下记录的 ROWID 可能会改变?

我知道的是分区表上的更新,它将记录“移动”到另一个分区。

还有其他情况吗?我们的大多数数据库都是 Oracle 10。

4

3 回答 3

33

正如您所说,只要行在磁盘上物理移动,就会发生这种情况,例如:

  • 表的导出/导入
  • 更改表 XXXX 移动
  • ALTER TABLE XXXX 缩小空间
  • 闪回表 XXXX
  • 拆分分区
  • 更新值以使其移动到新分区
  • 合并两个分区

如果在索引组织的表中,那么对主键的更新也会给你一个不同的 ROWID。

于 2009-01-12T11:12:05.517 回答
8

+1 @WW

作为旁白:

索引组织表的 ROWID 是不同的(我相信它们被称为 UROWID),因为行的物理位置可能会在表更新期间发生变化(当树节点拆分或连接时)。

为了使索引仍然可行,UROWID 包括“逻辑 id”(主键)和“可能的物理 id”(常规 ROWID),后者可能已过期。

于 2009-01-12T11:27:37.607 回答
8

WW的另一个+1,但只是为了增加一点......

如果驱动问题是您是否可以存储 ROWID 以供以后使用,我会说“不要这样做”。

您可以在事务中使用 ROWID - 例如收集一组 ROWID 以执行后续操作 - 但您永远不应该将 ROWID 存储在表中并假设它们以后可以使用日期。

于 2009-01-12T14:14:10.550 回答