2009-01-12 94 views
13

Oracle中的AFAIK ROWID表示記錄在相應數據文件中的物理位置。 在哪些情況下記錄的ROWID可能會更改?什麼會導致Oracle ROWID更改?

我知道的一個是分區表上的UPDATE,它將記錄「移動」到另一個分區。

是否還有其他情況?我們大部分的DB是甲骨文10

回答

30

正如你所說,它發生在任何時候排在磁盤上的物理移動,如:

  • ALTER TABLE XXXX MOVE的導出/導入
  • ALTER TABLE XXXX SHRINK SPACE
  • FLASHBACK TABLE XXXX
  • 分裂分區
  • 更新一個值,使得其移動到一個新的分區
  • 合併兩個分區

如果是在索引組織表,然後更新主鍵會給你一個不同的ROWID爲好。

+1

此外,更新(先前的NULL值,比方說)可能會使該行足夠大,以至於無法再將其放在當前頁面上。在發生大量更新的應用程序中,這可能相當常見。 – 2009-01-12 12:34:11

+2

邁克,這將導致行鏈。該行的明顯ROWID不會更改,但在記錄中,您將獲得一個指向放置完整記錄的另一個塊的指針。 – 2009-01-12 21:48:17

8

+1 @WW

順便說一句:

ROWID索引組織表是不同的(他們被稱爲UROWID,我相信),因爲該行的物理位置可以更新到過程中改變表(當樹節點拆分或連接時)。

爲了使索引仍然可行,UROWID包括「邏輯ID」(主鍵)和「可能的物理ID」(常規ROWID),後者可能已過期。

8

另一個+1至​​WW,但只是爲了增加一點額外的...

如果驅動問題是你是否可以存儲供以後使用的ROWID,我會說:「不這樣做」。

您是細到一個事務中使用的ROWID - 例如收集一組上的ROWID開展後續行動 - 但你應該永遠的的ROWID在表中,並假設他們會是可以在以後使用。

相關問題