在企業級應用開發中,跨資料庫查詢與資料遷移是常見需求。當需要從本地 Oracle 資料庫連接遠端 Oracle 資料庫並匯出資料時,主要有兩種成熟的實作方案:建立 Database Link 直接查詢與配置 TNS 服務名稱後建立連結。本文將詳細解析這兩種方式的操作步驟、適用場景及注意事項,幫助 DBA 與開發人員快速落地跨庫資料存取。
此方式無需修改本地 tnsnames.ora,適合臨時性、一次性的跨庫查詢,或是權限受限無法修改網路配置檔的環境。
CREATE DATABASE LINK remote_link_name
CONNECT TO remote_user IDENTIFIED BY remote_password
USING '(
DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 遠端資料庫IP)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = 遠端服務名稱)
)
)';
關鍵參數說明:
remote_link_name:自訂連結名稱,後續查詢時使用 @remote_link_nameHOST:遠端資料庫伺服器 IP 或主機名PORT:監聽埠,預設 1521SERVICE_NAME:Oracle 9i 後推薦使用全域資料庫名;舊版可用 SID 替代SELECT * FROM employee@remote_link_name;
若返回結果,即表示 Database Link 建立成功,可直接進行跨庫查詢、建立視圖或執行 CREATE TABLE AS SELECT 匯出資料。
此方式將連線描述集中管理於 tnsnames.ora,便於維護、複用,且支援負載均衡、故障轉移等高階特性,適合長期穩定的跨庫業務。
檔案路徑通常為 $ORACLE_HOME/network/admin/tnsnames.ora(Windows 為 %ORACLE_HOME%\network\admin\tnsnames.ora)。
REMOTE_DB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.6.30.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = global_db_name)
)
)
儲存後,可用 tnsping REMOTE_DB 測試連通性。
CREATE DATABASE LINK remote_link_name
CONNECT TO remote_user IDENTIFIED BY remote_password
USING 'REMOTE_DB';
與方式一相同,使用 @remote_link_name 即可存取遠端物件。
| 維度 | 方式一定義描述符 | 方式二 TNS 服務名 |
|---|---|---|
| 部署便利性 | 單一 SQL 完成,無需檔案權限 | 需修改 tnsnames.ora,需檔案寫入權限 |
| 維護性 | 分散在各 DB Link 中,修改需重建 | 集中管理,修改 tnsnames.ora 即生效 |
| 高可用支援 | 不支援 FAILOVER/LOAD_BALANCE | 支援完整 TNS 特性 |
| 適用場景 | 臨時查詢、開發測試、無檔案權限 | 生產環境、長期跨庫業務、叢集部署 |
CREATE SESSION 權限。掌握這兩種方式,即可靈活應對 Oracle 跨資料庫資料匯出與查詢的各類業務場景。