一、什么是dblink(Database Link)
数据库链接顾名思义就是数据库的链接 [1] ,就像电话线一样,是一个通道,当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。
二、如何实现
下面介绍下步骤
第一步:配置环境
在tnsnames.ora中配置数据库别名:
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 111.222.1.333)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
CQRBC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 111.222.1.345)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
ORCL是安装orcal数据库时自动生成的配置,现在需要的是在另外配置上一个数据库别名,也就是你需要跨库访问的那个数据库,CQRBC 别名可以随意取,HOST,PORT分别数据库对应的ip和端口,SERVICE_NAME 配置的就是实例名
在修改完配置文件后,最好重启下本地oracl服务
第二步:赋予权限
在创建database link之前,需要判断登陆的用户是否具备创建database link 的权限,执行以下的语句(用自己创建的用户登录):
-- 查看用户是否具备创建database link 权限
select * from user_sys_privs where privilege like upper('%DATABASE LINK%');
如果查询有返回行,则表示具备创建database link权限,否则,则需要使用sys登陆为你自己的用户赋予创建权限:
-- 给test用户授予创建dblink的权限
grant create public database link to test;
此时,再执行上面查看是否具备权限的sql语句,会发现有返回行,表示,test这个用户已经具备创建database link的权限
第三步;创建database link
创建方式有两种:图形化创建,sql语句创建
- 通过pl/sql developer图形化创建
- 通过sql语句创建
create public database link TESTLINK2 connect to 用户名 identified by 密码 USING 'CQRBC'
用户名,密码输入你要跨库的数据库的用户名和密码,USING后面使用你开始在配置文件里面配置的数据库别名
第四步:操作
查询:
select * from thirdtable@TESTLINK2;
thirdtable为你自己需要查询的表名,TESTLINK2为你自己创建的连接名
如果觉得每次在操作表时都要在表名后面加上@TESTLINK2麻烦,可以创建同义词
create synonym testcom FOR thirdtable@TESTLINK2;
然后使用
select * from testcom;
和
select * from thirdtable@TESTLINK2;
得到的是一样的结果
这时你就可以在你自己数据库查询到你要跨库数据库的表的信息了
在我自己使用的过程中碰到如下错误
是因为配置文件没有配置好,在配置CQRBC别名时,前面还有空格