Oracle创建DBLINK 实现跨数据库查询

在分布式架构中,往往会经常遇到跨数据库查询的场景,即两个有关联的表不在一个数据库中。
一般的解决方案有:

分别查询两张表的数据,业务层进行数据合并处理
弊端:麻烦,复杂查询条件无法实现分页查询
优点:实时保证数据一致性
定时job,定时查询两张表数据或调用接口获取两张表数据,合并保存到一张表中或者MongoDB等数据库中,然后从这张表或MongoDB中进行查询
弊端:无法保证数据强一致性,适用于最终一致性的场景,定时job出错无法保证数据同步成功
优点:能实现复杂条件的分页查询
第三种就是我们要讲的创建dblink实现跨库查询,创建本地数据库对远端数据库的dblink后,就可以像操作本地数据库一样操作远端数据库,这是Oracle给我们提供一个功能,让我们的跨库查询变得非常简单便捷。
优点:就像操作本地数据库一样,支持分页,保证查结果数据强一致性
缺点:微服务中,每个服务返回的数据都是经过处理的,跨数据库查询出来需要对数据重新处理

使用dblink
1.查看用户是否有创建dblink的权限(一般管理员用户SYS都有权限)

select * from user_sys_privs t where t.privilege like upper('%link%');
  1. 如果创建全局 dblink,必须使用 systm 或 sys 用户,在 database 前加 public

    CREATE PUBLIC DATABASE LINK 数据库链名称 CONNECT TO 登录用户名 IDENTIFIED BY 密码 USING '(DESCRIPTION =

     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 对方Oracle服务器的IP地址)(PORT = 端口号))
     )
     (CONNECT_DATA =(SERVICE_NAME = 对方Oracle服务器服务名) )

注:数据库链名称指添加到本地Oracle数据库控制台(Oracle Enterprise Manager Console)树节点的服务名

要查询对方数据库的表TableName语句如下:
SELECT 字段名 FROM TableName@数据链名称;
删除DBLINK

DROP DATABASE LINK [name];  

DROP PUBLIC DATABASE LINK [name];  

使用dblink进行查询
SELECT * FROM 远程数据库表名@dblink名;

select * from user@dblink;

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余十步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值