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