Logical Standby中的supplemental logging和rely disable constraint

tolywang發表於2009-04-21

Windows 2003 Server  ,  Oracle10.2.0.4   

          由於rowid  (虛列) 是定位Oracle中具體資料的物理儲存位置,是實體地址,由於在邏輯Standby 採用SQL Apply 方式(而不是資料塊block直接更新同步方式) 進行資料同步, Standby 資料庫裡rowid可能不等於Primary 資料庫裡的rowid,所以必須採取一些機制來保證在Primary DB裡所更新的行能夠對應到Logical Standby 裡相應的行。

  

 

新增一個disabled的主鍵型別的rely的限制(disabled primary key rely constraint)

  如果應用程式確保表裡的行是唯一標識的,你可以在表上建立一個disabled主鍵型別的rely的限制:
SQL>alter table mytab add primary key(id,name) rely disable;
  rely constraint告訴系統確保了所有的行都是唯一的。如果rely constraint所指定的列沒有唯一,則在邏輯備用資料庫應用SQL時將會失敗。最好新增主鍵或唯一索引,這樣在邏輯備用資料庫應用SQL語句時也會速度快些。可見,一般是不建議使用rely disabled 來進行限制的,而最好是新增主鍵或唯一索引。

 

            supplemental logging在重做日誌裡新增了唯一標識行的資訊。主鍵或唯一索引存在與否,能夠影響追加的日誌(supplemental logging):

  a、如果表有主鍵或唯一索引,則在supplemental logging的時候,向重做日誌新增的資訊是最少的。
  b、如果表沒有主鍵或唯一索引,supplemental logging會自動在重做日誌裡記錄所有欄位的值。

如何啟用supplemental logging 
  在主資料庫上,執行下面語句以便將主鍵和唯一索引資訊新增到歸檔日誌裡:
SQL> alter database add supplemental log data(primary key,unique index) columns;   如果想刪除,使用drop .
  該語句在主資料庫中向重做日誌新增了唯一標識行的資訊,從而日誌應用服務可以在備用資料庫里正確的標識相同的行了。

 

備註:  Oracle中定義PK與Unique Index 區別是 not null ,  在Oracle中唯一索引中的null數值被視為不同 ,PK不允許有null 值。 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-591147/,如需轉載,請註明出處,否則將追究法律責任。

相關文章