Oracle 流復制實踐筆記
最近因為業務需求,需要在兩個數據庫之間做雙向實時同步,遂實踐了一把Oracle的流復制,遇到了很多疑難問題,最終也貌似成功,現記錄如下。
我是使用OEM來實現流復制的。
10.進行流復制的兩個數據庫的實例名不一樣,于是我把其中一個數據庫實例重裝了,哭~~~
20.兩個數據庫都需要打開歸檔模式。
30.進行流復制配置前兩臺數據庫需要同步的數據最好一模一樣。否則在同步過程中可能會操作一些本庫中不存在的數據從而導致同步錯誤。
40.使用sys用戶登錄,在數據移動->設置中創建流管理員用戶,兩個庫都要創建。
50.使用流管理員用戶登錄,進入數據移動->設置。選擇同步的方式。我這里選的是按方案同步。選擇特定方案后,需填寫目標服務器相關參數。然后在下一步中點開高級選項,勾選雙向復制,然后下一步,再下一步即可。
55.當提交后,OEM生成了一個調度去做同步的準備工作。在我的電腦上運行了將近五分鐘。在運行過程中可能會報錯,這時正確的做法是回到數據移動->設置,按照上面的提示進行回滾或繼續操作。如果直接刪除相關調度或別的資源,可能會導致無法再次配置流復制。我后來只好通過閃回數據庫的方式才實現操作回滾。
60.創建成功后,進入數據移動->管理復制中,可看觀察捕獲,傳播,應用三個圖表來獲取當前同步信息。其中捕獲是通過分析當前日志來獲取數據結構與數據內容的變化。傳播是將變化同步到目標機器上。應用是將獲取的變化應用到本庫中。
我在配置流復制時遇到了好幾個錯誤,其中大部分是提示找不到目標服務器或對象。后來我通過在/etc/host里直接指定ip與機器名的對應關系,又試了幾次后,居然成功了。其次,在OEM提示配置成功的同時,仍然報了好幾個別的錯,后來我試了試在兩邊分別操作數據,發現都能同步成功,索性就不管了。
在實際使用中,還發現了以下問題
10.在實際使用中發現流復制無法同步序列值的變化,后來采取了間隔步長來規避這個問題。
oracle stream不會同步sequence值的變化如何解決
Oracle Streams Conflict Resolution
20. ORA-26786錯誤。在報錯的服務器上執行下面的腳本來覆蓋沖突。例如
DECLARE cols DBMS_UTILITY.NAME_ARRAY; BEGIN cols(1) := 'DQHJMC'; DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER( object_name => 'LandSystem.LS_CASE_BWA', method_name => 'OVERWRITE', resolution_column => 'DQHJMC', column_list => cols); END;
其中cols表示需要執行的列,object_name表示表名,method_name表示解決策略,resolution_column表示判斷依據列。
解決沖突后,把method_name設為null再執行一次刪除這個策略。
Managing Oracle Streams Conflict Detection and Resolution
DBMS_APPLY_ADM.SET_UPDATE_CONFLICT_HANDLER (P)
streams雙向復制沖突規則(SET_UPDATE_CONFLICT_HANDLER)
參考
有用Oracle 11gR2(11.2.0.2.0)作Stream兄弟嗎?看看我這個錯誤,能提供點文章參考嗎?

浙公網安備 33010602011771號