数据库同步程序设计与实现

同步程序需要以服务的形式,后台运行在需要同步的两台服务器上。

双方数据库中都在每个表中增加两列,分别用于检测数据是否是自身数据(_InsertType 0: 自身数据;1:非自身数据)和记录数据的实际插入时间(AddDate);

同步时间设置,按指定时间或者循环间隔时间来进行同步操作;

每次启动同步时,都将每个表中自身的新增数据读取出来,然后通过建立起的Socket连接传输给对方,并更新最后同步时间以便下次更新时使用;对方接收到数据后,插入到指定的表中,其中_InsertType的值都设置为1如果有与数据记录相关联的磁盘文件,则要把文件从源服务器原样复制到目的服务器。

程序实现:

1.      网络连接建立:

双方服务器通过设置自身的服务器端/客户端来确定网络通信中的角色。

      确定好的后将信息存入config.xml文件中。

2.      数据库修改及连接设置:

1)数据库修改:

数据库所有用户表添加AddDate来存储数据的插入时间,用来进行更新。

数据库所有用户表添加_InsertType来存储数据是否是自身数据。

declare @Tname varchar(50)

declare CurT cursor for Select [name] From SysObjects Where XType='U' order By Name

open CurT

fetch next from CurT into @Tname

while @@fetch_status=0

BEGIN

--为每个表添加AddDate列默认值为当前时间

         exec ('ALTER Table '+@Tname+' ADD AddDate datetime  DEFAULT GETDATE() Not NULL')

--为每个表添加_InsertType列默认值为0

exec ('ALTER Table '+@Tname+' ADD _InsertType int  DEFAULT 0 Not NULL')

         fetch next from CurT into @Tname

end

close CurT

deallocate CurT

2)数据库连接设置:

填写本地与远程数据库的连接所需信息,以便程序连接两个数据库。然后保存到config.xml文件中。

3.同步时间设定:

      填写同步数据的时间,保存到config.xml文件中。

4.数据同步文件生成、传输及插入:

  提取源数据库自身的数据Socket网络传输,在建立连接下的客户端与服务器端通过当前的有效连接进行传输,当前连接不存在时,重新进行网络连接;而传输失败时应该可以重新传输。每次传输一个表的数据。

接收到数据后,根据当前表名,找到指定的数据库中的表,执行插入操作,插入时,指定_InsertType的值为1,即标示为接收到的数据。自增列不进行数据插入,没有值的列也不进行插入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值