在當前數據庫 (Local) 中直接插入遠端數據庫 (Remote) 的查詢結果,實現 INSERT INTO local_tbl SELECT ... FROM remote_tbl@dblink 模式的數據同步。
核心原則: TNS 別名必須配置在發起連接的數據庫服務器端 的 $ORACLE_HOME/network/admin/tnsnames.ora,而非客戶端。否則報 ORA-12154: TNS:無法解析指定的連接標識符。
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))
)
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';
INSERT INTO target_tbl@curdb (col1, col2)
SELECT col1, col2
FROM source_tbl@remotedb
WHERE rownum <= 3;
CREATE SESSION 權限或密碼錯誤。GRANT SELECT ON source_tbl TO remote_user;distributed_lock_timeout 參數合理。