通过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 

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

相关推荐
云和恩墨几秒前
告别“头痛医头”:SQL性能优化的闭环构建,从被动修复到主动掌控
数据库·oracle
独自归家的兔7 分钟前
通义千问3-VL-Plus - 界面交互(坐标改进)
数据库·microsoft·交互
p&f°16 分钟前
PostgreSQL 执行计划控制参数详解
数据库·postgresql·oracle
航Hang*16 分钟前
第3章:复习篇——第1节:创建和管理数据库
开发语言·数据库·笔记·sql·sqlserver
铉铉这波能秀19 分钟前
正则表达式从入门到精通(字符串模式匹配)
java·数据库·python·sql·正则表达式·模式匹配·表格处理
sc.溯琛21 分钟前
MySQL 进阶实验:数据库与数据表管理完全指南
数据库·oracle
好记忆不如烂笔头abc23 分钟前
oracle迁移到sqlserver的注意点
数据库·oracle·sqlserver
YJlio26 分钟前
ZoomIt 学习笔记(11.11):休息计时器与演讲节奏控制——倒计时、番茄钟与现场掌控力
数据库·笔记·学习
sc.溯琛40 分钟前
MySQL 性能优化核心:索引创建与管理实战指南
数据库·mysql·性能优化
锋君1 小时前
Orcale数据库在Asp.Net Core环境下使用EF Core 生成实体
数据库·后端·oracle·asp.net