DB2 数据复制概述(2)

上一篇 / 下一篇  2008-03-31 19:48:38 / 个人分类:技术文章

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表

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

全更新和差别更新拷贝
应用程序通过全更新或差别更新拷贝从源表拷贝数据到目标表中。
-在只进行全更新拷贝时,应用程序执行一下任务:
1.删除目标表中的所有行
2.从源表中读取所有行
3.拷贝这些行到目标表中
-在进行差别更新拷贝时,应用程序只拷贝更改的数据到目标表中。

冲突检测级别

冲突检测仅适用于“任何地方的更新(update-anywhere)”复制配置。它是在同一个复制周期,源和目标表中的同一行被更新的检测程序。 对于标准冲突检测,应用程序在那些已经捕捉到CD表中的行中查找冲突。对于增强的冲突检测,应用程序锁住所有目标表,因此确保了在检查冲突时所有更改都被 考虑到。

预订集和预订集成员
在开始从复制源复制数据前,你必须先将复制源和复制目标相关联起来,复制源所发生变化将被复制到复制目标中。我们使用预订集和预订集成员来定义这种信息。我们定义的这些信息将存储在各种复制控制表中。

一个预订集包含一个复制预订的属性。当你创建一个预订集时,要定义下面的属性:
-预订名
-源服务器和目标服务器
-应用限定符
-什么时候开始复制,复制频率,是否使用基于时间或基于事件或者基于两者的复制频率
-如果你有大量的更改,是否将数据分块提交

预订集中对每一张目标表或视图,必须有一个预订集成员。当你创建一个预订集成员,要定义以下属性:
-源表或视图、目标表或视图
-目标表或视图的结构
-要复制的列(子查询列)
-要复制的行(用SQL谓词WHERE限定过滤条件)

预订集确保所有预订集成员在复制期间是相同的:更改要么被应用于所有的目标,要么不被应用于所有的目标。在一个预订集中的所有预订成员的更改数据通 过单一的一个事务复制到指定的目标表中。因为在一个预订集中的目标表是在一个事务中处理的,预订集使性能最优化。预订集也保持着参照一致性。

一个预订集被一个应用程序使用,然而,每个应用程序可以通过相同的应用限定符处理多个预订集。

应用限定符

应用限定符将一个应用程序和一个或多个预订集关联起来。当你定义一个预订集时,指定一个名称(区分大小写)作为应用限定符。
通过使用多个应 用限定符,你可以只使用一个用户ID运行多个应用程序实例。例如:假设你想从两个源数据库复制数据到你计算机上的目标表。源表A中的数据使用“全更新拷 贝”复制到目标表A,源表B中的数据使用“差别更新拷贝”复制到目标表B中。你定义了两个预订集(一个对应表A,一个对应表B),而且你使用各自的应用限 定符以允许应用程序的两个实例在不同的时间拷贝数据。你也可以将两个预订集用同一个应用限定符定义,用同一个应用程序实例拷贝数据。

数据操作

也许你想只复制源表中的子集,可以使用简单的视图来重构从源表到目标表的数据,或者使用复杂的连接或联合。

源表的子集

你可以复制源表中的某些列或某些行,而不是复制整个表。

对于目标的连接和联合
你可以创建和维护包含由多张已存在的源表连接或联合成的内容的目标表。
你可以使用下面的连接类型:
-跨越一个或多个定义的复制源的简单内部连接,可能和其它的复制源的其它表或视图组合。

你可以通过下面的方法采用连接和联合来操作数据:
-从单一的DB2源服务器上连接表(通过定义一张由某些表连接成的DB2视图)
-从一个源服务器上联合的表(通过在一个预订集中使用包含相同目标表的多个预订集成员)
-从多个源服务器的联合,有时称之为多点联合(通过创建在多个预订集中的多个预订集成员)

目标表
当你定义一个预订集成员时,你必须指定你所使用目标表的类型。有下面几种表类型可以用:
-用户拷贝表
-时间点表
-聚集表
-CCD表
-副本或行副本表
-用户表

下面介绍一下这些目标表类型的特点:
用户拷贝表
这些表是复制源的只读拷贝,不带有附加的复制控制列,就像普通的源表。它们是目标表最普通的类型。

时间点表
这些表是复制源的只读拷贝,附带有一时间戳列。时间戳列初始为空。当复制更改时,该列被赋予相应值以指示更新的时间。当你想跟踪更改的时间时,可以使用这种类型的表。

聚集表
这些是只读的表,使用SQL列函数(如SUM、AVG)来计算源表全部或最近发生更改的数据的摘要。行会随时间追加到聚集表。

基础聚集表汇总一张源表的内容。用基础聚集表来定期地跟踪源表状态。例如,假设你想知道你每个月的顾客平均数。如果你的源表中一个顾客对应一行,你每月将你源表中的行数取平均,而后将平均值存储到一张基础聚集表中。

基础聚集表没有跟踪更改信息。例如,假设你一月份平均有500个顾客,二月份也有500个顾客。然而,在二月份,你失去两个现有的客户,同时新增两 个新客户。基础数据表显示这两个月平均顾客数是一样的,但它没有反映出二月份的变化。如果你想跟踪变化信息,可以使用更改聚集表。

更改聚集表使用控制表中的更改数据,而不使用源表中的内容。使用更改聚集表来跟踪随时间发生的更改(UPDATE、INSERT、DELETE操 作)。例如,假设你想知道每个月你增加多少新客户(INSERTS)失去多少现有客户(DELETES)。你将按月统计你源表中行所发生的更改,将统计结 果存储在更改聚集表中。

CCD表
涉及非IBM数据库,本文不予讨论。

副本或行副本表
这些是唯一能被直接被我们的应用程序(此处的应用程序指用户的应用系统)更新的目标表。发生于副本或行副本的更改会被复制到相关的源表中;源表再依次复制更改至其它副本。使用副本表类型适用于任何地方的更新的复制。

用户表
你不用直接指定一张用户表作为目标表;然而,对于任何地方的更新的复制,一张用户表将自动做为与其相关的副本或行副本的目标。用户表 是副本的父母,而且它的拷贝依赖于副本。副本的父母从依赖副本那里接受更新,如果没有冲突检测,它将复制更改到其它依赖副本。副本的父母是主要数据源。如 果任何更新冲突被检测到,副本的父母的内容成功。典型情况下,你的应用程序访问依赖的副本表;然而,当副本不可用时,它们将连接至包含用户表的服务器上。


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-12  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 82937
  • 日志数: 24223
  • 建立时间: 2007-12-06
  • 更新时间: 2008-06-15

RSS订阅

Open Toolbar