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

Oracle Database Link 與同義詞實戰:跨庫訪問配置與 ORA-12154 根治

     編輯:Oracle 資料庫基礎

業務場景:客戶核心資料不出庫,我方需唯讀查詢

解決方案:在我方資料庫建立 Database Link (DB Link) 指向客戶庫,再建立 同義詞 映射遠端視圖/表,應用端如同操作本地物件。

三步走部署流程

1. 配置本地 TNS 服務名

編輯 $ORACLE_HOME/network/admin/tnsnames.ora(必須在資料庫伺服器主機上操作,非客戶端工具機):

LIMSTQ =
  (DESCRIPTION =
    (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.107.6.15)(PORT = 1521)))
    (CONNECT_DATA = (SERVICE_NAME = VGSM))
  )

注意:LIMSTQ 前不得有空格。

2. 建立 Database Link

檢查 GLOBAL_NAMES 參數:

SHOW PARAMETER GLOBAL_NAMES;
-- 若 TRUE,DB Link 名稱必須等於遠端 DB_NAME/GLOBAL_NAME
-- 若 FALSE(本例),可自訂名稱

建立語法:

CREATE DATABASE LINK limstq.us.oracle.com
  CONNECT TO jlgl IDENTIFIED BY jlgl
  USING 'LIMSTQ';

驗證:SELECT * FROM dual@limstq.us.oracle.com;

3. 建立同義詞(可選再包一層 View)

-- 直接同義詞
CREATE SYNONYM jl_gljs_tb_lims FOR jlgl_lims@limstq.us.oracle.com;

-- 建議:建立 View 封裝,應用端只依賴 View
CREATE OR REPLACE VIEW jl_gljs_limstq_vw AS
SELECT * FROM jl_gljs_tb_lims;

應用端查詢:SELECT * FROM jl_gljs_limstq_vw;

核心坑點:ORA-12154 "無法解析連接標識符"

成因 90% 以上:TNS 服務名配置在客戶端工具機(如 PL/SQL Developer 安裝電腦)而非資料庫伺服器主機的 tnsnames.ora 中。

根治步驟

  1. 遠端登入資料庫伺服器主機(SSH/RDP)。
  2. 定位主機 $ORACLE_HOME/network/admin/tnsnames.ora。
  3. 追加服務名條目(如前所示)。
  4. 在伺服器上用 tnsping LIMSTQ 驗證連通性。
  5. 再於應用端測試 DB Link/同義詞。

進階提示

  • GLOBAL_NAMES=TRUE 環境下,DB Link 名稱必須與遠端 GLOBAL_NAME 一致,否則報 ORA-02085。
  • 同義詞屬於 PRIVATE(預設)或 PUBLIC(需 CREATE PUBLIC SYNONYM 權限),視授權策略決定。
  • 遠端物件若為視圖,同義詞同樣適用;若遠端表結構變更,本地同義詞無需修改,View 層可吸收變化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved