Oracle中的AFAIK ROWID表示记录在相应数据文件中的物理位置。 在哪些情况下记录的ROWID可能会更改?什么会导致Oracle ROWID更改?
我知道的一个是分区表上的UPDATE,它将记录“移动”到另一个分区。
是否还有其他情况?我们大部分的DB是甲骨文10
Oracle中的AFAIK ROWID表示记录在相应数据文件中的物理位置。 在哪些情况下记录的ROWID可能会更改?什么会导致Oracle ROWID更改?
我知道的一个是分区表上的UPDATE,它将记录“移动”到另一个分区。
是否还有其他情况?我们大部分的DB是甲骨文10
正如你所说,它发生在任何时候排在磁盘上的物理移动,如:
如果是在索引组织表,然后更新主键会给你一个不同的ROWID为好。
+1 @WW
顺便说一句:
ROWID索引组织表是不同的(他们被称为UROWID,我相信),因为该行的物理位置可以更新到过程中改变表(当树节点拆分或连接时)。
为了使索引仍然可行,UROWID包括“逻辑ID”(主键)和“可能的物理ID”(常规ROWID),后者可能已过期。
另一个+1至WW,但只是为了增加一点额外的...
如果驱动问题是你是否可以存储供以后使用的ROWID,我会说:“不这样做”。
您是细到一个事务中使用的ROWID - 例如收集一组上的ROWID开展后续行动 - 但你应该永远店的的ROWID在表中,并假设他们会是可以在以后使用。
此外,更新(先前的NULL值,比方说)可能会使该行足够大,以至于无法再将其放在当前页面上。在发生大量更新的应用程序中,这可能相当常见。 – 2009-01-12 12:34:11
迈克,这将导致行链。该行的明显ROWID不会更改,但在记录中,您将获得一个指向放置完整记录的另一个块的指针。 – 2009-01-12 21:48:17