您的位置:首页 > 数据库

利用快照实现两地数据库的同步

2006-11-08 12:41 267 查看
这两天帮个客户改进同步两个数据库中某些表数据的操作!原来是通过写代码复制DataSet实现的,但数据量达到万以上后,时间就有些长了!于是我想改用存储过程来实现。我写代码测试过,一千多条数据,写代码操作要3秒多,存储过程则0点0几秒;一万多条数据的话,代码操作要9秒多,存储过程则0点几秒;上到十万的话,代码操作就有排等了!!
而,写存储过程的话,有个跨库操作的问题,找了些相关资料和咨询了些前辈,整理出如下方案(未测试):

两个数据库A、B间的数据同步方法,采用快照技术!假设A同步B中数据!

1,为要同步的表创建快照日志(在表所在的数据库端,即B端创建)
Create snapshot log on t_yamagl

2,在A端建立到B端的数据库链路
Create database link LINK_H_TS(链路名)
Connect to username(用户名) identified by xxxxxxx(密码) using k600i(数据库服务器名);

3,在A端建立快照
Create snapshot SNAP_H_TS AS(快照名)
Select * from t_yamagl@LINK_H_TS(要同步表名@链路名);
Alter snapshot SNAP_H_TS(快照名) refresh fast start with sysdate
Next round(sysdate+0.5)+18/144;

参数说明:
1、fast与complete:fast(默认值)使用日志比较两表的差异,只刷新日志差异的内容。Complete是重建快照,需时很长,应用较少。
2、start with:快照第一次执行的时间;
3、next:下次执行的时间,必须指定next才能使快照定时运行;
4、关于时间设定:sysdate是系统当前时间,而定时运算中以一天为基本单位分成很多时间片,1代表一天,1/24表示一天分成24份即一小时后,1/1440=1/24*60即一分钟后,类似的1/144表示10分钟后,1/2880表示30秒后。
4,像在A端用自己的表一样使用快照SNAP_H_TS进行复制即可!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: