Oracle Database Link(DB Link)是實現分布式數據庫查詢與數據同步的核心組件。本文系統講解從網絡配置、DB Link 創建、同義詞簡化訪問,到日常查看與刪除的完整生命周期管理,並提供生產環境常用的 TNS 連接描述符寫法。
在本地 $ORACLE_HOME/network/admin/tnsnames.ora 中定義指向遠程數據庫的服務名,該服務名即為後續創建 DB Link 時 USING 子句引用的字符串。
REMOTE_ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.10.201)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)
CREATE [PUBLIC] DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY password
USING 'tns_service_name';
PUBLIC:所有用戶可用;省略則為私有,僅創建者可見。remote_user:遠程數據庫賬號,權限決定可訪問對象範圍。-- 創建公共 DB Link,連接遠程 scott 用戶
CREATE PUBLIC DATABASE LINK beijing
CONNECT TO scott IDENTIFIED BY tiger
USING 'REMOTE_ORCL';
SELECT * FROM emp@beijing;
CREATE SYNONYM bj_scott_emp FOR emp@beijing;
-- 之後可直接使用
SELECT * FROM bj_scott_emp;
同義詞讓分布式查詢對應用層透明,便於後續遷移或切換 DB Link 時無需修改業務 SQL。
| 操作 | SQL 示例 |
|---|---|
| 查看所有 DB Link(需 DBA 權限) | SELECT owner, db_link FROM dba_db_links; |
| 查看當前用戶 DB Link | SELECT * FROM user_db_links; |
| 刪除公共 DB Link | DROP PUBLIC DATABASE LINK beijing; |
| 刪除私有 DB Link | DROP DATABASE LINK beijing; |
在無法修改本地 TNS 配置時,可直接在 USING 中寫入完整描述符:
CREATE PUBLIC DATABASE LINK dbl_orcl
CONNECT TO province IDENTIFIED BY province_pwd
USING '(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.142.10.201)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=ORCL))
)';
schema_name.object_name@dblink_name
-- 例:查詢遠程 province 用戶下的 tj_ryxx 表
SELECT * FROM province.tj_ryxx@dbl_orcl;
tnsnames.ora 或 USING 字符串拼寫。distributed_lock_timeout 參數。PUBLIC DB Link + 同義詞,統一管理入口。SELECT 或特定表 DML 權限。V$DBLINK 連接數,防止連接泄漏導致遠程會話堆積。掌握 Database Link 的全生命周期管理,是構建穩健 Oracle 分布式架構的基礎技能。