Oracle里头怎么一步步弄好那个DBLINK,过程啥的都写着呢
- 问答
- 2026-01-08 01:25:52
- 7
你得知道DBLINK是个啥,简单说,它就像是在你的数据库和另一个数据库之间搭的一座桥,有了这座桥,你在你自己的数据库里,就能直接查询、甚至修改远处那个数据库里的数据,感觉就像操作本地表一样方便,你公司在北京有个数据库,在上海也有一个,你想在北京的数据库里查上海的数据,不用跑过去,建个DBLINK就能搞定。
下面就是一步步弄好这个DBLINK的过程,整个过程主要分两大块:一是在目标数据库那边做准备,二是在你自己的源数据库这边创建和测试DBLINK。
第一步:在目标数据库那边做准备
你要连别人的数据库,总不能直接闯进去吧?得先让人家给你开个门,这个“开门”就是在目标数据库上给你创建一个有权限的用户账号。
- 用有高级权限的用户登录目标数据库:比如用SYS或者SYSTEM这种能管事的账号连上目标数据库。
- 创建专用用户:最好不要直接用现成的业务账号,而是专门为这个DBLINK创建一个新用户,这样更安全,权限也好控制,打开SQL Plus或者SQL Developer,执行类似下面的命令:
CREATE USER dblink_user IDENTIFIED BY your_password;这里,dblink_user是你给这个连接起的新用户名,your_password是密码,这个要记牢,后面要用。 - 给用户授权:光创建用户不行,还得给他能干什么事的权力,最起码,得让他能登录,能查询你想让他看的那几张表。
GRANT CREATE SESSION TO dblink_user;-- 这是允许他连接数据库。GRANT SELECT ON schema_name.table_name TO dblink_user;-- 这是允许他查询某张具体的表,把schema_name换成表真正的主人(比如SCOTT),table_name换成实际的表名,如果你想让他能操作更多表,比如还能插入、更新,那就授予相应的权限,如GRANT INSERT, UPDATE ON ...。 如果你想图省事(但不太安全),也可以直接给他一个强大的角色,比如GRANT CONNECT, RESOURCE TO dblink_user;,但生产环境一般不这么干,权限给得越小越好。
好了,目标数据库那边的准备工作就差不多了,你手里有了一个用户名(比如dblink_user)和密码,以及你知道目标数据库的网络地址(比如IP是192.168.1.100,端口是1521,服务名是ORCL),这些信息就像对方家的地址和门牌号,下一步建桥的时候得用。
第二步:在源数据库这边创建DBLINK
现在回到你自己的数据库,开始搭桥。

-
用有权限的用户登录源数据库:创建DBLINK也是个需要权限的活儿,所以你用的账号得有
CREATE DATABASE LINK或者CREATE PUBLIC DATABASE LINK的权限,这个一般得让数据库管理员(DBA)给你授权,如果是你自己测试,可以用有DBA权限的账号。GRANT CREATE DATABASE LINK TO your_source_user;-- 让你的用户有创建私有DBLINK的权力。 如果想让建的桥大家都能用,需要CREATE PUBLIC DATABASE LINK权限,这个权限更大,要谨慎授予。 -
开始创建DBLINK:关键的一步来了,执行创建语句,这里举两个最常见的例子。
-
使用TNS名称方式(推荐):这种方式最常用,也好管理,前提是你在源数据库的
tnsnames.ora这个网络配置文件里,已经配置好了指向目标数据库的连接描述符,比如这个描述符名字叫REMOTE_DB。CREATE DATABASE LINK my_remote_link CONNECT TO dblink_user IDENTIFIED BY your_password USING 'REMOTE_DB';解释一下:my_remote_link:这是你给这座桥起的名字,随便取,好记就行。CONNECT TO dblink_user:告诉数据库,过桥的时候用哪个用户名登录对面。IDENTIFIED BY your_password:就是这个用户对应的密码。USING 'REMOTE_DB':这个REMOTE_DB就是你配置在tnsnames.ora里的那个连接串的名字,数据库会根据这个名字找到目标数据库的详细地址信息。
-
直接写详细地址方式:如果你不想配置TNS名称,也可以直接把详细的网络地址写在创建语句里。
CREATE DATABASE LINK my_remote_link_direct CONNECT TO dblink_user IDENTIFIED BY your_password USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL)))';这一长串就是替代了上面的'REMOTE_DB',看起来复杂,但其实就是把IP、端口、服务名直接写出来了,这种方式容易写错,不如用TNS名称方便。
-
第三步:测试DBLINK好不好用
桥搭好了,得试试能不能走通。
-
简单查询测试:用一个最简单的查询来试,目标数据库有张表叫
employees,主人是hr。SELECT * FROM employees@my_remote_link WHERE ROWNUM = 1;注意看,和本地查询唯一的区别就是表名后面加了@my_remote_link,这个my_remote_link就是你刚才建的DBLINK的名字,这句的意思是“通过名叫my_remote_link的桥,去查那边的employees表”,如果能正常返回一行数据,恭喜你,DBLINK通了! -
排查问题:如果报错了,别慌,常见原因就那几个:
- 用户名或密码错误:检查
CONNECT TO ... IDENTIFIED BY ...这部分写对了没。 - 网络连接不通:检查
USING后面跟的TNS名称或IP地址、端口、服务名是否正确,可以用tnsping REMOTE_DB命令(如果用了TNS方式)测试网络是否能通。 - 权限不足:回头检查目标数据库那个用户,是不是真的被授予了查询那张表的权限。
- 防火墙阻挡:有时候两边数据库的防火墙可能挡住了1521端口的通信,需要找网络管理员确认。
- 用户名或密码错误:检查
一些提醒
- 密码安全:创建DBLINK的语句里密码是明文的,如果有人能查询数据字典视图
*_DB_LINKS,可能会看到密码,为了安全,Oracle支持使用钱包(Wallet)来存储密码,但这配置起来更复杂一些。 - 性能问题:通过DBLINK查数据,毕竟是要走网络的,如果数据量非常大,速度可能会慢,尽量只获取需要的数据,别用
SELECT *。 - 管理:DBLINK不用了,记得删除,命令是
DROP DATABASE LINK my_remote_link;,如果是公共的DBLINK,要加PUBLIC关键字。
就是从零开始,在Oracle数据库里配置一个DBLINK的完整过程,核心就是“那边授权,这边建桥,最后测试”。
本文由革姣丽于2026-01-08发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://haoid.cn/wenda/76524.html
