oracle dblink 复制表,利用oracle快照dblink解决数据库表同步问题

本实例已完全通过测试,单向,双向同步都可使用.

--名词说明:源——被同步的数据库

目的——要同步到的数据库

前6步必须执行,第6以后是一些辅助信息.

--1、在目的数据库上,创建dblink

drop public database link dblink_orc92_182;

Create public DATABASE LINK dblink_orc92_182 CONNECT TO bst114 IDENTIFIED BY password USING 'orc92_192.168.254.111';

--dblink_orc92_182 是dblink_name

--bst114 是 username

--password 是 password

--'orc92_192.168.254.111' 是远程数据库名

--2、在源和目的数据库上创建要同步的表(最好有主键约束,快照才可以快速刷新)

drop table test_user;

create table test_user(id number(10) primary key,name varchar2(12),age number(3));

--3、在目的数据库上,测试dblink

select * from test_user@dblink_orc92_182;    //查询的是源数据库的表

select * from test_user;

--4、在源数据库上,创建要同步表的快照日志

Create snapshot log on test_user;

--5、创建快照,在目的数据库上创建快照

Create snapshot sn_test_user as select * from test_user@dblink_orc92_182;

--6、设置快照刷新时间(只能选择一种刷新方式,推荐使用快速刷新,这样才可以用触发器双向同步)

快速刷新

Alter snapshot sn_test_user refresh fast Start with sysdate next sysdate with primary key;

--oracle马上自动快速刷新,以后不停的刷新,只能在测试时使用.真实项目要正确权衡刷新时间.

完全刷新

Alter snapshot sn_test_user refresh complete Start with sysdate+30/24*60*60 next sysdate+30/24*60*60;

--oracle自动在30秒后进行第一次完全刷新,以后每隔30秒完全刷新一次

--7、手动刷新快照,在没有自动刷新的情况下,可以手动刷新快照.

手动刷新方式1

begin

dbms_refresh.refresh('sn_test_user');

end;

手动刷新方式2

EXEC DBMS_SNAPSHOT.REFRESH('sn_test_user','F'); //第一个参数是快照名,第二个参数 F 是快速刷新 C 是完全刷新.

--8.修改会话时间格式

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

--9.查看快照最后一次刷新时间

SELECT NAME,LAST_REFRESH from ALL_SNAPSHOT_REFRESH_TIMES;

--10.查看快照下次执行时间

select last_date,ne

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值