| 項目 | 本地 (新疆分公司) | 遠端 (北京總部) |
|---|---|---|
| IP | 192.168.1.100 | 192.168.1.101 |
| SID | SIDXJ | SIDBJ |
| 用戶/密碼 | userxj / xj123 | userbj / bj123 |
| OS / Oracle 版本 | WinXP / Oracle 8.1.7 | WinXP / Oracle 8.1.7 |
目標:在本地 SIDXJ 下以 userxj 身份,透過 DB Link 存取遠端 SIDBJ 的 userbj 物件。
SELECT * FROM global_name; -- 本地回傳:SIDXJ -- 遠端回傳:SIDBJ.US.ORACLE.COM
SHOW PARAMETER global_names; -- NAME: global_names TYPE: boolean VALUE: TRUE -- 為 TRUE 時,DB Link 名稱必須 = 遠端 Global Name
SELECT * FROM v$option WHERE parameter = 'Advanced replication'; -- VALUE = TRUE 表示支援
tnsnames.ora 新增:
tns_xj_to_bj =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
(CONNECT_DATA = (SID = SIDBJ))
)
測試:tnsping tns_xj_to_bj 成功。
CONNECT userbj/bj123@SIDBJ CREATE TABLE userbj.bj_test (stu_id NUMBER, stu_name VARCHAR2(100)); INSERT INTO bj_test VALUES (1, '鐘德榮'); COMMIT;
CONNECT userxj/xj123@SIDXJ CREATE DATABASE LINK "SIDBJ.US.ORACLE.COM" CONNECT TO userbj IDENTIFIED BY bj123 USING 'tns_xj_to_bj';
關鍵點:Link 名稱雙引號保留大小寫,必須與遠端 GLOBAL_NAME 完全一致。
SELECT * FROM dual@"SIDBJ.US.ORACLE.COM"; -- 回傳 DUMMY = X 表示成功
SELECT * FROM userbj.bj_test@"SIDBJ.US.ORACLE.COM"; -- 回傳 1, '鐘德榮'
| 錯誤代碼 | 原因 | 解決 |
|---|---|---|
| ORA-12154 | TNS 別名解析失敗 | 檢查 tnsnames.ora 拼寫、tnsping 通訊 |
| ORA-12514 | Listener 不識別 SID/Service | 遠端 listener.ora 確認 SID_NAME、服務已註冊 |
| ORA-02019 | DB Link 名稱不符 GLOBAL_NAMES=TRUE 要求 | Link 名稱改為遠端 Global Name (含域名) |
| ORA-01017 | 遠端帳號/密碼錯誤 | 確認 CONNECT TO IDENTIFIED BY |
| ORA-02085 | 連結資料庫版本不相容 | 確認雙端版本相容性矩陣 |
Windows XP 需關閉防火牆或開放 TCP 1521,否則 ping 通但 tnsping/連線失敗。