Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103696596
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

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表中同时记录了更新前后的值:

红色部分为用户指定的,要捕捉更改的列(后映象列),蓝色部分为前映象列,存放对应列被更新前的值。

CREATE  TABLE  DEPARTMENT (
DEPTNO …,      ‘A00’
DEPTNAME …,
MGRNO …,
ADMRDEPT …,
LOCATION …)

源表

CREATE  TABLE  CD20030805296530(
IBMSNAP_UOWID …,
IBMSNAP_INTENTSEQ…,
IBMSNAP_OPERATION …,
XDEPTNO…,      ‘A00’
DEPTNO…,       ‘A01’
XDEPTNAME …,
DEPTNAME …)

CD表

在需要审计或回滚能力的应用系统中,前映象列是非常有用的。

阅读(595) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~