Oracle
在 oracle xe 中自動將新數據記錄移動到另一個數據庫
將所有數據從我的本地 oracle 數據庫上的表移動到另一台電腦上的相同表的最佳方法是什麼?一旦將數據寫入本地數據庫,我將不得不將其傳輸到第二個數據庫。本地表不應包含任何數據,除非無法將其插入遠端數據庫。如果連接失去,所有新數據集都必須儲存在本地表中。我試圖通過使用觸發器來解決這個問題,但它沒有按預期工作。如果遠端數據庫連接有效,它就可以正常工作,但如果連接失去,它會執行整個回滾(包括原始插入)。因此,數據甚至沒有插入到本地數據庫中。另一個大問題是每次返回ORA-12170(連接超時)大約需要40秒。
create or replace TRIGGER DATA_TO_SERVER AFTER INSERT ON LOCAL_TABLE DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN SAVEPOINT sp; INSERT INTO SERVER.SERVER_TABLE@SERVER_LINK SELECT * FROM LOCAL_TABLE; DELETE FROM LOCAL_TABLE WHERE ID IS NOT NULL; COMMIT; EXCEPTION WHEN OTHERS THEN ROLLBACK to sp; RAISE; END;
SQL> Create Directory EXPDIR as 'PATH';
導出命令
expdp directory=expdir dumpfile=newExport.dmp full=y logfile=newExport.log
在目標數據庫上也創建一個目錄
Create Directory EXPDIR as 'PATH';
導入命令
IMPDP directory=ExpDir dumpfile=newExport.dmp Logfile=import_Database.LOG FULL=Y
順便說一句,這是一個完整的導出和導入,您可以根據自己的喜好自定義導出或導入的內容
https://docs.oracle.com/cloud/latest/db112/SUTIL/dp_export.htm#SUTIL200
我看到的唯一解決方案(我非常短視)是在該表上創建一個視圖,插入發生在該視圖中,並且“代替”觸發器處理這些插入。如果插入遠端表失敗,則在本地插入。