在異構資料庫環境中,實現兩台 Oracle 伺服器之間的資料同步是常見需求。本文詳細說明如何在目標資料庫上建立 Database Link(dblink),並搭配 Snapshot(物化視圖)實現自動資料同步,包含建立連結、建立快照、設定刷新策略及手動刷新等完整步驟。
在目標資料庫執行以下指令,建立指向來源資料庫的公共資料庫連結:
DROP DATABASE LINK dblink_anson;
CREATE PUBLIC DATABASE LINK dblink_anson
CONNECT TO lg IDENTIFIED BY lg USING 'SDLGDB';
參數說明:
- lg:來源資料庫的用戶名與密碼
- SDLGDB:來源資料庫的服務名稱(需在 tnsnames.ora 中配置)
在來源與目標資料庫同時執行,確保表結構一致:
DROP TABLE tb_anson;
CREATE TABLE tb_anson (c1 VARCHAR2(12));
ALTER TABLE tb_anson ADD CONSTRAINT pk_anson PRIMARY KEY (c1);
注意:快照需要主鍵約束以支援快速刷新。
在目標資料庫驗證連結是否正常:
SELECT * FROM tb_anson@dblink_anson;
SELECT * FROM tb_anson;
第一條查詢遠端表,第二條查詢本地表,確認結構與資料一致。
在目標資料庫上為同步表建立快照日誌,記錄資料變更以支援快速刷新:
CREATE SNAPSHOT LOG ON tb_anson;
在目標資料庫建立快照,從來源資料庫透過 dblink 查詢資料:
CREATE SNAPSHOT sn_anson AS SELECT * FROM tb_anson@dblink_anson;
前提條件:來源資料庫服務必須已啟動。
ALTER SNAPSHOT sn_anson REFRESH FAST
START WITH SYSDATE + 1/24/60
NEXT SYSDATE + 10/24/60;
含義:1 分鐘後首次快速刷新,之後每 10 分鐘快速刷新一次。快速刷新僅套用變更資料,效能較佳。
ALTER SNAPSHOT sn_anson REFRESH COMPLETE
START WITH SYSDATE + 30/24/60/60
NEXT SYSDATE + 1;
含義:30 秒後首次完整刷新,之後每天完整刷新一次。完整刷新會重新查詢所有資料,適合定期校正資料一致性。
當需要立即同步資料時,可手動觸發刷新:
BEGIN
DBMS_REFRESH.REFRESH('"CS"."SN_ANSON"');
END;
其中 CS 為快照擁有者 Schema,SN_ANSON 為快照名稱。
透過 Database Link 搭配 Snapshot 機制,可實現 Oracle 資料庫間的非同步資料同步。關鍵在於:正確配置網路連線、建立主鍵與快照日誌以支援快速刷新、依業務需求設定適當的刷新策略。生產環境建議監控刷新狀態與錯誤日誌,確保資料同步的可靠性。