是什么导致Oracle ROWID发生变化?

时间:2009-01-12 11:04:32

标签: sql database oracle rowid

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

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

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

3 个答案:

答案 0 :(得分:31)

正如您所说,它会在磁盘上物理移动的任何时候发生,例如:

  • 导出/导入表格
  • ALTER TABLE XXXX MOVE
  • ALTER TABLE XXXX SHRINK SPACE
  • FLASHBACK TABLE XXXX
  • 拆分分区
  • 更新值以使其移至新分区
  • 合并两个分区

如果在索引组织表中,那么对主键的更新也会为您提供不同的ROWID。

答案 1 :(得分:8)

+1 @WW

暂且不说:

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

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

答案 2 :(得分:8)

WW的另一个+1,但只是添加一点额外的......

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

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