SQL Replication基础教程:Windows DB2

通过本教程学习使用Replication Center,Capture和Apply程序。

按照本教程的步骤来设置你的SQL Replication环境,将SQL Replication源的更改复制到DB2®for Windows Enterprise Server Edition(ESE)或Workgroup Server Edition(WSE)上的数据库中的目标表,并监视 Capture和Apply程序的活动。

1.环境准备

在开始教程前,需要安装你的环境。

通过以下步骤完成环境的安装:

  1. 安装DB2到你的Windows电脑。
  2. 创建默认的DB2实例。这个教程使用所有数据库在同一个实例上。
  3. 确认你有SAMPLE数据库的权限。这个数据库将被作为source sever和Capture control server。可以使用First Steps来创建SAMPLE数据库:
  1. 选择 开始 > 所有程序 >IBM DB2 > DB2_copy > Set-up Tools > First Steps.
  2. 点击Create Sample Database。创建完SAMPLE数据库后关闭First Steps程序。
    如果你没有安装First Steps程序, 可以Windows命令行中使用db2cmd打开DB2命令行(DB2 CLP)。输入db2sampl命令来创建SAMPLE数据库。
  1. 使用DB2 Control Center来创建一个新的数据库COPYDB,它将作为target server和Apply contorl server。右击All Databases目录,选择Create Database > Standard使用默认设置来创建一个新的数据库。 数据库名和别名使用COPYDB。

教程使用SAMPLE数据的DEPARTMENT表。全名是schema.DEPARTMENT;schema是你创建SAMPLE数据库的用户ID。

对于剩下的教程,确保你使用的用户ID是你创建SAMPLE和COPYDB数据的用户。这个用户ID有权限(DBADM或SYSADM)来使用replication task。

2.SQL Replication教程计划

你想复制哪些数据,你需要设置哪些选项

假设你的组使用程序来产生报告。这个程序需要SAMPLE数据库DEPARTMENT表种的数据。相对于从数据源表直接获取数据, 你更希望程序可以复制数据源表的修改到目标表, 而这些目标表只有报告产生程序可以读取。为了便于管理, 你可以把目标表和数据源表放到同一台机器上。

您需要简单的数据分发配置,包括将更改从一个复制源复制到单个只读副本。 下一个主题描述在执行任何复制任务之前需要考虑的设计和规划问题。

复制选项

您可以选择复制选项,例如,确定change-data(CD)表,目标表和控制表的存储位置,复制发生的频率以及哪些记录(根据您指定的条件)您 想要在每个复制周期后从IBMSNAP_APPLYTRAIL表中删除。

为了本教程学习的目的,请将CD表,目标表和控制表存储在各自的默认表空间中,如表1所示。尽管SAMPLE和COPYDB数据库存在于同一台计算机中,但它们的表空间在不同的容器中。

表1. 表和表空间

| Database | Tables | Table spaces | Contents | | - | - | - | - | | SAMPLE | schema.DEPARTMENT | USERSPACE1 | Source table | || schema.CDDEPARTMENT | TSCDDEPARTMENT | The CD table for the DEPARTMENT table | || Capture control tables | TSASNCA and TSASNUOW | The control tables for the Capture program | | COPYDB | schema.TGDEPTCOPY | TSTGDEPTCOPY | Target table | || Apply control tables | TSASNAA | The control tables for the Apply program | || Monitor control tables | REPLMONTS1, REPLMONTS2, and REPLMONTS3 | The control tables for the Replication Alert Monitor |

通常,您可以在与表空间(USERSPACE1)分离的表空间中创建CD表,以减少表空间级的潜在竞争。 为此,请接受复制控制表的表空间的默认值(或在复制中心内定义配置文件)。 在生产环境中,请确保在单独的设备上创建每个表空间,以减少潜在的争用。

对于本教程,计划SQL Replication以每分钟检查源表中的任何更改,然后将更改复制到目标表。 虽然报表生成应用程序不需要此次检查频率,但对于本教程,您希望能够测试复制环境并验证所有操作是否正常。

