数据同步解决方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内外网数据同步暂定解决方案
定义:
●内外网的数据库服务器分别命名为A、B,中间层命名为C
●主服务器:同一个表的同一条记录的同一个字段被修改时,其做为标准的服务器定义为主服务
器
●从服务器:除主服务器之外的其它服务器
问题描述:
考虑到安全性的问题,内外网的数据库不可直接或间接相联,但必须保证在一定的时间内(一般12小时之内)可以同步,故采用增加一个中间层的方法,将初始化时一模一样的两台数据库,在一定时间后的改变(包括修改、删除、插入)合并,然后重新分别写回数据库。
基本的操作步骤如下:
1.A和C相连,将A中的改变转储到C上,断开连接。
2.B和C相连,将B中的改变转储到C上,断开连接。
3.C将两者的改变合并。
4.A和C相连,根据合并的内容,对A修正,断开连接。
5.B和C相连,根据合并的内容,对B修正,断开连接。
基本条件:
1.两台数据库服务器A、B上的DataBase是一模一样的。
2.DataBase中表的记录可分别添加、修改、删除。
3.同一条记录,两台服务器A、B可分别修改某几个字段。
4.表的字段要么指定被A修改,要么指定被B修改,不存在两不管的情况。一旦存
在,则以主服务器为主。
基本原则:
1.记录被删除,A、B中均应删除。
2.记录添加,A、B中均应添加。
3.记录修改,A、B中均应修改。
e.g
表Table1,包含字段a,b,c,d。同一条记录,初始时在A、B中是相同的,若
某一时刻,
A 修改了该记录的a,b 字段
B 修改了该记录的c,d 字段
则同步后,该记录应为
a(修改后),b(修改后),c(修改后),d(修改后)
关键问题及解决办法:
1.同一条记录,不同字段的修改,需将分别修改后的内容合并。
solution:采用触发器trigger,记录被修改时,记下修改的记录号、列名以及被修
改列对应的修改后的值,放在一指定表中,合并后清空。
注:列的修改权限,由上层的应用程序控制,即当前角色不可修改的字段,不提供修改接口。
2.记录的删除,如何界定?需考虑效率
solution:采用触发器trigger,记录被删除后,便记下表名、关键字段名和记录的
关键字,放在一个指定的表中,合并后清空
3.记录的插入。由于表的插入可分别进行的,采用常规的流水号关键字,A、B中
可能存在关键字相同的记录,直接合并显然行不通的,故关键字需改,而表之间
又会有关键字关联的,所以相关联的记录字段也应做相同的改动。这样一来开发
的工作量会大大增加。
solution:
a. 关键字可能重复的问题:使用存储过程,关键字步长不再为1,应为服务器
的台数,且初始值也应不同
e.g :
存在2台服务器,则步长设为2,初始值分别为1, 2;
一般地,存在n台服务器,则步长设为n,且初始值分别为1, 2 , …, n
这样可以避免关键字重复的情况
b. 采用触发器trigger,记录插入后,便记下表名、关键字段名和记录号,放在
一个指定的表中,合并后清空。
故障描述及处理方法:
正确的同步过程,可描述为:各台服务器分别与中间层联接,将改变反映到中间层,各台服务器均成功联接完毕,中间层进行一些必要的处理,合并改变的内容;合
并完毕,中间层需与各台服务器再次联接,将合并后的内容写入各台服务器,全部完成,则回写完毕,至此,服务器数据同步顺利完成。
故障描述:
1.各台服务器与中间层联接,将改变拷贝到中间层时,数据尚未拷完时,发生
故障。
2.中间层在处理合并数据时,因断电等原因而异常终止。
3.回写时,部分尚未完成,而终止。
4.在一个同步过程内,同一台服务器多次与中间层联接,包括合并和回写。
故障分析:
分析上述故障,基本可分为两类:
其一,需要的数据部分完成,恢复正常后应继续,直至完成。
其二,需要的数据已经完成,却再次重复,这样的操作应禁止。
解决办法:
1.对于数据操作部分完成的故障,我们在数据正常操作完成时,给一个标识,
因此对于操作部分完成的,该标识应为false,在中间层与下一台服务器联
接或自处理时,进行检测,对标识为false的请求重新联接,联接后,清除
已拷贝的数据,重新进行数据操作。
2.对于数据操作完成,却重复联接的故障,判断同步过程的标识是否为false,
若为false则标识当前同步过程尚未完成,发出警告。