Oracle

數據庫複製和一致性檢查

  • November 29, 2018

我有一個關於我擁有的兩個數據庫(在 Oracle 10g 中)的問題,我們稱它們為 A 和 B。A 有一些資訊(在各種表中),我希望 B 從 A 獲取一些表的部分副本,並不斷檢查A 中的更改並在 B 中“同步”它們。

我想問你一些方法、技術或者想法,我知道我不能對 A 做任何改變(只是選擇,沒有觸發器)。

我提前感謝您的幫助和耐心(可能的編輯)。

附加資訊

感謝您的回答,我不知道它是否相關,但我找到了 MINUS 運算符,但我不確定它是否適用於“子表”(選擇)。

由於您要求“不斷檢查…同步”和“不能對 A 進行任何更改”,因此您的選擇相當有限。諸如物化視圖日誌、dbms_alert、流和備用數據庫之類的東西都不在表中。

如果 A 中的表不斷更新其所有行,那麼(正如傑克道格拉斯所說)物化視圖將是最容易設置的。如果大多數記錄在 A 中不時更改,您可能希望在 B 上設置一個(或多個)包,從 A 中選擇以在 B 上根據需要合併和刪除。這將僅與執行頻率一樣最新,但考慮到您的要求,它可能是您能做的最好的。

具體來說,您的包應該執行以下操作:

  • 從 B 中刪除 A 中不存在的行。
  • 將 A合併到 B 中,匹配時更新,不匹配時插入。

如果您想避免多次點擊 A 中的表,您可以將整個表插入到 B 上的全域臨時表中,然後從那裡執行刪除/合併。

關於減號: 減號可以告訴您 A 的查詢中不在 B 中的所有行。通過將其與 B 的減號查詢聯合起來,您可以獲得所有不同的行,但這可能需要更長的時間來處理甚至在添加插入/更新部分之前。如果 A 沒有得到更新或刪除,那麼您可以插入第一個減號的結果,但 aninsert into B...where not exists A...仍然會更快更簡單。

引用自:https://dba.stackexchange.com/questions/2967