Oracle Database Link(DBLink)是實現資料庫間透明連線的關鍵功能,允許本地資料庫存取遠端資料庫的物件,如同操作本地物件般直觀。本文透過完整實戰範例,示範從權限設定、DBLink 建立到跨資料庫查詢與遠端 Package/Function 呼叫的完整流程。
首先以 SYSDBA 身分登入,授予建立 Public DBLink 與存取 DBMS_FLASHBACK 套件的權限:
sqlplus "/ as sysdba"
SQL> GRANT CREATE PUBLIC DATABASE LINK TO eygle;
Grant succeeded.
SQL> GRANT ALL ON DBMS_FLASHBACK TO eygle;
Grant succeeded.
切換至應用用戶,建立指向遠端資料庫的 Public DBLink:
SQL> CONNECT eygle/eygle
Connected.
SQL> CREATE PUBLIC DATABASE LINK hsbill USING 'hsbill';
Database link created.
SQL> SELECT db_link FROM dba_db_links;
DB_LINK
---------------------------------------------------
HSBILL
簡單測試連線:
SQL> SELECT * FROM dual@hsbill;
D
-
X
SET SERVEROUTPUT ON
SET FEEDBACK OFF
DECLARE
r_gname VARCHAR2(40);
l_gname VARCHAR2(40);
BEGIN
-- 查詢遠端資料庫全域名稱
EXECUTE IMMEDIATE 'SELECT GLOBAL_NAME FROM GLOBAL_NAME@hsbill' INTO r_gname;
DBMS_OUTPUT.PUT_LINE('gname of remote:' || r_gname);
-- 查詢本地資料庫全域名稱
SELECT GLOBAL_NAME INTO l_gname FROM GLOBAL_NAME;
DBMS_OUTPUT.PUT_LINE('gname of local:' || l_gname);
END;
/
-- 輸出結果:
gname of remote:HSBILL.HURRAY.COM.CN
gname of local:EYGLE
DECLARE
r_scn NUMBER;
l_scn NUMBER;
BEGIN
-- 呼叫遠端 DBMS_FLASHBACK 取得系統變更號
EXECUTE IMMEDIATE 'SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER@hsbill FROM DUAL' INTO r_scn;
DBMS_OUTPUT.PUT_LINE('scn of remote:' || r_scn);
END;
/
-- 輸出結果:
scn of remote:18992092687
| 技術點 | 說明 |
|---|---|
| CREATE PUBLIC DATABASE LINK | 建立所有用戶均可使用的資料庫連結 |
| @dblink 語法 | 在表名後附加 @dblink 即可存取遠端物件 |
| EXECUTE IMMEDIATE | 動態 SQL 執行遠端查詢,支援 PL/SQL 變數綁定 |
| DBMS_FLASHBACK@dblink | 跨資料庫呼叫遠端套件函數 |
CREATE PUBLIC DATABASE LINK 時,確保 TNSNAMES.ORA 已正確配置遠端服務名稱CREATE DATABASE LINK(私有連結)而非 Public,強化安全性DRIVING_SITE 提示優化執行計畫DBA_DB_LINKS 與 V$DBLINK 確認連結狀態結語:DBLink 是 Oracle 分散式資料庫架構的基石,掌握其建立、查詢與遠端程式呼叫技巧,能大幅簡化跨系統資料整合的開發複雜度。