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

Oracle DBLink 創建全流程實戰:從網絡配置到存儲過程跨庫查詢

     編輯:Oracle 資料庫基礎

場景設定

  • 北京總部庫:SID=SIDBJ,用戶 userbj/bj123,IP 192.168.1.101,GLOBAL_NAME=SIDBJ.US.ORACLE.COM
  • 新疆分公司庫:SID=SIDXJ,用戶 userxj/xj123,IP 192.168.1.100 (本地)
  • 目標:新疆庫通過 DBLink 以 userbj 身份查詢北京庫表 BJ_TEST

前置條件

  1. 雙雙關閉 Windows 防火牆,確保 1521 端口雙向通。
  2. 確認 GLOBAL_NAMES=TRUE (默認),DBLink 名**必須等於**遠程 GLOBAL_NAME。
  3. 檢查 V$OPTION 確認雙方支持 Advanced Replication (若需雙向復制)。

步驟 1:本地配置 TNS 服務名

新疆庫 tnsnames.ora 添加:

tns_xj_to_bj =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
    (CONNECT_DATA = (SID = SIDBJ))
  )

步驟 2:北京庫創建測試表

CREATE TABLE userbj.bj_test (stu_id NUMBER, stu_name VARCHAR2(100));
INSERT INTO userbj.bj_test VALUES (1, '鐘德榮');
COMMIT;

步驟 3:新疆庫創建 DBLink

CREATE DATABASE LINK "SIDBJ.US.ORACLE.COM"
  CONNECT TO userbj IDENTIFIED BY bj123
  USING 'tns_xj_to_bj';

步驟 4:驗證連通性

SELECT * FROM dual@"SIDBJ.US.ORACLE.COM";  -- 返回 X 表示成功
SELECT * FROM userbj.bj_test@"SIDBJ.US.ORACLE.COM";  -- 查詢遠程表

步驟 5:GLOBAL_NAMES=FALSE 兼容性測試

ALTER SYSTEM SET global_names=FALSE SCOPE=BOTH;
CREATE DATABASE LINK a CONNECT TO userbj IDENTIFIED BY bj123 USING 'tns_xj_to_bj';
SELECT * FROM userbj.bj_test@a;  -- 現在可用任意名稱

步驟 6:存儲過程中使用 DBLink (動態游標)

CREATE OR REPLACE PROCEDURE test_cur IS
  v_sql   VARCHAR2(1000) := 'SELECT stu_name FROM userbj.bj_test@a';
  v_name  VARCHAR2(100);
  TYPE t_cur IS REF CURSOR;
  c_cur   t_cur;
BEGIN
  OPEN c_cur FOR v_sql;
  LOOP
    FETCH c_cur INTO v_name;
    EXIT WHEN c_cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(v_name);
  END LOOP;
  CLOSE c_cur;
END;
/
EXEC test_cur;  -- 輸出: 鐘德榮

常見報錯與對策

錯誤原因解決
ORA-12154 / TNS:could not resolve服務名拼寫錯/tnsnames.ora未生效檢查 tnsping、sqlnet.ora NAMES.DIRECTORY_PATH
ORA-12514 / Listener does not know SID遠程 listener.ora 缺少 SID_LIST遠程配置 SID_LIST_LISTENER 包含目標 SID
ORA-02019 / Connection description for remote database not foundDBLink USING 字符串與本地 tnsnames 不匹配核對 USING 服務名
ORA-01017 / Invalid username/password遠程用戶/密碼錯誤或大小寫 (11g+ 區分大小寫)確認遠程認證信息

最佳實踐清單

  • DBLink 名統一使用遠程 GLOBAL_NAME,避免 GLOBAL_NAMES=TRUE 限制。
  • 專用 DBLink 用戶,最小權限 (僅 CREATE SESSION + 查詢對象權限)。
  • 關鍵業務啟用 TRANSPARENT GATEWAY 或 DG4ODBC 異構連接。
  • 監控 DBA_DB_LINKS、V$DBLINK 定期巡檢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved