當用戶要跨本地數據庫,訪問另一個數據庫表中的數據時,本地數據庫中必須建立了遠程數據庫的dblink,經過dblink本地數據庫能夠像訪問本地數據庫同樣訪問遠程數據庫表中的數據。下面講介紹如何在本地數據庫中建立dblink.sql
建立dblink通常有兩種方式,不過在建立dblink以前用戶必須有建立dblink的權限。想知道有關dblink的權限,以sys用戶登陸到本地數據庫:數據庫
select * from user_sys_privs toracle
where t.privilege like upper('%link%');ide
1 SYS CREATE DATABASE LINK NO測試
2 SYS DROP PUBLIC DATABASE LINK NOget
3 SYS CREATE PUBLIC DATABASE LINK NOtest
能夠看出在數據庫中dblink有三種權限CREATE DATABASE LINK(所建立的dblink只能是建立者能使用,別的用戶使用不了),CREATE PUBLIC DATABASE LINK(public表示所建立的dblink全部用戶均可以使用),DROP PUBLIC DATABASE LINK。登錄
在sys用戶下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK權限授予給你的用戶配置
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;List
而後以scott用戶登陸本地數據庫
1.建立dblink的第一種方式,是在本地數據庫tnsnames.ora文件中配置了要遠程訪問的數據庫。
create public database link
to_bylw connect to scott identified by tiger using 'bylw';
其中to_bylw是你建立的dblink名字,bylw是遠程數據庫的實例名,scott/tiger是登陸到遠程數據庫的用戶/密碼。而後在本地數據庫中經過dblink訪問遠程數據庫'bylw'中scott.tb_test表,sql語句以下所示
select * from scott.tb_test@to_bylw;
2.建立dblink的第二種方式,是在本地數據庫tnsnames.ora文件中沒有配置要訪問的遠程數據庫,
create database link to_test
connect to scott identified by tiger
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bylw)
)
)';
第二種是把第一種配置在tnsnames.ora文件中的信息,直接放在建立dblink語句後面。第一種狀況tnsnames.ora文件中信息以下:
bylw =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = bylw)
)
)
在實際應用中,使用第二種方式比多,同時結合oracle的同義詞進行數據庫的處理
首先建立db like:
create database link db
connect to user1 identified by user1
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.5)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = devdb)
)
)';
測試: select * from a@db
建立同義詞: create public synonym a for a@db
測試:select * from a