Database Link(DBLink)實現Oracle數據庫間的分布式查詢。本文系統梳理私有/公共鏈接創建、同義詞簡化訪問、常見錯誤排查及最佳實踐。
SELECT * FROM MyTableSpace.MyTable@MyDB;
僅創建者可用:
CREATE DATABASE LINK fmydb
CONNECT TO lpuser IDENTIFIED BY lpuser1
USING 'lp10.119.40.7';
DROP DATABASE LINK fmydb; -- 注意:無PUBLIC關鍵字
所有用戶可用(需系統權限):
CREATE PUBLIC DATABASE LINK fmydb
CONNECT TO sys IDENTIFIED BY sys
USING 'lp10.119.40.7';
DROP PUBLIC DATABASE LINK fmydb; -- 必須帶PUBLIC
CREATE PUBLIC DATABASE LINK fwq12
CONNECT TO fzept IDENTIFIED BY neu
USING 'fjept'; -- fjept為配置好的服務名
CREATE DATABASE LINK linkfwq
CONNECT TO fzept IDENTIFIED BY neu
USING '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fjept)
)
)';
創建同義詞隱藏@dblink語法:
CREATE SYNONYM bJScottemp FOR emp@beijing;
-- 之後可直接查詢
SELECT * FROM bJScottemp;
原因:GLOBAL_NAMES參數設置影響鏈接名解析。
解決步驟:
CREATE PUBLIC DATABASE LINK ABC
CONNECT TO SA IDENTIFIED BY PASSWORD
USING '(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.100)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=AAA))
)';
SELECT * FROM test@ABC;SHOW PARAMETER global_names;
SELECT * FROM global_name;
SELECT * FROM test@ABC.US.ORACLE.COM;UPDATE global_name SET global_name = 'LOCALSR.US.ORACLE.COM'
WHERE global_name = 'LOCALSR';
-- 重啟實例生效
Database Link是Oracle分布式查詢的核心機制。掌握私有/公共鏈接區別、兩種創建方式、同義詞應用、GLOBAL_NAMES參數影響及常見錯誤排查,能構建穩定安全的跨庫訪問架構。生產環境建議統一使用服務名方式,配合專用賬號與網絡加密。