首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 跨服務器 Database Link 實現異構數據同步插入

     編輯:Oracle 資料庫相關知識

需求場景

在當前數據庫 (Local) 中直接插入遠端數據庫 (Remote) 的查詢結果,實現 INSERT INTO local_tbl SELECT ... FROM remote_tbl@dblink 模式的數據同步。

關鍵配置:服務端 TNSNAMES.ORA

核心原則: TNS 別名必須配置在發起連接的數據庫服務器端 的 $ORACLE_HOME/network/admin/tnsnames.ora,而非客戶端。否則報 ORA-12154: TNS:無法解析指定的連接標識符。

配置步驟

1. 服務器端 tnsnames.ora 定義別名

REMOTEDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = remote_ip)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = remote_svc))
  )

CURDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = local_ip)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = local_svc))
  )

2. 創建 Public Database Link

CREATE PUBLIC DATABASE LINK remotedb
  CONNECT TO remote_user IDENTIFIED BY remote_pwd
  USING 'REMOTEDB';

CREATE PUBLIC DATABASE LINK curdb
  CONNECT TO local_user IDENTIFIED BY local_pwd
  USING 'CURDB';

3. 執行跨庫插入

INSERT INTO target_tbl@curdb (col1, col2)
SELECT col1, col2
FROM source_tbl@remotedb
WHERE rownum <= 3;

常見坑點排查

  • ORA-02019: 遠端用戶無 CREATE SESSION 權限或密碼錯誤。
  • ORA-02068: 遠端表不存在或權限不足,需 GRANT SELECT ON source_tbl TO remote_user;
  • 分布式事務: 跨 DB Link DML 會啟動兩階段提交,確保 distributed_lock_timeout 參數合理。
  • 字符集不一致: 可能導致數據截斷或亂碼,建議統一為 AL32UTF8。

進階替代方案

  1. Materialized View (物化視圖): 適合定時刷新、大數據量、可容忍延遲的場景。
  2. GoldenGate / XStreams: 實時異構複制,零停機遷移首選。
  3. External Table + DBMS_CLOUD: 適合雲端對象存儲作為中轉的批量同步。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved