您的位置:首页 > 数据库

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

2016-02-05 14:41 281 查看
同步程序需要以服务的形式,后台运行在需要同步的两台服务器上。
双方数据库中都在每个表中增加两列,分别用于检测数据是否是自身数据(_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
4000
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,即标示为接收到的数据。自增列不进行数据插入,没有值的列也不进行插入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: