【笔记】Oracle不同数据库之间的表级别同步

工具:Oracle官方工具sqldeveloper

题目描述:

        这两天在搞两个数据库的数据推送同步,当时想到有两个解决方案,在最开始的mapper层再加个数据源,数据插入时两个数据库一起写入,但是被否了,只好用DBlink+定时任务job执行存储过程的方式。

实操解决:

        1、任务

首先我有两个数据库 clgl 和 jjh 如图,任务是将 jjh 的TEST01表同步推送到 clgl 的同名 TEST01 表中:

【笔记】Oracle不同数据库之间的表级别同步_第1张图片

        2、 DBlink

任务确定之后,我们开始着手准备两个数据库之间的跨库连接,这里我们使用DBlink的方式。

因为是jjh到clgl,所以我们在clgl表里创建DBlink,连接名为:TESTLINK,代码如下:

--创建一个公共的数据库连接
create public database link TESTLINK   --连接的名字
connect to jjh          --连接的数据库名 jjh
identified by "123456"  --连接的数据库密码 jjh的密码
using '192.168.10.110:1521/orcl';   --连接的地址 悬停在jjh上即可显示

【笔记】Oracle不同数据库之间的表级别同步_第2张图片

执行成功:

【笔记】Oracle不同数据库之间的表级别同步_第3张图片

我们可以在左侧列表看到这个DBlink:

【笔记】Oracle不同数据库之间的表级别同步_第4张图片

        3、 创建同步的存储过程  存储过程名为TestProc

代码如下:

select * from TEST01;
--上边的查询不用复制


--进行表级别的同步  创建存储过程
create or replace procedure TestProc  --存储过程名为TestProc  
as
begin
delete from TEST01;    --先删除clgl中的TEST01表 
insert into TEST01(ID,--再insert  jjh库中的TEST01表
NAME,
SAL) select ID,
NAME,
SAL from TEST01@TESTLINK;   --@前边是clgl的TEST01表名   @后边是DBlink名 TESTLINK
dbms_output.put_line('XYB_JZJXSQ_SYQK同步成功!');  --打印
commit;
end;

 选中存储过程部分开始执行得到:

【笔记】Oracle不同数据库之间的表级别同步_第5张图片

         4、创建任务job

--创建任务JOB  testJob

 variable job01 number;  --任务名为job01 
 
 
 --两段分开执行
begin
dbms_job.submit(job => :job01,   --任务名
    what => 'TestProc;',   --执行的存储过程名
    next_date => to_date('3-11-2022 01:00:00', 'dd-mm-yyyy hh24:mi:ss'),--执行开始时间为11.3的凌晨1点  
    interval => 'sysdate+12/24');           --执行间隔为12个小时  即下次执行时间为11.3的中午1点
commit;
end;

 执行:     

【笔记】Oracle不同数据库之间的表级别同步_第6张图片

【笔记】Oracle不同数据库之间的表级别同步_第7张图片

这里时间搞错了,当时时间为10::39,而写的凌晨1点早就过了,所以会自动间隔12小时到3号晚上的22:39才会执行。

【笔记】Oracle不同数据库之间的表级别同步_第8张图片

        5、删除和修改

目前笔者都是直接通过SQLdeveloper工具进行直接点点点操作的,方便又好使。

笔记总结:

遇到这种纯经验性的需求一定要多做笔记。

参考链接:

https://blog.csdn.net/UniRong/article/details/78671917

http://ttps://segmentfault.com/a/1190000023044236

http:// http://t.csdn.cn/n4lFs

http://t.csdn.cn/78OMl

你可能感兴趣的:(笔记,数据库,oracle,sql)