此外,您决定在每个复制周期之后,要删除IBMSNAP_APPLYTRAIL表中超过一周(七天)的记录。 这种设置防止表增长太大。

复制源

复制源是数据库中你需要复制到目标源的表。 在设置环境之前,您必须确定需要从表中复制哪些内容。

此场景和教程的复制源是SAMPLE数据库中的schema.DEPARTMENT表。 您决定register和subscribe所有列。

复制目标源

复制目标源是要从复制源复制数据到目标数据库的表。 您可以在目标数据库中创建一个新表,或者使用现有的目标表。 对于本教程,您将创建一个新表。

复制目标源将是您创建的新数据库COPYDB中的表。 目前,该数据库中没有目标表,您可以根据您的实际需求决定是否创建目标表。 自动生成目标表的方式是首选,因为它可以确保对复制源的正确映射。 您可以使用现有的目标表,但本教程假定目标表不存在。

假设你想要的COPYDB的目标表的列如表1所是:

表1. COPYDB表的列

Column | Description
• | - DEPTNO | Information from the DEPTNO column in the replication source table. This column will be the primary key of the target table. DEPTNAME | Information from the DEPTNAME column in the replication source table. MGRNO | Information from the MGRNO column in the replication source table. ADMRDEPT| Information from the ADMRDEPT column in the replication source table. LOCATION | Information from the LOCATION column in the replication source table.

因为目标表中的列只是反映源表中的数据,并且因为源表中每行在目标表中只有一行,您可以使用user copy类型的目标表。

3.设置复制环境

在完成复制计划之后,下一步就需要完成复制环境的设置

以下所有的步骤需要使用Replication Center, 通过下面步骤运行:开始菜单 > 所有程序 > IBM DB2 > DB2_copy > General Administration Tools > Replication Center. 或在DB2命令行使用db2rc启动

步骤1:为Capture程序创建control表

配置复制环境第一步,创建Capture程序需要的control表

关于本步骤

Capture程序读取control表的注册信息,然后将其状态存储在这些表中。 任何充当Capture控制服务器的数据库都必须包含Capture control表。

操作步骤

创建Capture control表:

  1. 展开SQL Replication目录
  2. 展开Definitions目录
  3. 右击Capture Control Servers目录选择Create Capture Control Tables > Quick。(你也可以定制Capture control表通过选择Create Capture Control Tables > Custom)
  4. 在Select a Server窗口, 选择SAMPLE数据库。这个数据库将成为你的Capture控制服务器。点击OK
  5. 在Create Control Tables - Quick - Server Information窗口,选择Host sources for replication and capture changes to those sources。然后点击Next
  6. 在Create Control tables - Quick - Replication Details窗口,点击Next。你不需要做在这个窗口做任何操作。
  7. 在Create Control tables - Quick - Table Spaces窗口,输入TSASNCA表空间表空间规范。例如,设置buffer pool为IBMDEFAULTBP。 本教程点击OK使用默认的control表schema ASN
  8. 在Create Control tables - Quick - Table Spaces窗口, 输入TSASNUOW表空间的表空间规范
  9. 在Create Control tables - Quick - Table Spaces窗口中设置完2个表空间信息后点击OK
  10. 在Messages and SQL Scripts窗口点击Close。如果没有错误这个窗口会显示创建Capture control表生成的SQL脚本
  11. 在Run Now or Save SQL窗口输入正确的用户id和密码点击OK来立即执行SQL脚本。你会在DB2信息窗口看到运行成功的消息
  12. 点击Close
  13. 展开Capture Control Servers目录。SAMPLE数据库将显示在该目录下

步骤2:启用源数据库进行复制

下一步是启用源数据库进行复制。 Capture程序读取DB2®日志,以记录反映registered表更改的记录。 日志必须是archive log类型(而不是circular log类型),以避免日志在Capture程序可以读取之前被DB2覆盖。

关于本步骤

对于Linux,Unix和Windows环境,DB2默认使用circular日志。使用以下步骤修改日志类型为archive日志

操作步骤

