电脑技术学习

使用DB2 Cloning Tool克隆主机DB2数据库

dn001

对DB2数据库进行数据复制的方法多种多样,本文主要介绍了一种使用快速磁盘复制技术(例如,FlashCopy等)对DB2数据进行克隆的方案。通过使用DB2 Cloning Tool,最大程度简化DB2数据库克隆过程中DBA所需进行的操作。使整个流程更加自动化。数据库管理员(DBA),或者DB2开发测试人员都能够从中获益,了解如何通过DB2 cloning tool快速简便的构建DB2测试环境。为应用程序的开发和测试提供有力的保障。

序言


主机平台上的 DB2 数据库是性能优异,运行稳定,使用广泛的数据库解决方案。随着存储在主机 DB2 数据库中的数据量的不断增加,开发人员在测试新的基于主机 DB2 数据库的应用系统时,经常需要花费大量的精力和时间来搭建一个合格的主机 DB2 测试环境。这个测试 DB2 系统的结构必须和生成 DB2 系统的结构一致,并且测试环境中必须包含有相当的数据量,这样才能确保测试的准确性。


两种数据克隆技术


一般而言,可以通过以下两种方法来将数据导入用于测试的 DB2 系统。


1. 使用 UNLOAD 工具从生产 DB2 系统中卸载数据,然后使用 LOAD 工具装入测试 DB2 环境。这个方法的优点在于,灵活,操作简单。这个方法的主要问题在于所需的时间较长。


2. 使用 FlashCopy 等磁盘复制技术,通过卷对卷拷贝的方式,对 DB2 子系统进行快速复制。这个方法最大的优势在于,速度快。其次,通过卷对卷的拷贝,我们能够最大程度的保证测试 DB2 和生产 DB2 物理特性(数据在物理磁盘上的分布情况)的一致性。然而这个方法主要的问题在于,

◆DB2 使用的都是 VSAM 数据集,卷对卷拷贝后,可能需要针对 VSAM 数据集新建 VSAM cluster;

◆通常 DB2 所涉及到的 VSAM 数据集较多,用户很难把这些 VSAM 数据集一一改名,因此新生成的 DB2 数据库的名字只能保持和源 DB2 一致。

第二种方法无疑是非常有吸引力的,但是它的缺点也十分的棘手。针对这种情况,IBM DB2 Cloning Tool 应运而生。它能够帮助用户借助 FlashCopy 等快速磁盘复制技术的威力,方便,快捷的克隆出所需的 DB2 数据库。

DB2 Cloning Tool 的典型使用场景


◆快速克隆生产系统 DB2,使得用户能够并发的运行生产流程;

◆建立和生产系统完全等同的 QA(Quality assurance)测试环境,使得性能测试的结果更有针对性;

◆在升级到 DB2 新版本之前,创建完整的子系统环境(克隆),用于在生产系统升级到新版本前测试新系统的升级和应用;

◆创建数据仓库,使用户能在不影响生产系统的情况下进行数据挖掘。

DB2 Cloning Tool 的使用环境

图 1. DB2 Cloning Tool 的使用环境

说明:


1. 源系统和目标系统可以是同一个 MVS 系统。此时 DB2 Cloning Tool 可以帮助用户修改目标卷的卷标,自动将其 online 后,修改目标卷上数据集的名称。


2. DB2 Cloning Tool 支持多种快速磁盘复制技术和磁盘镜像技术,包括 IBM FlashCopy,IBM PPRC,EMC TimeFinder/Snap,EMC TimeFinder/Mirror 等等。

DB2 Cloning Tool 客户化


要使用 DB2 Cloning Tool,必须在源环境和目标环境分别通过 SMP/E 安装 DB2 Cloning Tool 相关的程序库。并根据要求对其进行相应的客户化。下面是详细的客户化步骤:


B<>生成 DB2 Cloning Tool 的运行参数 CKZINI:


通过运行作业 DB2CT.V1R1.SCKZJCL(CKZIMRG) 创建一个新的参数成员——SCKZINI。

清单1. DB2CT.V1R1.SCKZJCL 代码


CKZINIMG JOB ,'INIMERGE',CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID

********************************************************************

* COPYRIGHT 2001 - 2006 MAINSTAR SOFTWARE CORPORATION *

* ALL RIGHTS RESERVED *

********************************************************************

* MERGE THE NEW INI (CKZINI#) WITH THE EXISTING ONE (CKZINI)

MERGE EXEC PGM=CKZ01MER

STEPLIB DD DISP=SHR,DSN=DB2CT.V1R1.SCKZLOAD

INI DD DISP=SHR,

DSN=DB2CT.V1R1.SCKZPARM(CKZINI#)

MSCINI DD DISP=SHR,

DSN=DB2CT.V1R1.SCKZPARM(CKZINI#)

UPDATE DD DISP=SHR,

DSN=DB2CT.V1R1.SCKZPARM(CKZINI)

SYSPRINT DD SYSOUT=*

SYSUDUMP DD SYSOUT=*

ABNLIGNR DD DUMMY DO NOT REMOVE IF USING ABENDAID


根据需要修改 CKZINI 参数:


建议新用户使用默认的 CKZINI 参数。如果多个系统间通过 CAMIM/MII 共享 DASD, 那么需要设置以下的参数。

清单 2. 多个系统间通过 CAMIM/MII 共享 DASD 需要设置的参数


:RESOURCE_SERIALIZATION

MIM_GDIF = YES

更新 DB2CT.V1R1.SCKZJCL 中的作业:


根据当前系统中 DB2 Cloning Tool 的 HLQ 和 DB2 的 SDSNLOAD 数据集修改该作业库中的 JCL。


将 DB2 Cloning Tool 的 LOAD LIB:DB2CT.V1R1.SCKZLOAD 添加到系统的 APF 中:


确保运行 DB2 Cloning Tool 的用户拥有足够的 RACF 权限:


◆执行 COPY 和 RENAME 命令,需要拥有源和目标 user catalog 的 ALTER 权限;

◆执行 DB2UPDATE 命令,需要拥有对目标数据集的 UPDATE 权限;

◆执行 COPY 命令,需要使用 ADRDSSU ADMIN 参数的权限;

◆通过保护 DB2 Cloning Tool 的日志文件,可以避免未授权的用户使用 COPYCHECK 命令。


使用 DB2 Cloning Tool 克隆 DB2 子系统


在实际使用 DB2 Cloning Tool 之前,我们需要对 MVS 系统以及 DB2 子系统做一些准备工作。针对 MVS 系统环境的准备工作,主要是确保 MVS 系统可以顺利调用相应的磁盘复制技术(例如,FlashCopy,SnapShot 等)。需要注意的是,使用磁盘复制技术时必须将 COPYVILID 参数设置为 YES。以确保源卷上的 VVDS 会完整的复制到目标卷上,并保持一致的命名;否则会造成 DB2 Cloning Tool 在做 RENAME 操作时出现错误。

关于 DB2 环境的准备工作


源 DB2 子系统


1. DATA SET 分布


为了保证克隆过程的正确和完整,源卷上必须包括所有源 DB2 子系统的 direcory,catalog,active log,BSDS 以及与所有用户数据库相关的 DATA SET。在克隆的过程中 DB2 的 SDSNLOAD 和 SDSNEXIT 这两个添加到 APF 中的 DATA SET 不要放在源卷上一并复制。与源 DB2 子系统有关的 USER CATALOG 可以放置在源卷上,也可以放置在其他目标环境能够访问的卷上。


2. 绑定与 DB2 克隆工具相关的 Plan 和 Package


在源 DB2 子系统中 bind 相关的 plan 之后,在对目标 DB2 子系统进行操作的过程中就可以直接使用相应的 DB2 Cloning Tool 的工具去修改目标 DB2 子系统的信息,而不需要每次都重新 bind。可参考 JCL:DB2CT.V1R1.SCKZJCL(CKZDBIND) 代码示例。

清单 3. DB2CT.V1R1.SCKZJCL(CKZDBIND) 代码


DSN SYSTEM(DSN)

BIND PLAN(CKZPLAN)

PKLIST(CKZPACK.*)

ENCODING(EBCDIC)

DYNAMICRULES(RUN)

ACTION(REPLACE)

RETAIN

END

DSN SYSTEM(DSN)

BIND PACKAGE(CKZPACK)

MEMBER(CKZ00246)

VALIDATE(RUN)

RELEASE(COMMIT)

ENCODING(EBCDIC)

ISOLATION(CS)

DYNAMICRULES(RUN)

ACTION(REPLACE)

END

目标 DB2 子系统


1. 编译有效的 ZPARM 和 DSNHDECP 参数


提交 DB2 安装作业 DSNTIJUZ,为目标系统 DB2 子系统定义正常启动和运作所需的 ZPARM 参数和 DSNHDECP 参数。


2. 准备目标 DB2 子系统启动时需要的 STC proc


为了正常启动目标 DB2 子系统,需要预先在对应的 PROCLIB 里面定义好相关的启动 STC proc。


3. 定义目标 DB2 子系统和对应的 IRLM 的子系统


为了正常启动目标 DB2 子系统,需要预先在对应的 IEFSSNxx 里面定义好 DB2 和 IRLM 启动时需要使用的子系统借口(SSI)。


4. 为目标 DB2 子系统编译一个特殊的 ZPARM—DSNZSPEC


由于在克隆的过程中,我们需要修改目标 DB2 子系统的 VCAT 和 STOGROUP,因此必须预先定义相应的 ZPARM。参考如下的步骤:


◆新建特殊的 DSN6SPRC,将 SDSNMACS(DSN6SPRC) 复制到 DB2CT.V1R1.SDSNMACS(DSN6SPRC)。

◆修改 DB2CT.V1R1.SDSNMACS(DSN6SPRC) 参数,将 &SPRMCTU SETC ‘0’改成 &SPRMCTU SETC ‘1’。

◆创建编译 ZPARM 的作业,将 DSNTIJUZ 复制到 DB2CT.V1R1.SCKZJCL(DSNZSPEC),只保留 DSNZSPEC 里面编译 ZPARM 的部分。

◆修改新建的 ZPARM 作业:

·在 DSNZSPEC 里面修改 DSN6SPRM 为 DEFER, ALL;

·修改 DSN6SPRM 里面的 SYSADM 和 SYSADM2 参数为以后运行 DB2 Clone Tool 的用户 ID;

·把 DB2CT.V1R1.SDSNMACS(DSN6SPRC) 放在 SYSLIB Dd 链接的最前面;指定生成的 ZPARM 参数 module 名字为 ZPRMSPEC,并编译该 ZPARM 到 SDSNEXIT 库里面去。

根据复制过程中源 DB2 子系统的状态,我们可以将 DB2 Cloning Tool 克隆 DB2 数据库的方式分为 DB2 offline 克隆和 DB2 online 克隆两种。DB2 offline 克隆的过程相对简单,但需要停止源 DB2 子系统。而采用 DB2 online 克隆的方式,源 DB2 子系统就无需进行停机和重启的操作,提高了源 DB2 子系统的可用性。同时,这也会使克隆过程变得略微复杂。

DB2 offline 克隆


步骤 1:在源 MVS 系统停止源 DB2 子系统

清单 4. 在源 MVS 系统停止源 DB2 子系统命令


DB2STOP

DB2-SSID(DSN)

步骤 2:在源 MVS 系统中使用磁盘复制技术对磁盘卷进行复制


步骤 3:在源 MVS 系统执行 COPY 命令


COPY 命令会对和源卷有关的 USER CATALOG 进行备份,并对本来 offline 状态的目标卷进行 relabel 后重新 online。

清单 5. 在源 MVS 系统执行 COPY 命令


COPY

DATA-MOVER(

PGM(NONE)

)

VOLPAIRSDEVN(

M1DB17 P1D280 7600,

M1DB24 P1D28B 760B,

M1DB18 P1D281 7601,

M1DB21 P1D285 7605,

M1DB23 P1D283 7603,

M1DB33 P1D287 7607,

M1DB34 P1D288 7608,

M1DB35 P1D289 7609,

M1DB36 P1D28A 760A

)

USERCATALOGS(

CATU.DM10.CATALOG(M1DB17) CATU.DM30.CATALOG ,

CATU.DM10.SYSTEMA1(M1DB17) CATU.DM30.SYSTEMA1,

CATU.DM10.SYSTEMB1(M1DB17) CATU.DM30.SYSTEMB1,

CATU.SYSTEM.DB2 CATU.SYSTEM.DB2

CATWORK-DSN(DB2CT.V1R1.WRK.* )

JOURNAL-DDN(JOURNAL)

步骤 4:在源 MVS 系统启动源 DB2 子系统,之后源 DB2 子系统可正常使用


使用 DB2START 命令启动源 DB2 子系统运行。

清单6.在源 MVS 系统启动源 DB2 子系统命令


DB2START

DB2-SSID(DSN)

NORMAL

步骤 5:在目标 MVS 系统执行 RENAME 命令


RENAME 命令能够将目标卷上的 DATA SET 进行改名并重新 CATALOG。

清单7.在目标 MVS 系统执行 RENAME 命令


RENAME

SAFE

VOLBKUP-DDN(VOLBKUP)

MAX-TASKS(5)

JOURNAL-DDN(JOURNAL)

RECATALOG(Y)

NOTRENAMED(DELETE,RC(0))

STORCLAS-PAIRS(

SCSTAND,SCSTAND

)

RENAME-MASKS(

DSNDM10.** DSNDM30.**

DSNDM10A.DM11.** DSNDM30A.DM31.**

DSNDM10B.DM11.** DSNDM30B.DM31.**

CLODBTST.** TARDBTST.**

)

步骤 6:在目标 MVS 系统执行 DB2UPDATE 命令


使用 DB2UPDATE 命令对目标 DB2 子系统的 directory 和 BSDS 进行更新。

清单 8. 在目标 MVS 系统执行 DB2UPDATE 命令


DB2UPDATE

DB2-HLQS(DSNDM10,DSNDM30

DSNDM10A,DSNDM30A

DSNDM10B,DSNDM30B

CLODBTST,TARDBTST)

STOGROUPS(CLODBSTG,TARDBSTG)

DB2-GROUP(DM10,DM30)

DB2-MEMBERS(DM11,DM31)

DB2-XCFCLEAN(Y)

JOURNAL-DDN(JOURNAL)

步骤 7:在目标 MVS 系统启动目标 DB2 子系统


使用 DB2START 命令调用定制的 ZPARM——ZPRMSPEC,启动目标 DB2 子系统。

清单9. 在目标 MVS 系统启动目标 DB2 子系统


DB2START

DB2-SSID(DSN)

SPECIAL

DSNZPARM(ZPRMSPEC)

步骤 8:在目标 DB2 子系统执行 DB2SQL 命令


使用 DB2SQL 命令更新目标 DB2 子系统的 catalog 信息。

清单10. 在目标 DB2 子系统执行 DB2SQL 命令


DB2SQL

DB2-SSID(DSN)

LISTSQL(N)

JOURNAL-DDN(JOURNAL)

步骤 9:参考 DB2 安装作业 DSNTIJTM,在目标 DB2 子系统重新定义 work databases


步骤10:停止目标 DB2 子系统的运行


由于当前目标 DB2 子系统使用特殊的 ZPARM 启动,因此必须先停机然后使用正常的 ZPARM 启动。

清单11. 停止目标 DB2 子系统


DB2STOP

DB2-SSID(DSN)

步骤 11:重新启动目标 DB2 子系统


使用 DB2START 命令启动目标 DB2 子系统,至此目标 DB2 子系统已经可以正常的运行。

清单12. 重新启动目标 DB2 子系统


DB2START

DB2-SSID(DM31)

NORMAL

DB2 online 克隆


步骤 1:在源 DB2 子系统执行 DB2SETLOG 命令,挂起源 DB2 子系统


使用 DB2STOP 命令挂起源 DB2 子系统中的更新操作,并迫使缓冲池内已被更新的数据写回到磁盘上以形成系统的一致点。

清单13. 在源 DB2 子系统执行 DB2SETLOG 命令


DB2SETLOG

DB2-SSID(DSN)

SUSPEND

说明:


1) 如果是对 DB2 V7 进行 SETLOG 的操作,必须要求 DB2 V7 已经打过补丁 PQ77456/UQ80188。


2) 建议用户尽量在 DB2 子系统空闲的时候进行 SETLOG SUSPEND 操作。


步骤 2:在源 MVS 系统中使用磁盘复制技术对磁盘卷进行复制


步骤 3:在源 MVS 系统执行 COPY 命令


COPY 命令会对和源卷有关的 USER CATALOG 进行备份,并对本来 offline 状态的目标卷进行 relabel 后重新 online。

清单14.在源 MVS 系统执行 COPY 命令


COPY

DATAMOVER(

PGM(NONE)

)

VOLPAIRSDEVN(

M1DB17 P1D280 7600,

M1DB24 P1D28B 760B,

M1DB18 P1D281 7601,

M1DB21 P1D285 7605,

M1DB23 P1D283 7603,

M1DB33 P1D287 7607,

M1DB34 P1D288 7608,

M1DB35 P1D289 7609,

M1DB36 P1D28A 760A

)

USERCATALOGS(

CATU.DM10.CATALOG(M1DB17) CATU.DM30.CATALOG ,

CATU.DM10.SYSTEMA1(M1DB17) CATU.DM30.SYSTEMA1,

CATU.DM10.SYSTEMB1(M1DB17) CATU.DM30.SYSTEMB1,

CATU.SYSTEM.DB2 CATU.SYSTEM.DB2

)

CATWORK-DSN(DB2CT.V1R1.WRK.* )

JOURNAL-DDN(JOURNAL)

步骤 4:在源 DB2 子系统执行 DB2SETLOG 命令,恢复 DB2 中的更新操作


使用 DB2SETLOG 命令恢复源 DB2 子系统中的更新操作。

清单15. 在源 DB2 子系统执行 DB2SETLOG 命令


DB2SETLOG

DB2-SSID(DSN)

RESUME


步骤 5:在目标 MVS 系统执行 RENAME 命令


RENAME 命令能够将目标卷上的 DATA SET 进行改名并重新 CATALOG。

清单16. 在目标 MVS 系统执行 RENAME 命令


RENAME

SAFE

VOLBKUP-DDN(VOLBKUP)

MAX-TASKS(5)

JOURNAL-DDN(JOURNAL)

RECATALOG(Y)

NOTRENAMED(DELETE,RC(0))

STORCLAS-PAIRS(

SCSTAND,SCSTAND

)

RENAME-MASKS(

DSNDM10.** DSNDM30.**

DSNDM10A.DM11.** DSNDM30A.DM31.**

DSNDM10B.DM11.** DSNDM30B.DM31.**

CLODBTST.** TARDBTST.**

)

步骤 6:在目标 MVS 系统执行 DB2UPDATE 命令


使用 DB2UPDATE 命令对目标 DB2 子系的 directory 和 BSDS 进行更新。

清单17. 在目标 MVS 系统执行 DB2UPDATE 命令


DB2UPDATE

DB2-HLQS(DSNDM10,DSNDM30

DSNDM10A,DSNDM30A

DSNDM10B,DSNDM30B

CLODBTST,TARDBTST)

STOGROUPS(CLODBSTG,TARDBSTG)

DB2-GROUP(DM10,DM30)

DB2-MEMBERS(DM11,DM31)

DB2-XCFCLEAN(Y)

JOURNAL-DDN(JOURNAL)


步骤7:在目标 MVS 环境启动目标DB2子系统


使用 DB2START 命令调用定制的 ZPARM——ZPRMSPEC,启动目标 DB2 子系统。

清单18. 在目标 MVS 环境启动目标 DB2 子系统


DB2START

DB2-SSID(DSN)

SPECIAL

DSNZPARM(ZPRMSPEC)

说明:


1) 启动目标 DB2 子系统的时候,DB2 会自动 roll back 处于 inflight 状态的交易。请确保目标 DB2 子系统可以使用回退该交易所需的日志(活动日志或归档日志)。


步骤8:在目标 DB2 子系统执行DB2FIX命令


DB2FIX 命令会纠正目标 DB2 子系统的 catalog 和 directory 中处于受限状态的 page spaces。

清单19.在目标 DB2 子系统执行 DB2FIX 命令


DB2FIX

DB2-SSID(DSN)

DATABASES(DB2)

说明:


1) 如果目标 DB2 是 data sharing 环境,执行 DB2FIX 时,只能启动其中的一个 member


步骤 9:在目标 DB2 子系统执行 DB2SQL 命令


使用 DB2SQL 命令更新目标 DB2 子系统的 catalog 信息。

清单20. 在目标 DB2 子系统执行 DB2SQL 命令


DB2SQL

DB2-SSID(DSN)

LISTSQL(N)

JOURNAL-DDN(JOURNAL)

步骤 10:在目标 DB2 子系统执行 DB2FIX 命令


DB2FIX 命令会纠正目标 DB2 子系统的用户数据库中处于受限状态的 page spaces。

清单21. 在目标 DB2 子系统执行 DB2FIX命令


DB2FIX

DB2-SSID(DSN)

DATABASES(APPLICATION)

说明:


1) 如果目标 DB2 是 data sharing 环境,执行 DB2FIX 时,只能启动其中的一个 member


步骤 11:在目标 DB2 子系统重新定义 work databases


参考 DB2 安装作业 DSNTIJTM,重新定义 DM31 的 work databases。


步骤 12:在目标 MVS 系统停止目标 DB2 子系统的运行


由于当前目标 DB2 子系统使用特殊的 ZPARM 启动,因此必须先停机然后使用正常的 ZPARM 启动。命令示例如清单 22 所示。

清单22. 在目标 MVS 系统停止目标 DB2 子系统


DB2STOP

DB2-SSID(DSN)

步骤13:在目标 MVS 系统启动目标 DB2 子系统


使用 DB2START 命令启动目标 DB2 子系统,至此目标 DB2 子系统已经可以正常的运行。

清单23. 在目标 MVS 系统启动目标 DB2 子系统


DB2START

DB2-SSID(DSN)

NORMAL

总结


对 DB2 数据库进行复制的方法多种多样,本文主要针对使用快速磁盘复制技术(例如,FlashCopy 等)对 DB2 数据进行克隆的方案。通过使用 DB2 Cloning Tool,能够最大程度简化 DB2 数据库克隆过程中所需进行的操作。另外,通过 TWS 运行 DB2 Cloning Tool 提供的 JCL 作业,可以使整个克隆过程高度自动化,无需用户干预,从而进一步加速整个复制过程。