技术开发 频道

DB2 数据复制概述

    应用更新的调度

    同步复制将连续的递送更新。当源数据发生改变,它将临时存储起来,继而转送到目标。只有更改已经复制到目标数据库,源数据库才进行提交。这种类型的复制也称之为实时复制。

    异步复制将分阶段递送更新。当源数据发生改变,它将在事先设定的时间间隔内临时存储起来,而后再继续转送到目标。时间间隔可以用时间(秒、分、时)度量或用指定的事件(午夜,或一天中的其它时间)来度量。如果更改没能被应用于目标数据库(例如,目标数据库或者网络停机),它们将被存储起来稍后再被应用,应用的顺序将按照在源数据库上的发生顺序。这种复制类型提供了比同步复制更多的好处:更好的利用网络资源,更少的数据库连接,在数据到达目标数据库之前有机会提高数据。

    例子

    以下操作或命令主要在DB2的控制中心或命令控制台中进行(红色部分根据具体情况调整),相关命令更详细的使用参见DB2帮助文档。

    建立复制环境

    先创建文件夹C:\示例以存放一些脚本文件

    1.创建源数据库

    DB2 CREATE DB DB_S

    2.将数据库日志改为归档日志Capture

    DB2 UPDATE DB CFG FOR DB_S USING LOGRETAIN Capture

    3.根据需要调整日志大小(如果需要的话)

    4.备份数据库(改为归档日志的数据库必须先备份才能对其进行操作)

    DB2 BACKUP DB DB_S

    5.创建源表

    DB2 CONNECT TO DB_S USER UserName USING Password

    DB2 CREATE TABLE TAB_1_S (COL_1 VARCHAR(20) NOT NULL, COL_2 VARCHAR(20), PRIMARY KEY(COL_1))

    6.定义复制源

    在控制中心左边树型列表中数据库DB_S下选中表,右边列表列出了所有的表,用右键点击表TAB_1_S,在弹出的菜单中选中定义为复制源—>定制,接受默认选项,点击确定,弹出现在运行还是保存窗口,接受默认的保存设置,点击确定,弹出选择系统名窗口,选择数据库所在系统,点击确定,弹出文件浏览器,把当前目录定位到C:\示例,在路径中输入文件名tab_1_replscr.sql,点击确定。保存成功后可以用文本编辑器查看tab_1_replscr.sql中的内容,可以发现里边主要是生成CD表,和注册复制源(通过往表ASN.IBMSNAP_REGISTER中插入记录)的SQL语句。

    7.运行复制源

    用右键点击控制中心左边树型列表中数据库DB_S下的复制源,在弹出菜单中选择运行SQL文件…,弹出选择系统名窗口,选择数据库所在系统名,确定,在弹出的文件浏览器中选择tab_1_replscr.sql后确定,如果成功,用右键进行刷新,将显示出新定义的复制源TAB_1_S。

    8.将捕捉程序与源数据库绑定(注意:必须转跳到DB2的SQLLIB\bnd目录下)

    CD C:\Program Files\SQLLIB\bnd

    DB2 CONNECT TO DB_S USER UserName USING Password

    DB2 BIND @CAPTURE.LST ISOLATION UR BLOCKING ALL

    DB2 BIND @APPLYUR.LST ISOLATION UR BLOCKING ALL

    DB2 BIND @APPLYCS.LST ISOLATION CS BLOCKING ALL

    9.创建目标数据库

    DB2 CREATE DB DB_T

    10.定义复制预订

    在控制中心左边树型列表中数据库DB_S下选中复制源,右边列表列出了所有的复制源,用右键点击复制源TAB_1_S,在弹出的菜单中选中定义预订…,在预订名中输入TAB_1_SUB,目标服务器中选择DB_T,应用限定符中输入TAB_1_QUAL,在列表中选中创建表。

    点击高级…,弹出高级预订定义窗口,点击目标列标签页,在COL_1列中选中主关键字,切换到行数标签页,输入过滤条件COL_1 <> '00',确定返回定义复制预订窗口。

    点击SQL…,弹出SQL窗口,点击添加…,在SQL语句或调用过程中输入DELETE FROM ASN.IBMSNAP_APPLYTRAIL WHERE LASTRUN < (CURRENT TIMESTAMP - 7 DAYS),在SQLSTATE中输入02000,点击添加,以接受” row not found”错误,确定返回SQL窗口,确定返回定义复制预订窗口。该步可忽略,这里主要是演示如何在复制过程中根据需要执行一些SQL语句,此处示例的DELETE语句主要是删除部分应用跟踪信息,已防止该表过于庞大,影响性能。

    点击计时…,弹出预订计时窗口,将分钟改为1,小时改为0,确定返回定义复制预订窗口。

    确定后弹出现在运行还是保存窗口,指定存储预订控制信息的数据库为DB_T后,点击确定,弹出选择系统名窗口,选择数据库所在系统,点击确定,弹出文件浏览器,把当前目录定位到C:\示例,在路径中输入文件名tab_1_sub.sql。保存成功后可以用文本编辑器查看tab_1_sub.sql中的内容,可以发现里边主要是生成目标表(如果选中了创建表的话),和注册复制预订(通过往控制表中插入记录)等的SQL语句。

    12.运行复制预订

    用右键点击控制中心左边树型列表中数据库DB_S下的复制预订,在弹出菜单中选择运行SQL文件…,弹出选择系统名窗口,选择数据库所在系统名,确定,在弹出的文件浏览器中选择tab_1_sub.sql后确定,如果成功,用右键进行刷新,将显示出新定义的复制预订TAB_1_SUB。

    13.将应用程序与目标数据库绑定(注意:必须转跳到DB2的SQLLIB\bnd目录下)

    CD C:\Program Files\SQLLIB\bnd

    DB2 CONNECT TO DB_T USER UserName USING Password

    DB2 BIND @APPLYUR.LST ISOLATION UR BLOCKING ALL

    DB2 BIND @APPLYCS.LST ISOLATION CS BLOCKING ALL

    14.创建密码文件

    打开文件夹C:\示例,新建一个文本文件,在文件中输入以下两行(注意:用户名和密码区分大小写)

    SERVER=DB_S USER=UserName PWD=Password

    SERVER=DB_T USER=UserName PWD=Password

    将文件保存为tab_1_qual.pwd

    (命名约定:密码文件命名为应用限定符.pwd)

    15.启动捕捉程序(注意:必须转跳到C:\示例目录下)

    CD C:\示例

    ASNCCP DB_S COLD NOPRUNE

    提示:该命令中参数COLD指定的是冷启动,它会将CD表和UOW表中的内容删除,一般只有在刚建立起复制环境时使用,而如果在复制环境已经启动,但又添加新的复制源,一般指定WARM参数采用热启动。

    捕捉程序启动后,控制台不会有任何提示,但系统会自动创建一个*.ccp文件,以跟踪捕捉程序的运行(相当于日志文件),可用文本编辑其查看其内容。捕捉程序启动后只是简单的做一些初始化工作,而不会捕捉任何更改信息,除非你启动应用程序且应用程序完成了初始化的全更新拷贝。

    16.启动应用程序(注意:必须转跳到C:\示例目录下,应用限定符区分大小写)

    CD C:\示例

    ASNAPPLY TAB_1_QUAL DB_T

    应用程序启动后,控制台不会有任何提示,但系统会自动创建tab_1_qual.app文件,以跟踪捕捉程序的运行(相当于日志文件),可用文本编辑其查看其内容。也可通过查看数据库DB_T中的应用跟踪表ASN.IBMSNAP_APPLYTRAIL来跟踪应用程序执行的一些信息。

    测试复制环境

    至此,复制环境启动结束,下面我们通过更新源表来验证复制环境是否正常运行:

    1.在源表中插入记录

    DB2 CONNECT TO DB_S USER UserName USING Password

    DB2 INSERT INTO TAB_1_S ( COL_1, COL_2 ) VALUES ( '00', '00' )

    DB2 INSERT INTO TAB_1_S ( COL_1, COL_2 ) VALUES ( '11', '11' )

    DB2 INSERT INTO TAB_1_S ( COL_1, COL_2 ) VALUES ( '22', '22' )

    插入成功后查看该复制源对应的CD表,会发现对源表的更改被记录了下来

    2.在目标表中查看数据是否已同步更新

    DB2 CONNECT TO DB_T USER UserName USING Password

    DB2 SELECT * FROM TAB_1_S

    停止捕捉、应用程序

    ASNCMD DB_S STOP

    ASNASTOP TAB_1_QUAL

0
相关文章