启用源数据库进行复制:

  1. 展开Capture Control Servers目录
  2. 右击SAMPLE数据库选择Enable Database for Replication
  3. 在 Enable Database for Replication窗口点击OK来使用archive日志,并且初始化一个数据库的备份
  4. 在Backup窗口,指定备份信息点击Bcakup Now

在备份完数据库后,你可以启动Capture程序。对于本教程还不需要启动。

步骤3:注册一个复制源

在创建Capture control表和启用复制数据库之后,你需要注册你的数据库的表作为复制源。

关于本步骤

使用以下步骤将SAMPLE数据库中的DEPARTMENT表注册为复制源。 注册表时,将自动创建名为CDDEPARTMENT的change-data(CD)表,以从注册的源表接收更改。 然后Apply程序从CD表中获取更改

操作步骤

注册一个表作为复制源:

  1. 展开SQL Replication目录
  2. 展开Definitions目录
  3. 展开Capture Control Servers目录
  4. 展开SAMPLE数据库
  5. 展开Capture Schemas目录
  6. 展开ASN schema
  7. 右击Registered Tables目录选择Register Tables
  8. 在Add Registerable Tables窗口,点击Retrieve All来列出SAMPLE数据库的所有可以注册为数据源的表。选择DEPARTMENT表点击OK。Register Tables窗口如图1显示。

图1.Register Tables窗口

db2 什么情况下需要执行reorg指令 db2 replication_SQL

  1. 在Register Tables窗口,点击CD Table标签。为CD表空间指定以下信息:
  • 在Specification for the table space区域点击Container name值为TSCDDEPARTMENT表空间。
  • 在Specification for the table space区域修改Size值为1。
  • 在Specification for the table space区域修改Unit值为MB。
  • 为这个新的表空间指定其它信息;例如,设置buffer pool到IBMDEFAULTBP。
  1. 输入完table-space信息后点击OK。
  2. 在Run Now or Save SQL窗口点击OK来立即执行SQL脚本。你将看到脚本运行成功的提示。
  3. 点击Close。
  4. 在SAMPLE数据库目录的内容面板会显示DEPARTMENT表为注册表。看图2所示。

图2. DEPARTMENT表在注册表列表中

db2 什么情况下需要执行reorg指令 db2 replication_SQL_02

DEPARTMENT表现在被定义为复制源了。之前运行SQL脚本时,Replication Center已经为这个复制源创建了CD表和CD表索引,以及更新Capture control表。

步骤4:为Apply程序创建control表

在为Capture创建完control表后,你需要为Apply程序也创建control表。

关于本步骤

Apply程序为subscription-set信息,读取和保存状态到这些control表。任何作为Apply control server的数据库都需要有Apply control表。

操作步骤

创建Apply contrl表:

  1. 展开SQL Replication目录
  2. 展开Definitions目录
  3. 右击Apply Control Servers目录选择Create Apply Control Tables > Quick。同时你也可以通过Create Apply Control Tables > Custom定制你的Apply control表。
  4. 在Select a Server窗口,选择COPYDB数据库。这个数据库将作为你的Apply control server,点击OK。
  5. 在Create Control Tables - Quick - Server Information窗口,选择Apply captured changes to target tables点击Next。
  6. 在Create Control Tables - Quick - Replication Details窗口,点击Next,你不需要在这个窗口修改任何信息。
  7. 在Create Control Tables - Quick - Table Spaces窗口,为TSASNAA表空间输入表空间规范。例如设置buffer pool为IBMDEFAULTBP。点击OK。
  8. 在Messages and SQL Scripts窗口点击Close。这个窗口显示创建Apply control tables生成的SQL脚本,如果有错误也会显示。
  9. 在Run Now or Save SQL输入用户id和密码,点击OK来立即执行SQL脚本。你将看到脚本执行成功的消息。
  10. 点击Close。
  11. 展开Apply Control Servers目录。COPYDB数据库将显示在目录下面。

步骤5: 创建subscription set和subscription-set member

在你注册完数据源表后,你需要创建subscription set和subscription-set member来定义源数据库到目标数据库的关系已经复制源表和多个目标表的关系。

关于本步骤

