首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Database Link (DBLINK) 建立完整實戰指南:跨庫查詢、Global Name、TNS 設定與防火牆排查

     編輯:Oracle 資料庫基礎

Oracle DBLINK 跨資料庫查詢建立全流程

場景:新疆分公司 (本地庫 SIDXJ) 需透過 DBLINK 查詢北京總部庫 (SIDBJ) 資料。本文記錄完整建立流程:Global Name 確認、TNS 別名設定、DBLINK 建立語法、權限授予、連線測試與防火牆/監聽器常見阻斷排查。

環境資訊

項目北京總部 (Remote)新疆分公司 (Local)
IP192.168.1.101192.168.1.100
SIDSIDBJSIDXJ
Global NameSIDBJ.US.ORACLE.COMSIDXJ
User/PassUSERBJ / BJ123USERXJ / XJ123
OS/DBWinXP / Oracle 8.1.7WinXP / Oracle 8.1.7

前置檢查

  1. Global Name 參數:
    
    SHOW PARAMETER GLOBAL_NAMES;
    -- 若 TRUE,DBLINK 名稱必須 = 遠端 Global Name
    
  2. Advanced Replication 支援 (若需雙向複寫):
    
    SELECT * FROM V$OPTION WHERE PARAMETER = 'Advanced replication';
    -- TRUE 表示支援
    
  3. 防火牆/網路:雙向 Ping 通、TNSPING 通、1521 埠開放。關閉 Windows 防火牆或開放 1521。

步驟 1:本地建立 TNS 別名連接遠端

編輯 $ORACLE_HOME/network/admin/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 確認 OK。

步驟 2:遠端建立測試表 (USERBJ)


CREATE TABLE USERBJ.BJ_TEST (
    STU_ID NUMBER,
    STU_NAME VARCHAR2(100)
);
INSERT INTO USERBJ.BJ_TEST VALUES (1, '鐘德榮');
COMMIT;

步驟 3:本地以 USERXJ 建立 DBLINK


-- 必須與遠端 Global Name 完全一致 (含大小寫)
CREATE DATABASE LINK "SIDBJ.US.ORACLE.COM"
CONNECT TO USERBJ IDENTIFIED BY BJ123
USING 'TNS_XJ_TO_BJ';
  • 雙引號保留大小寫 (Global Name 區分大小寫)
  • USING 後接本地 TNS 別名

步驟 4:測試連線與跨庫查詢


-- 基本連線測試
SELECT * FROM DUAL@"SIDBJ.US.ORACLE.COM";
-- 預期回傳 DUMMY = 'X'

-- 跨庫查詢業務表
SELECT * FROM USERBJ.BJ_TEST@"SIDBJ.US.ORACLE.COM";
-- 預期回傳 STU_ID=1, STU_NAME='鐘德榮'

常見錯誤與解決

錯誤代碼原因解決
ORA-02019Global Name 不匹配DBLINK 名稱必須 = 遠端 SELECT * FROM GLOBAL_NAME 結果
ORA-12154 / TNS-03505TNS 別名解析失敗檢查 tnsnames.ora 拼寫、SID/Service Name、Host/IP、Port
ORA-12541 / 12545監聽器未啟動/Host 錯誤遠端 LSNRCTL STATUS、確認 HOST/IP、防火牆 1521
ORA-01017帳號密碼錯誤確認遠端 USERBJ/BJ123、大小寫、鎖定狀態
ORA-02085DBLINK 連線已關閉重新建立 DBLINK、檢查遠端 IDLE_TIME 限制

進階:私有 vs 公共 DBLINK


-- 私有 (僅建立者可用) - 預設
CREATE DATABASE LINK ...

-- 公共 (所有用戶可用,需 CREATE PUBLIC DATABASE LINK 權限)
CREATE PUBLIC DATABASE LINK "SIDBJ.US.ORACLE.COM" ...;

-- 使用公共 DBLINK 時無需指定擁有者
SELECT * FROM TABLE@DBLINK_NAME;

安全性建議

  • 專用 DBLINK 帳號,僅授 CREATE SESSION + 需查詢表的 SELECT
  • 啟用 SSL/TLS 加密跨庫傳輸 (TCPS 協定)
  • 定期審計 DBA_DB_LINKS、監控 V$DBLINK 異常連線
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved