通过DBLink连接实现Oracle数据库同步,完美解决了小组长头疼已久的问题,记录一下

文编|JavaBuild

大家好呀,我是JavaBuild,以后可以喊我鸟哥,嘿嘿!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加油学习,厚积薄发!

场景介绍:

最近,系统拆分后发生了一件令人困扰的事情,我们由母系统中的一个数据采集报表汇总的模块独立出来成为一个独立的系统后,母系统变成了我们的上游系统,主要作用就是供数,但考虑到很多报表都是实时出表的,系统之间数据传输就出现了问题。

公司内部原有方案有两种:

  1. 可以通过ETL作业,通过一定的SQL逻辑,从数据源抽数到目的库中,这个类似于navicat所支持的数据传输功能,但这种弊端是千万级数据表的插入非常慢,性能太差。

  2. 通过数据中台(数据仓库)将源数据库索取到,我们再从数据仓库进行取数,由于数据仓库都是每天通过定时批量去索取各系统数据的,所以这种方案最大的弊端就是时效性不够,比如在出报表的过程中,有些数据不对,需要调整数据源数据,这时候很难同时在我们下游系统取到实时同步的数据。

Oracle环境下通过DBLink+同义词(synonyms)的方式,可以完美解决这种问题场景

DBLink(DabaBaseLink),一种跨数据库连接技术,可以实现本地数据库实时操作(增删改查)相关联数据库,数据表、视图、函数等均可。

操作步骤:

**1,dblink创建,**sys用户默认有创建dblink的权限,若无权限,可通过grant命令进行赋权操作

Linux环境下的参考命令如下:

sql 复制代码
-- 切换用户至oracle
su - oracle
-- sys用户登录sqlplus
sqlplus / as sysdba
-- 查看当前用户下所有的db_links
select * from ALL_DB_LINKS;
-- 与指定ip的数据库建议dblink连接
create public database link test_lk(连接名,自定义) connect to testuser(想连接的数据库用户名) identified
by password(密码) using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.11.121.88(想要连接的数据库ip)
)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl(实例名))))';
-- 创建完后可通过查询语句看一下,有没有创建成功,下面语句若可以查出结果,即创建成功。
select * from table(想要连接的数据库下表名)@test_lk(上面创建的连接名)   
-- 删除dblink
drop public database link linkname(连接名);

很多企业都要求所有脚本都不可以出现明文密码,所以这里再提供一种shell脚本来创建dblink连接

bash 复制代码
#!/bin/bash
pwd=`echo base64加密后密码|base64 -d`

sqlplus / as sysdba << !
create public database link test_lk connect to testuser identified
by password using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.11.121.88)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))';
exit
!
echo 'create success!!!'

网上有很多提供dblink的操作,但我们不可能在我们的代码中使用上游系统数据库表时,还要在后面加个@连接名,这对现有代码的改动量太大了,可读性也很差,所以这时候我们可以再加上一步操作,那就是建立同义词!

2,同义词建立

sql 复制代码
grant create any synonym to 用户名
create or replace synonym tablename for tablename@test_lk 

通过以上两步操作就实现了,在不该表当先系统代码中表名的情况下,直接读取上游系统数据库数据啦。

相关推荐
yjb.gz20 分钟前
Shell实现数据库巡检
数据库
福大大架构师每日一题40 分钟前
redis 8.4.1 正式发布:安全升级、性能强化与多模块重大修复详解
数据库·redis·安全
魑-魅-魍-魉1 小时前
金仓数据库(KingbaseES)Windows 安装避坑指南:从 Connection Refused 到服务启动的完整实战记录
数据库·金仓
chlk1232 小时前
聊聊索引:为何 B + 树能撑起数据库的半壁江山?
数据库·mysql
宁酱醇2 小时前
ORACLE_建表+增改查+删
数据库·oracle
爬山算法2 小时前
MongoDB(8)什么是聚合(Aggregation)?
数据库·mongodb
Tinyundg2 小时前
CentOS安装Oracle 19C 数据库
数据库·oracle·centos
IT_Octopus3 小时前
AI 工程 生产级别向量数据库Milvus2.6.10性能测试报告
数据库·人工智能·milvus
JosieBook3 小时前
【数据库】时序数据库选型指南:从大数据角度解析IoTDB的优势
大数据·数据库·时序数据库
码农学院3 小时前
查找sql server 2014存储过程是否包含某个关键字
数据库