一个subscription set定义了复制源数据库(SAMPLE)和目标数据库(COPYDB)的关系。 一个subscription-set member定义了复制源表(DEPARTMENT)和多个目标表(DEPTCOPY)的关系。

操作步骤

创建subscription set和subscription-set member

  1. 展开SQL Replication目录
  2. 展开Definitions目录
  3. 展开Apply Control Servers目录
  4. 展开COPYDB数据库
  5. 右击Subscription Sets目录选择Create
    你也可以通过选择SAMPLE数据库的Registered Tables目录来创建subscription set。
  6. 在Create Subscription Set窗口设置以下信息:
  1. 设置Set name为DEPTSUB。这个值标识subscription set且对于Apply qualifier必须时唯一的。
  2. 设置Apply qualifier为DEPTQUAL。这个值标识replication definitions, 它对于运行这个subscription set的Apply程序时唯一的。
    Apply qualifier时大小写敏感的。如果你想 Apply qualifier使用小写,你必须在你输入时限定为小写;例如,"deptqual"。如果你简单的输入deptqual,Replication Center会默认转化为大写。
  3. 在Capture control server alias框点击浏览按钮 [...] 。选择SAMPLE数据库点击OK。
  4. 在Target server alias框点击浏览按钮 [...]。选择COPYDB数据库点击OK。COPYDB数据库同时是Apply control server和target server。
  5. 选择Activate the subscription set选择框。
    你不需要修改其它设置。Create Subscription Set窗口类似图1所示。
    图1. Create Subscription Set窗口
  1. 在Create Subscription Set窗口的Source-to-Target Mapping标签输入以下信息:
  1. 点击Add来添加一个注册源到subscription-set member
  2. Add Registered Sources窗口点击Retrieve All来显示所有SAMPLE数据库的注册源。
  3. 在Add Registered Sources窗口,选择DEPARTMENT表点击OK。
  4. 在Create Subscription Set窗口的Source-to-Target Mapping标签修改目标表TGDEPARTMENT为TGDEPTCOPY;在Subscription-set members表的列 Target Name选择TGDEPARTMENT, 输入TGDEPTCOPY作为默认名。
    不要修改目标类型,因为你想要创建一个user copy的目标表
  5. 点击Change来打开Member Propertie窗口。在这个窗口,你可以定义subscription-set member的属性。
    因为本教程你想要复制所有列和在目标表中创建相同的列,你不需要对Member Properties窗口的Column Selection或Column Mapping标签做任何修改。默认目标表包含注册源的所有列。

联邦数据提示:
如果你的公司的复制配置映射一个数据源表到一个存在的目标表且至少有一个表是来自非DB2数据库,可以查看Federated Systems Guide获取更多信息,怎么映射数据源列到存在的目标表的列。

Member Properties 窗口的一个例子如图2.

图2. Member Properties 窗口

db2 什么情况下需要执行reorg指令 db2 replication_表空间_03

  1. 在Member Properties窗口的Target-Table Index标签:
  1. 点击Create your own index
  2. 从Available columns in the target列表选择DEPTNO
  3. 点击move按钮 (>) 来移动DEPTNO列到Columns used in the index列表
  4. 确认Use selected columns to create primary key被选择使用DEPTNO列作为目标表的主健
  1. 在Member Properties窗口的Row Filter标签,在WHERE statement框输入:
    DEPTNO >='E00'
    这个where显示哪些你想复制满足条件的行,只有哪些department number大于等于E00的行。选在目标表将保护8行而不是14行记录
  2. 在Member Properties窗口的Target-Table Table Space标签,为新的TSTGDEPTCOPY表空间指定以下信息:
  1. 在Specification for table space区间点击Container name框为TSTGDEPTCOPY表空间指定容器名。
  2. 在Specification for table space区间设置Size为1
  3. 在Specification for table space区间修改Unit为MB
  4. 为新的表空间指定其它信息;例如设置buffer pool为IBMDEFAULTBP
  1. 点击OK关闭Member Properties窗口。本教材你还不需要对Target load options标签做任何设置
  2. 在Create Subscription Set窗口的Schedule标签,修改minutes为1,Apply程序将每分钟处理这个subscription set。保留Start date, Start time, Time-based, 和 Use relative timing为默认值
  3. 在Create Subscription Set窗口的Statements标签,点击Add来打开Add SQL Statement or Procedure Call窗口。使用这个窗口来定义处理subscription set时运行的SQL。在Add SQL Statement or Procedure Call窗口输入以下信息:
  4. 在SQL Statement框输入:
    DELETE FROM ASN.IBMSNAP_APPLYTRAIL WHERE LASTRUN < (CURRENT TIMESTAMP - 7 DAYS) 这个语句将删除IBMSNAP_APPLYTRAIL表超过7天的数据
    Apply程序在处理subscription set之后执行您在目标服务器上添加的SQL语句。 由于Apply control server 和target server位于同一位置,并且IBMSNAP_APPLYTRAIL表位于Apply control server上,所以SQL语句必须在目标服务器上运行。
