【DB筆試面試525】在Oracle中,行鏈接和行遷移有什麼區別?

  • 2019 年 10 月 10 日
  • 筆記

♣

題目部分

在Oracle中,行鏈接和行遷移有什麼區別?

♣

答案部分

當一行的數據過長而不能存儲在單個數據塊中時,可能發生兩種事情:行鏈接(Row Chaining)或行遷移(Row Migration)。

① 行鏈接(Row Chaining):當第一次插入行時,由於行太長而不能容納在一個數據塊中時,就會發生行鏈接。在這種情況下,Oracle會使用與該塊鏈接的一個或多個數據塊來容納該行的數據。行鏈接經常在插入比較大的行時才會發生,例如包含LONG、LONG ROW、LOB等類型的數據。在這些情況下,行鏈接是不可避免的。行鏈接通常由INSERT操作引起。

② 行遷移(Row Migration):當一個行上的更新操作導致當前的數據增加以致於不能再容納在當前塊,這個時候就需要進行行遷移,在這種情況下,Oracle將會遷移整行數據到一個新的數據塊中。一個行遷移意味著整行數據都將會移動,原始的數據塊上僅僅保留的是指向新塊的一個地址資訊。發生行遷移的時候行的ROWID不會改變。行遷移的情況主要是由於表上的PCTFREE參數設置過小導致,所以必須設置一個合適的PCTFREE參數。可以使用exp/imp工具導入導出來處理行遷移。行遷移通常由UPDATE操作引起。

& 說明:

有關行遷移和行鏈接更多的內容可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2139126/

本文選自《Oracle程式設計師面試筆試寶典》,作者:李華榮。

Tags: