Oracle dblink介紹
Oracle dblink介紹
官網:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm
當用戶要跨本地資料庫訪問另外一個數據庫表中的資料時,本地資料庫中必須建立了遠端資料庫的 DBLINK, 通過 DBLINK 可以像訪問本地資料庫一樣訪問遠端資料庫表中的資料。 其實, DBLINK 和資料庫中的 VIEW 差不多,建立 DBLINK 的時候需要知道待讀取資料庫的
在建立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
可以看出,在資料庫中DBLINK有3種許可權:CREATE DATABASE LINK(所建立的DBLINK只能是建立者自己使用,別的使用者不能使用)、CREATE PUBLIC DATABASE LINK(PUBLIC表示所建立的DBLINK所有使用者都可以使用)與DROP PUBLIC DATABASE LINK(刪除公共的DBLINK)。可以使用如下授權語句給使用者SCOTT授予CREATE PUBLIC DATABASE LINK和DROP 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_NAMES為TRUE時,要求資料庫連結名稱跟遠端資料庫名稱一樣。資料庫全域性名稱可以用以下命令查出:
SELECT * FROM GLOBAL_NAME;
用以下語句來修改引數值:
ALTER SYSTEM SET GLOBAL_NAMES=FALSE/TRUE;
當資料庫引數GLOBAL_NAMES為FALSE時,就不要求資料庫連結名稱跟遠端資料庫名稱一樣。