Tip  
Apply程序运行在每个subscription周期中添加到subscription set的SQL语句或过程。 这个例子是无效的,因为Apply程序每分钟都会执行这个语句,尽管这个语句只能从IBMSNAP_APPLYTRAIL表中删除数据,最多每隔24小时删除一次。
2. 设置SQLSTATE值为02000点击Add。这个SQL state标示”行找不到“错误,Apply程序会忽略这些错误。

Tip  
你的Apply程序可以为subscription set设置10个SQL state
3. 点击OK来关掉Add SQL Statement or Procedure Call窗口
  1. 点击OK关闭Create Subscription Set窗口
  2. 在Messages and SQL Scripts窗口点击Close。窗口将显示更新Apply control tables 和 create the target table的SQL脚本。如果有错误也会在这个窗口显示。
  3. 在Run Now or Save SQL窗口点击OK来立即处理SQL脚本。或者,将SQL脚本保存到文件以备将来使用,现在也可以运行它:
  1. 选择Save to file
  2. 设置Save specifications信息,如文件名
  3. 点击Apply来保存文件。如果脚本有多部分,你没有选择Save multiple scripts in one file选项,每部分保存到文件,文件名使用你指定的文件名加上一个数字。Run Now or Save SQL窗口保持打开。
  4. 选择Run now
  5. 点击OK来运行脚本并且关闭Run Now or Save SQL窗口

你会收到成功失败的消息

  1. 点击Close
  2. 展开COPYDB数据库的Apply Control Servers目录,点击Subscription Sets目录。Subscription Sets目录的内容面板会显示DEPTSUB subscription set。 如图3

图3. COPYDB数据库列出DEPTSUB subscription set

db2 什么情况下需要执行reorg指令 db2 replication_数据库_04

步骤6:创建一个Apply password file

因为Apply程序需要连接Capture control server,Apply control server和 the target server,你必须创建一个password file来为用户授权。因为password file的内容是加密的,尽管你可以修改这个文件,但只有Apply程序可以读取这个文件。

操作

创建Apply password file:

  1. 打开Windows命令行,修改的C:..\sqllib\bin目录。
  2. 输入以下命令来创建一个默认password file:
asnpwd init using "path"

path是你创建password file指定的完整目录和文件名。你会看到信息ASN1981I,确保命令行成功运行。
例如,如果你想保存password file到c:\sqllib\repl目录,文件名为asnpwd.aut,输入以下命令:

asnpwd init using "c:\sqllib\repl\asnpwd.aut"

c:\sqllib\repl\asnpwd.aut是password file的完整路径和文件名

Tip
在您启动Apply程序的目录中创建密码文件。 当您启动Apply程序时,您可以指定password file的文件名(使用PWDFILE关键字)以及Apply程序将存储其日志和工作文件(使用APPLY_PATH关键字)的目录的值。 password file是Apply程序的工作文件之一。 3. 输入以下命令为每个Apply程序需要连接的数据库添加用户ID和密码信息:

asnpwd add alias SAMPLE id userid password password using "path"

userid需要拥有权限来更新Capture和Apply control表,password是这个用户的密码,path是你创建的password file的完整路径。当你看到ASN1981I标示命令执行成功。