2010-05-14 162 views
2

我不得不承認,這讓我在生產系統中感到意外。我最近在幾張表中添加了補充日誌記錄,以便與Oracle Change Data Capture一起使用。在不相關的代碼構建過程中進行例行檢查發現,這顯然是在「S」類型的數據庫中創建了禁用的約束。我似乎無法在Oracle文檔中找到任何關於此的參考信息,單個「S」使Google難以找到相關的內容。新的Oracle約束類型

我的問題:

  1. 的原因,任何事情,在 隱含的約束 補充日誌的結果嗎?
  2. 爲什麼創建DISABLED 狀態?
  3. 有沒有人有與 啓用這些影響的經驗?我們有 標準清理過程, 在部署完成後運行到完全 啓用約束,可能有 已被禁用或啓用novalidate 出於數據遷移的原因。

回答

3

約束類型進行了說明:http://download.oracle.com/docs/cd/E11882_01/server.112/e10820/statviews_1045.htm#REFRN20047

S代表「補充記錄」,這進一步說明如下:http://download.oracle.com/docs/cd/E11882_01/server.112/e10704/strms_glossary.htm#CHDIHHGA這裏:http://download.oracle.com/docs/cd/E11882_01/server.112/e10705/prep_rep.htm#STREP107

我沒有任何與它的經驗。這是在tahiti.oracle.com上搜索的結果。

Regards, Rob。

+0

謝謝 - 沒有想到在字典中查看視圖defs爲約束類型。我仍然感興趣的是爲什麼這會導致一個約束 - 我認爲約束會阻止DML在表上,並且無法明白爲什麼補充日誌會以這種方式影響表。 – dpbradley 2010-05-14 20:45:47

3

補充日誌記錄對於支持某些類型的異步數據捕獲是必要的:例如AQ Streams和CDC(Oracle和第三方的實現)。這些機制通過讀取重做日誌並將這些更改應用於其他Oracle數據庫來工作。補充日誌的重點是增加重做日誌中包含的數據量。

有兩種啓用補充記錄的方法。在最近版本的數據庫,我們可以在數據庫級別

ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; 

設置最小記錄在另外我們可以添加指定補充日誌組表和列。這一點的意義在於在變更表中包含未更改列的值,因爲這樣可以更輕鬆地將更改應用到目標數據庫中。 Find out more

很明顯,S型約束識別補充日誌組中的列。我認爲他們被禁用的原因是因爲他們不強制數據完整性規則(不像主鍵或檢查約束)。如果是這樣,我認爲這是不明智的,所以你應該重新寫你的自動清理過濾器的限制類型S.

+0

是的,這些約束是補充日誌記錄體系結構的一部分,但對於我來說這個實現涉及到這個結構似乎很奇怪。我一直認爲約束==數據限制,這不適合這種模式。當然,我遵循Rob的鏈接到x_CONSTRAINTS文檔,並發現當我沒有看到:-)時,還有一些類型已經潛入。時間來審查所有這些實用腳本... – dpbradley 2010-05-15 16:43:46

+0

也,我想我同意你不重新啓用它們。雖然它在測試系統中似乎沒有受到任何傷害,但不理解它們的原因使我對使用訂閱配置的一些邊緣案例保持警惕,這種配置會在生產中失敗。 – dpbradley 2010-05-15 16:47:03