深入認識Oracle Supplemental logging

junsansi發表於2008-09-23

對於有過邏輯standby,streams搭建體驗的朋友,肯定對Supplemental logging不會感到陌生,在一步一步學Dataguard系列筆記中,我曾將其譯為附加日誌,後來想了想,我覺著附加日誌這幾個字還是不能完全體現其真實意圖,一時半會兒又找不到合適的詞兒,算了,不譯了,還是堅持以英文相稱吧。

Supplemental Logging具體是做什麼用的呢?要回答這個問題,我們就必須先搞明白,為什麼我們需要Supplemental Logging!

事實上,目前最有可能用到Supplemental Logging的也只有邏輯standby和streams這兩項特性(10g以後如果希望logminer能夠分析出所有操作,建議也要啟用Supplemental Logging),我們都知道,這兩項特性的資料應用都屬於邏輯應用,類似source database執行update語句之類,結果也要反映到target database,如何準確判斷出source端修改的列,在target端中應該更新到哪條記錄上呢?根據rowid?顯然不靠譜啊,都說了是邏輯的,塊的位置完全不一樣,rowid已無用武之地~~~你想說,能否通過表中的唯一鍵?在更新表中記錄時,將主鍵或唯一鍵做為附加的資訊,與被修改的列一起存入redolog中,對於沒有主鍵唯一鍵的表,則將表中所有列統統組合做為附加資訊存入redolog,這樣target端在分析redolog時,就知道該更新表中的哪些記錄了!

哎呀,說到這裡我不得不鄭重表揚..............oracle,它跟你想到一塊去啦,為了彰顯其成果,Oracle將這項特性命名為:Supplemental Logging。當然啦,為了這項特效能夠工作的更好,oracle深化了你的想法,並將其設計的更加靈活多樣。

資料庫啟用了Supplemental Logging之後,對於修改操作,oracle就會同時附加一些能夠唯一標識修改記錄的列到redolog中,對於擁有主鍵或唯一鍵的表,這個操作最簡單,只需要附加主鍵或唯一鍵即可,這樣生成的redo也是最小的,當然這只是一個理想狀態,現實情況下某些表可能無法建立主鍵/唯一鍵,或者歷史原因確無主鍵/唯一鍵,這種情況下oracle會將所有列(提示,非log,long之類大欄位型別的列)都做為附加資訊記錄到redo中,這種情況下redo有可能增長迅速,並且在target端應用時也會受到一些影響。因此oracle建議最好為每個涉及到複製的表都建立主鍵或者唯一鍵。

對於選擇的列和那些用於精確定位的附加列的組合,oracle也對其做了定義叫做supplemental log group。隨後oracle又對supplemental log group做了分類,目的是更精確的設定redolog中都記錄些什麼資訊,分如下兩類:
a.Unconditional Supplemental Log Groups:無條件記錄指定列的前映像,而不管發生修改操作的是不是指定列。因此它還有個外號,叫"老記錄日誌組"。
b.Conditional Supplemental Log Groups:只有至少一個指定列發生修改操作時被觸發,並記錄下修改列的前映像。

Supplemental Logging可以在資料庫級設定,也可以精確到表級設定,對於資料庫級有兩種型別:minimal logging和identification key logging,其主要區別就在於寫入redolog中的資料詳盡程度不同。

以資料庫級為例,如何啟用Supplemental Logging呢?試試這個命令:
alter database add supplemental log data;
注:這裡啟用minimal logging,一般做到這一步,logminer就擁有足夠的資訊分析所有所做過的操作。

如果想禁用Supplemental Logging,drop即可:
alter database drop supplemental log data;

如何查詢當前資料庫是否啟用了Supplemental Logging呢?則可以試試這條語句:
select supplemental_log_data_min,
       supplemental_log_data_pk,
       supplemental_log_data_ui,
       supplemental_log_data_fk,
       supplemental_log_data_all
  from v$database;

注:supp....data_min/pk/ui等等分別表示不同附加列級別。

正如前面多次提到的,更多應用Supplemental Logging的場合是邏輯standby和streams,因此,如果你希望瞭解更多的資訊,不妨多去測試測試這兩項特性吧。

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

相關文章