Oracle Database Link(DB Link)是跨資料庫查詢與資料整合的關鍵功能,但許多開發人員對其建立細節並不熟悉。本文將系統整理兩種最常用的建立方案,並針對實務操作中的關鍵細節進行深度解析,助您快速掌握跨資料庫連線技術。
假設我們有兩個獨立的 Oracle 資料庫:資料庫 1 (TEST1) 作為發起端,資料庫 2 (TEST2) 作為目標端。需求是在 TEST1 上建立指向 TEST2 的 DB Link,以便在 TEST1 中直接查詢 TEST2 的資料表。
這是最傳統、也是最穩定的方式,適用於網路環境固定、已配置好 tnsnames.ora 的場景。
在資料庫 1 所在的伺服器(或安裝 Oracle Client 的機器)上,編輯 $ORACLE_HOME/network/admin/tnsnames.ora,新增指向 TEST2 的服務名稱條目,例如命名為 orl_test2:
orl_test2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test2_host_ip)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = TEST2)
)
)
使用 SQL*Plus 連線到 TEST1,執行以下 DDL:
CREATE DATABASE LINK link_name
CONNECT TO target_user IDENTIFIED BY target_password
USING 'orl_test2';
link_name:自定義的 DB Link 名稱(如 dblink_test2)target_user / target_password:TEST2 的有效帳密'orl_test2':步驟 1 中定義的 TNS 服務名稱,必須加單引號測試連線:SELECT * FROM dual@link_name;
若需移除:DROP DATABASE LINK link_name;(若為 PUBLIC DB Link 需加 PUBLIC 關鍵字)
此法無需修改 tnsnames.ora,適合臨時連線、自動化部署或無法修改客戶端配置的環境。直接在 USING 子句中內嵌完整的連線描述符:
CREATE DATABASE LINK link_name
CONNECT TO target_user IDENTIFIED BY target_password
USING '(
DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = test2_host_ip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = TEST2)
)
)';
關鍵點:整個描述符必須包在單引號內,內部可換行排版以利閱讀;HOST 填寫 TEST2 伺服器 IP 或主機名,SERVICE_NAME 對應 TEST2 的服務名稱。
dblink_目標環境_用途 格式(如 dblink_prod_report),利於維運識別。SELECT 1 FROM dual@dblink_name 驗證連通性。| 錯誤代碼 | 可能原因 | 解決方向 |
|---|---|---|
| ORA-12154 | TNS 服務名稱解析失敗 | 檢查 tnsnames.ora 拼寫、路徑、TNS_ADMIN 環境變數 |
| ORA-12541 | 監聽器未啟動或 Port 錯誤 | 確認目標端 lsnrctl status、防火牆規則 |
| ORA-01017 | 帳密錯誤 | 核對目標資料庫帳號狀態、密碼大小寫、過期與否 |
掌握這兩種建立方式,即可應對絕大多數跨資料庫整合需求。建議優先採用方案一(集中管理 TNS),特殊場景再靈活切換至方案二。