数据库同步程序设计与实现
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,即标示为接收到的数据。自增列不进行数据插入,没有值的列也不进行插入。
双方数据库中都在每个表中增加两列,分别用于检测数据是否是自身数据(_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,即标示为接收到的数据。自增列不进行数据插入,没有值的列也不进行插入。
相关文章推荐
- 如何把SQLServer数据库从高版本降级到低版本?
- [转] MySQL5绿色版安装教程
- win10、win7系统64位oracle11g安装教程以及32位plsql连接教程
- oracle 创建数据库时 Enterprise Manager 配置失败
- 棋牌游戏服务器架构: 详细设计(三) 数据库设计
- 如何从把mysql的数据迁移到oracle上来---------Oracle SQL Developer技术
- mysql sql语句大全
- oracle的oraclebulkcopy的使用
- mysql 快速入门
- sql server 基本操作二
- #Memcached系列#(6)使用Enyim.Caching访问Memcached的一个C#控制台程序
- MySql用户忘记密码时解决办法
- ios 将随意对象存进数据库
- 第三章 数据库备份和还原
- mysql next-key lock
- SQL Server远程连接
- 如何删除MongoDB数据库中的文件?
- MySQL中redo日志
- 挑战极限 Oracle数据库一秒导百万数据
- SQL Server命令行