Oracle不同数据库之间同步处理方案

Oracle不同数据库之间同步处理方案,第1张

背景:项目中遇到的问题,需要二区两台数据库之间同步一些表,以及导出sql文件同步至三区数据库

新建SQL文件生成的目录D:mptmsudataDNLTBDIR。

二区数据库中执行下列语句:

1)新建二区数据库服务器到二区数据库服务器的数据库DATABASE LINK文件。

二区数据库中执行下列语句:

2)二区数据库服务器新建表DNL_TBJL。

二区数据库中执行下列语句:

在二区数据库服务器说新建相关表的触发器,触发器实现的功能是东区2区向西区直接通过DBLINK直接执行;东区2区向东区3区通过生成SQL文件到D:mptmsudataDNLTBDIR目录下;触发器的每次 *** 作都记录到表格DNL_TBJL(id, tables,czlx, SQL, TIME, BAK)内。

通过Windows系统自带的计划任务执行下面批处理实现数据入库

1)三区区数据库服务器新建表DNL_SQLJL。

三区数据库中执行下列语句:

2)三区区数据库服务器新建计划任务定期执行DQ3QRK-ZXWJ.bat批处理。

3)DQ3QRK-ZXWJ.bat批处理调用DQ3QRK-ZXSQL.bat来执行入库 *** 作。

DQ3QRK-ZXWJ.bat语句如下:

DQ3QRK-ZXSQL.bat语句如下:

软件说明

通过etl工具定时将SqlServer指定的表数据同步到oracle数据库

在数据库建立增删改的触发器。触发器将变更放到临时表里。

通过etl工具读取临时表同步给oracle

优点:比较实时

缺点:影响到业务系统,因为需要在业务系统建立触发器

实例说明:

例如在sqlserver有一张用户表(sys_user)需定时同步oracle数据库的用户表,

包括新增、删除、修改同步

给同步的表建三类触发器:

insert触发器:向表中插入数据时被触发;

update触发器:修改表中数据时被触发;

delete触发器:从表中删除数据时被触发。

以sqlserver的用户表举例,

Sqlserver的sys_user表,有两个字段id,name

具体流程:

以新增数据举例

Ø 一、在sqlserver新建触发器trigger_sysuser_insert

if (object_id('trigger_sysuser_insert') is not null)

drop trigger trigger_sysuser_insert

go

create trigger trigger_sysuser_insert

on sys_user --表名

for insert --插入后触发

--instead of insert --插入前触发,使用插入前触发时,不执行默认插入

as

--开始执行逻辑

declare @id int, @name varchar(20)

select @id = id, @name = name from sys_user-------------- inserted 存放了当前插入的值

--select @name,@age

---创建临时表

if not exists (select * from sysobjects where id = object_id('##sys_user_insert')

and OBJECTPROPERTY(id, 'IsUserTable') = 1)

create table ##sys_user_insert

(

id int,

name varchar(32)

)

insert into ##sys_user_insert (id,name) values(@id,@name)

go

在sys_user新增数据时会被触发,将新增的数据加入临时表##sys_user_insert,此时

的临时表 ##sys_user_insert会增加一条记录

Ø 二、配置elt流程

节点1 从临时表读取数据,写入数据流

节点2 从数据流获取数据写入oracle

节点3 从sqlserver的临时表删除已经被同步的记录

Ø 三、建立作业调度

设置调度周期

适用增量数据同步

在要同步的源表里有时间戳字段,每当数据发生新增,时间戳会记录发生变化的时间,etl工具根据时间范围定时同步数据

优点:基本不影响业务系统

缺点:要求源表必须有时间戳这一列,适用增量场景,修改、删除不太适用

定时清空oracle数据源,将sqlserver的数据全盘拷贝到oracle数据源。一般用于数据量不大,实时性要求不高的场景。

优点:基本不影响业务系统,开发、部署都很简单

缺点:效率低

Etl流程

结论

准能现场数据同步,涉及增、删、改的同步,比较适用触发器的方式进行数据同步,但触发器仍会存在失效的情况,若现场有数据质量系统,定期数据稽核,查缺补漏,保证两边数据库的一致性;

做个数据库链接,A表插入数据以后就往B表插入,用触发器实现

在任何实时数据同步和复制中,需要考虑如下几个关键问题:

事务一致性:在复制目标端需要按照源端相同的事务环境进行提交,确保目标上数据一致性。

检查点机制:在抽取和负责时都需要记录检查点位置,确保网络故障或GG本身故障下仍然能够完整复制。

可靠数据传输:需要保证数据传输的完整性,请求和应答,同时提供数据加密和传输过程中的压缩。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10034806.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存