分类:
2008-04-14 13:01:14
来源:qqgb 作者:youbus |
基于日志的通讯
捕捉程序使用部分控制表去记录发生在源数据库上的更改,而应用程序使用这些控制表中的值去检测什么需要拷贝到目标库中。
重要:如果应用程序没有通知捕捉程序,捕捉程序不会捕捉任何更改信息。同样,除非你定义一个复制源并将它和预订集相关联,否则应用程序不会通知捕捉程序开始捕捉更改。
下面讲解在典型的复制环境下,应用程序和捕捉程序如何通讯以保证数据的一致性:
从源数据库捕捉数据
1.捕捉程序通过读控制表ASN.IBMSNAP_REGISTER来判断哪些复制源需要开始捕捉更改。如果在捕捉程序运行期间,用户定义了新的复制源,那么你必须重新初始化或重启捕捉程序,它才会开始生效。
2.捕捉程序通过监控DB2的日志去检测那些定义为复制源的源表所更改的记录。
3.每一复制源都有一张CD表。当捕捉程序在DB2日志中发现有一行数据发生更改时,它会在CD表中加入一行相应的数据,以记录发生的更改(如果updates被定义为DELETE和INSERT时,则加入两行)。
4.捕捉程序将提交的事务信息存储在控制表ASN.IBMSNAP_UOW中。该控制表中的行标志着在源服务器上发生的已提交的事务。对于基于日志的捕捉程序,每一个DB2源服务器都存在一张控制表ASN.IBMSNAP_UOW。
5.捕捉程序会更新控制表ASN.IBMSNAP_REGISTER来记录每一个复制源有多少已提交的数据被捕捉。
将数据应用于目标数据库
6.对于所有的预订集,应用程序首先通过将源表的所有数据拷贝到目标表中,以达到与复制源的同步。这个步骤称之为全更新拷贝。在进行全更新拷贝之后,捕捉程序开始捕捉数据源发生的更改。
7.如果任何预订集准备复制,应用程序通过检查控制表ASN.IBMSNAP_REGISTER来判断是否有发生变化以需要复制。
8.应用程序通过更新修剪控制表来同步存储在CD表中相关源表的更改
9.应用程序从CD表和控制表ASN.IBMSNAP_UOW的连接中拷贝变化的数据到目标表中。通过连接这两个控制表,应用程序确保只拷贝在数据源上已提交的变化。
修剪表
10.应用程序用一个指向拷贝变化到目标数据库的值来更新修剪控制表ASN.IBMSNAP_PRUNCNTL。
11.当应用程序修剪CD表和UOW控制表时,它先确定哪些更改已经应用,然后将其从那两个控制表中删除。
DB2数据复制概念
这部分介绍一些DB2数据复制的重要概念。你应该阅读整个部分以获得一个整体的概念。
复制源
一个复制源其实就是一张你想从中拷贝数据的用户表或视图。在你可以复制数据之前,你必须先定义一个复制源用来描述更改捕捉机制所使用的信息。当你定义一个复制源时,你必须指定你想复制的列,还有决定你想把更新当做UPDATE操作处理还是DELETE和INSERT操作。另外,你必须决定:
-是否想对一列捕捉前映象
-你是否想使用更改捕捉(差别更新拷贝)还是不使用更改捕捉(全更新拷贝)
-对于任何地方的更新复制(复制源有读/写目标表)想使用什么级别的冲突检测
后映象列和前映象列
一列后映象列包含源表中一列数据列被更新后的那列数据。一列前映象列包含源表中一列数据列被更新前的那列数据。当你定义一个复制源的时候,你可以选择只捕捉后映象(默认)或者后映象和前映象一起捕捉。这取决于你打算使用这些数据的方法和你正在使用的表的类型。例如:表DEPARTMENT中有一列DEPTNO,若在定义复制源时指定该列捕捉后映象和前映象,该列有一行数据为’A00’,若使用UPDATE语句将’A00’更新为’A01’,则在其相应的CD表中同时记录了更新前后的值:
红色部分为用户指定的,要捕捉更改的列(后映象列),蓝色部分为前映象列,存放对应列被更新前的值。
源表
CD表
在需要审计或回滚能力的应用系统中,前映象列是非常有用的。 |