在企業級應用中,跨資料庫存取是常見需求。Oracle 提供透過 TNS (Transparent Network Substrate) 設定網路連線,再建立 Database Link 實現跨資料庫查詢與操作。本文將詳細說明從 TNS 設定到 Database Link 建立與使用的完整流程。
首先編輯 tnsnames.ora 檔案(通常位於 $ORACLE_HOME/network/admin/),新增遠端資料庫的連線描述:
PMSYNO.BJ.COM =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.203)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = SYNO)
)
)
關鍵參數說明:
設定完成後,可使用 tnsping PMSYNO.BJ.COM 驗證連線是否正常。
Database Link 是一個儲存在本地資料庫的結構對象,定義了通往遠端資料庫的路徑與認證資訊。
CREATE DATABASE LINK link_name
CONNECT TO username
IDENTIFIED BY password
USING 'tns_alias';
-- 建立名為 pm_syno 的 Database Link
CREATE DATABASE LINK pm_syno
CONNECT TO pmexp
IDENTIFIED BY pmexp
USING 'PMSYNO.BJ.COM';
注意: USING 後的字串必須與 tnsnames.ora 中定義的別名完全一致(區分大小寫視作業系統而定)。
建立完成後,即可在 SQL 中透過 @link_name 存取遠端資料表:
-- 查詢遠端資料表
SELECT * FROM employees@pm_syno;
-- 跨資料庫 JOIN 查詢
SELECT e.employee_id, e.last_name, d.department_name
FROM employees@pm_syno e
JOIN departments d ON e.department_id = d.department_id;
| 錯誤代碼 | 原因 | 解決方向 |
|---|---|---|
| ORA-12154 | TNS 別名解析失敗 | 檢查 tnsnames.ora 拼寫、路徑、TNS_ADMIN 環境變數 |
| ORA-12541 | 無監聽程式 | 確認遠端 Listener 已啟動(lsnrctl status) |
| ORA-01017 | 帳號/密碼錯誤 | 驗證遠端使用者是否存在、密碼是否正確、大小寫敏感度 |
| ORA-02019 | Database Link 描述不存在 | 確認 USING 子句指定的 TNS 別名正確 |
-- 建立公用 Database Link(所有使用者可見)
CREATE PUBLIC DATABASE LINK remote_prod
CONNECT TO app_user IDENTIFIED BY app_pass
USING 'PROD_DB';
-- 使用 CURRENT_USER 鏈結(依當前使用者身分連線)
CREATE DATABASE LINK remote_hr
CONNECT TO CURRENT_USER
USING 'HR_DB';
DBL_<目標環境>_<用途> 格式,如 DBL_PROD_REPORTDBA_DB_LINKS 與 V$DBLINK 監控連線狀態掌握 TNS 設定與 Database Link 建立是 Oracle 跨資料庫整合的基礎技能。透過標準化的設定流程與命名規範,可大幅降低維護複雜度,確保跨環境資料存取的穩定與安全。