这两天帮个客户改进同步两个数据库中某些表数据的操作!原来是通过写代码复制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进行复制即可!

posted on 2006-11-08 12:41  冷冰鱼  阅读(1100)  评论(0编辑  收藏  举报