数据同步解决方案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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则标识当前同步过程尚未完成,发出警告。

相关文档
最新文档