Oracle

在 oracle xe 中自動將新數據記錄移動到另一個數據庫

  • December 24, 2021

將所有數據從我的本地 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

我看到的唯一解決方案(我非常短視)是在該表上創建一個視圖,插入發生在該視圖中,並且“代替”觸發器處理這些插入。如果插入遠端表失敗,則在本地插入。

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