1. 程式人生 > >Oracle dblink介紹

Oracle dblink介紹

Oracle dblink介紹




官網:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm




當用戶要跨本地資料庫訪問另外一個數據庫表中的資料時,本地資料庫中必須建立了遠端資料庫的 DBLINK, 通過 DBLINK 可以像訪問本地資料庫一樣訪問遠端資料庫表中的資料。 其實, DBLINK 和資料庫中的 VIEW 差不多,建立 DBLINK 的時候需要知道待讀取資料庫的
IP 地址、 ORACLE_SID 以及資料庫使用者名稱和密碼。


建立DBLINK之前,普通使用者必須具有相關的許可權才能建立DBLINK,SYS使用者登入到本地資料庫可以看到相關的許可權

SELECT * FROM USER_SYS_PRIVS T WHERE T.PRIVILEGE LIKE UPPER('%LINK%');

[email protected]> SELECT * FROM USER_SYS_PRIVS T WHERE T.PRIVILEGE LIKE UPPER('%LINK%');




USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
SYS                            CREATE DATABASE LINK                     NO

SYS                            DROP PUBLIC DATABASE LINK                NO
SYS                            CREATE PUBLIC DATABASE LINK              NO
 

可以看出,在資料庫中DBLINK3種許可權:CREATE DATABASE LINK(所建立的DBLINK只能是建立者自己使用,別的使用者不能使用)、CREATE PUBLIC DATABASE LINKPUBLIC表示所建立的DBLINK所有使用者都可以使用)與DROP PUBLIC DATABASE LINK(刪除公共的DBLINK。可以使用如下授權語句給使用者SCOTT授予CREATE PUBLIC DATABASE LINKDROP PUBLIC DATABASE LINK兩個許可權

GRANT CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK TO SCOTT;

查詢資料庫的DBLINK可以使用SQL語句:SELECT * FROM DBA_DB_LINKS

建立DBLINK一般有兩種方式,第一種方式是在本地資料庫tnsnames.ora檔案中配置了要遠端訪問的資料庫TNS,例如這裡配置了TNS_BJLHR,然後建立公共DBLINK

CREATE PUBLIC DATABASE LINK

DBL_BJLHR CONNECT TO SCOTT IDENTIFIED BY TIGER USING 'TNS_BJLHR';

其中,DBL_BJLHR是建立的DBLINK名字,SCOTT/TIGER是登入到遠端資料庫的使用者名/密碼然後在本地資料庫中通過DBLINK訪問遠端資料庫“TNS_BJLHR”SCOTT.TB_TEST,SQL語句如下所示

SELECT * FROM [email protected]_BJLHR;

建立DBLINK的第二種方式,是在本地資料庫tnsnames.ora檔案中沒有配置要訪問的遠端資料庫的時候,而直接將相關的內容寫到DBLINK的配置中,如下所示:

CREATE DATABASE LINK DBL_BJLHR

CONNECT TO SCOTT IDENTIFIED BY TIGER

USING '(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.10)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = BJLHR)

)

)';

其中,HOST為資料庫的IP地址,SERVICE_NAME資料庫的SID,其實兩種方法配置DBLINK是差不多的,第二種方法不受本地服務的影響。

另外,當資料庫引數GLOBAL_NAMESTRUE時,要求資料庫連結名稱跟遠端資料庫名稱一樣資料庫全域性名稱可以用以下命令查出

SELECT * FROM GLOBAL_NAME;

用以下語句來修改引數值:

ALTER SYSTEM SET GLOBAL_NAMES=FALSE/TRUE;

當資料庫引數GLOBAL_NAMESFALSE時,就不要求資料庫連結名稱跟遠端資料庫名稱一樣。