发新话题
打印

DB2日志传送基础知识

DB2日志传送基础知识

本文描述了在开放系统上使用 IBM® DB2® Universal Database™ 时配置日志传送的概念和实现。由于数据库系统对于企业成功变得越来越重要,对于全天不间断(24x7)可用性的需求也就变得前所未有地强烈。一种常见的提供 99.99%(或“四个九”)可用性的方法是实现“热”备用数据库服务器。使用备用服务器并不是个新概念;数据库管理员(DBA)们已经使用该方法多年了。通常,备用服务器需要 DBA 或操作员手工创建主系统上数据库和日志的备份,然后定期地将这些备份恢复到备用服务器上。如果主服务器发生故障,则宕机时间仅限于处理自从将最近一次备份恢复到备用服务器以来的日志文件所需的时间量。
备用服务器故障转移通常并不是自动的。相关人员必须确定启用备用服务器所花费的时间是否少于修复主系统上的原始故障所花的时间。
日志传送是什么?

日志传送(log shipping)是一种方法,它自动从主 DB2 服务器备份事务日志,并使该备份自动对备用服务器可访问。一旦将日志文件放到了备用服务器上,它就可以保持与主服务器的相对同步。
为什么要花费力气实现日志传送?

日志传送有什么好处,您为什么要花费时间设置它呢?日志传送提供了下列优点:

无需昂贵的软件或硬件即可实现冗余故障转移系统。无论从硬件还是软件角度来看,主服务器和备用服务器不必相同。备用服务器可以用于其它用途;而不必长期闲置。例如,当辅助数据库因处理进入的日志文件而处于不可访问状态时,可以在备用服务器上运行另一个独立数据库。
一旦设置好,配置成本相对低廉并且易于维护。
有非常可靠的方法用于提供数据库的冗余副本。
由于数据库处于前滚方式,因此它提供了热备用,热备用使数据库启动,并且已经准备好数据高速缓存。
能够被配置成当故障出现时允许极少量的数据损失(如果有数据丢失的话)。
实现和维护配置的成本相对低廉。
支持本地位置和灾难(远程)方案。
有没有局限?

日志传送有一些局限。与 HACMP 或 Veritas Cluster 那样的系统不同,它不提供完整的功能。但是,它也不需要额外的硬件或软件。这可以归结为一个权衡成本与可用性及复杂性的问题。对于大多数需要冗余系统,但在故障转移方案期间可以接受一些数据丢失的客户而言,日志传送是一种实用的解决方案。
只有使用附加软件,才能使日志传送彻底自动化。DBA 或操作员仍然必须在发生故障时手工地将主服务器的功能转移到备用服务器;但可以为这个故障编制脚本以最大限度地减少人为干预。用户被中断的时间,等于重播一个或多个日志文件并从任何不完整的事务回退所需时间的总和,外加重新连接用户的应用程序所需的时间。使备用数据库联机所需的时间取决于该备用服务器处理进入的日志文件的频率,以及日志文件的大小。
一旦将数据库切换到备用服务器,就必须更改客户机应用程序,使它也能指向新的服务器。或者,您可以转移该服务器的主机名和 IP 地址。
操作方面的考虑事项 — 何时重新初始化备用数据库

在 DB2 上重建索引时,会将一条日志记录写入日志,以表明该操作已启动。当备用数据库处理这条日志记录时,它不会在备用服务器上自动重建该索引。(通过设置数据库管理器 INDEXREC 配置值)可以将 DB2 配置为在其脱离前滚暂挂状态(例如,接管时)之后,第一次连接到数据库就重建索引,或者配置为在第一次尝试访问索引时进行重建。无论使用哪种方法,在发生系统故障转移时,最终用户都会察觉性能下降。防止这种情况的方法之一,是从主数据库的备份映像重新填充备用数据库,或者在重建索引时使用 I/O 暂挂和分离镜像技术进行刷新。
在主数据库上运行 DB2 装入实用程序会影响备用数据库服务器。当调用 LOAD 命令时,可以选择让装入实用程序制作所装入的表空间的备份映像,或者将备份映像的创建延迟到将来某个时间。如果选择让装入实用程序创建备份映像,则备用服务器必须有权访问装入实用程序所用的目标设备。如果选择以后再进行备份,或者在重播装入日志记录时备份映像不可用,那么备用服务器会将被装入的表空间置于恢复暂挂状态。在两种情况下,您都应该在装入操作完成后刷新备用数据库,以确保在需要进行故障转移的情况下,备用服务器上的所有数据都是可访问的。
先决条件

以下是在 DB2 上设置和配置日志传送之前必须满足的先决条件:

主系统和备用系统都必须运行同一版本的 DB2。可以故障转移到备用服务器以便在主系统上安装 DB2 的新修订包;但是,版本必须相同或更高。不能使用这种方法“回退”到某个修订包,因为两个系统不仅必须运行同一级别的 DB2,而且还必须运行同一级别的操作系统。
备用系统可用于数据库和日志文件的磁盘空间必须至少和主系统的一样多。您必须考虑在故障转移到备用服务器时,主服务器可能几天都无法使用的可能性。
必须在备用服务器上配置主服务器为数据库维护而运行的所有自动化进程。DB2 只允许为每个实例配置一个用户出口程序。如果备用服务器上已经有一个活动的数据库,那么它使用的 DB2 实例应该独立于主系统的 DB2 实例。
备用服务器上的日志归档目标必须可访问。在故障转移之后,必须保存日志文件,以便使主数据库能够恢复联机。
必须在备用系统上恢复完整的数据库备份,以初始化热备用。在创建该备份之后,主系统上生成的所有日志文件也是必需的。
有哪些选项可用?

用 DB2 实现日志传送有多种方法。本文讨论了一些较为流行的方法。
在所有情况下,备用服务器都需要一个定期发出 db2 rollforward db to end of logs 命令的调度作业。这个命令运行的频率决定了在故障转移情形下使备用服务器可用的速度。
这种频率还可以用作保护数据库不受应用程序错误破坏的方法。例如,如果备用服务器一直保持比主服务器落后几小时的状态,一个应用程序破坏了数据库中的数据,那么可以将数据库故障转移到备用服务器,以“回退”毁坏的数据,而对用户影响却很小。
所有日志传送配置都是用用户出口程序实现的。这是唯一可以用来在 DB2 中管理日志文件的方法。当一个日志文件满了的时候,DB2 记录器就将它归档。然后由 db2uext 可执行文件负责处理该日志文件。
日志传送是否有不同的类型?

日志传送有两种方法。在 拉出方法中,备用服务器在需要时从中央共享位置(如日志归档目标)拉出日志文件。在 推方法中,主服务器确保当它归档主日志文件时使这些日志文件驻留在备用服务器上。
DB2 将日志文件归档到用户出口程序 db2uext2 所指定的目标目录中。该用户出口程序的样本位于 DB2 实例目录 sqllib/samples/c 中。其中包括了用于磁盘、磁带和 Tivoli® Storage Manager 的示例。

DB2的数据同步经验总结

规划方案



假定您将使用一个生成报告的应用程序。此应用程序需要存在于 SAMPLE 数据库的 DEPARTMENT 表中的数据。您不想使用直接来自源表的数据,而想将更改复制到只能由生成报告的应用程序读取的目标表中。为了便于管理,您要将目标表与源表保存在同一机器上。也可以是已编目导本地机器的网络上的其它数据库。



数据复制方案实施步骤


开始之前



1. 首先确定在将要实施复制计划的机器上已经安装db2,已经建立实例。



2. 确定您将要用户复制的源数据库和目标数据库,可以在同一台机器上,也可以是在网络上的数据库,需要编目到本地。



3. 确定您对源数据库和目标数据库有存取权限。假定源数据库是sample库,目标数据库是copydb库。



4. 在您的机器上建立copydb库。



规划此方案



1. 复制源



您已经知道了复制源就是 sample数据库中的 schema .DEPARTMENT 表。在设置您的环境之前,必须决定想从该表中复制哪些内容;您决定注册所有列并预订所有列。



2. 复制目标



您决定想要复制目标是 copydb数据库,该数据库是在开始之前中创建的。目前,该数据库中没有任何目标表;您想让复制中心根据您的规范来创建目标表。这种自动生成目标表的方法是优先可取的,原因是它可以确保正确映射至复制源。还可以使用现有的目标表,但是,本方案假定目标表不存在。



3. 复制选项



出于本方案的目的,您决定将 CD 表、目标表和复制控制表分别存储在它们的缺省表空间中。尽管 SAMPLE 和 COPYDB 数据库存在于同一机器上,但是,它们的表空间却位于不同容器中。



为此方案规划设置环境



步骤1:为Capture程序创建控制表



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



1. 打开复制中心,展开 SQL 复制 文件夹。



2. 展开 定义 文件夹。



3. 右键单击 Capture 控制服务器 文件夹并选择 创建 Capture 控制表 -> 快速 。或者,可通过选择 创建 Capture 控制表 -> 定制 来定制 Capture 控制表。



4. 在“选择服务器”窗口中,选择 SAMPLE 数据库。此数据库将作为 Capture 控制服务器。单击 确定 。



5. 在“创建控制表 - 快速 - 服务器信息”窗口中,选择 主管用于复制和捕获对那些源的更改的源 。然后,单击 下一步 。



6. 在“创建控制表 - 快速 - 复制详细信息”窗口中,单击 下一步 。不需要更改此窗口中的任何信息。



7. 在“创建控制表 - 快速 - 表空间”窗口中,输入 TSASNCA 表空间的表空间规范。例如,将缓冲池设置为 IBMDEFAULTBP。对于本方案,接受缺省 Capture 模式 - ASN。



8. 在“创建控制表 - 快速 - 表空间”窗口中,输入 TSASNUOW 表空间的表空间规范。



9. 在“创建控制表 - 快速 - 表空间”窗口中输入了这两个表空间的信息之后,单击 确定 。



10. 单击“消息对话框”窗口上的 关闭 。此窗口显示生成将创建 Capture 控制表的 SQL 脚本的结果。如果产生了任何错误,这些错误就会显示在此窗口中。



11. 在“立即运行或保存 SQL”窗口中输入有效的用户标识和密码,并单击 确定 以立即运行 SQL 脚本。



12. 在“DB2 消息”窗口中应当看到一条消息指出已成功运行脚本。单击 关闭 。



13. 展开 Capture 控制服务器 文件夹。SAMPLE 数据库应当显示在该文件夹中。



步骤2:为复制启用数据库



Capture 程序读取 DB2 日志,以获取包括对注册的表的更改的日志记录。日志必须是归档日志,以便在 Capture 程序可以读取日志之前,DB2 将不会再使用日志文件。对于 UNIX(R) 和 Windows 环境,DB2 缺省值是循环日志记录,因此,必须将此设置更改为归档日志记录。



步骤3:注册复制源



在创建了 Capture 控制表并为复制启用了数据库之后,将 DEPARTMENT 表注册为复制源。



注册步骤:



1.展开 SQL 复制 文件夹。



2.展开 定义 文件夹。



3.展开 Capture 控制服务器 文件夹。



4.展开 SAMPLE 数据库。



5.展开 Capture 模式 文件夹。



6.展开 ASN 模式。



7.右键单击 注册的表 文件夹并选择 注册表 。



8.在“添加可注册的表”窗口中,单击 全部检索 以列示 SAMPLE 数据库中您可以注册为复制源的所有表。选择 DEPARTMENT 表并单击 确定 。



9.在“注册表”窗口中,单击 CD 表 笔记本选项卡。指定有关 CD 表空间的下列信息:



o 在 表空间的规范 区域中,单击 容器名 字段以指定 TSCDDEPARTMENT 表空间的容器名。



o 在 表空间的规范 区域中,将 大小 字段更改为 1。



o 在 表空间的规范 区域中,将 单位 字段更改为 MB。



o 指定此新表空间的其它信息;例如,将缓冲池设置为 IBMDEFAULTBP。



在输入了表空间信息之后,单击 确定 。



10.单击“消息对话框”窗口上的 关闭 。 | 此窗口显示生成将注册源表的 SQL 脚本的结果 。如果产生了任何错误,这些错误就会显示在此窗口中。



11.单击“立即运行或保存 SQL”窗口上的 确定 以立即运行 SQL 脚本。



12.在“DB2 消息”窗口中应当看到一条消息指出已成功运行脚本。单击 关闭 。



13.SAMPLE 数据库文件夹的内容窗格中现在应当将 DEPARTMENT 表显示为注册的表。

步骤4:为Apply程序创建控制表



Apply 程序从复制控制表中读取当前的预订集信息,并将它的状态存储在这些表中。将充当 Apply 控制服务器的任何数据库都必须包含 Apply 控制表。



1.展开 SQL 复制 文件夹。



2.展开 定义 文件夹。



3.右键单击 Apply 控制服务器 文件夹并选择 创建 Apply 控制表 -> 快速 。或者,可通过选择 创建 Apply 控制表 -> 定制 来定制 Apply 控制表。



4.在“选择服务器”窗口中,选择 COPYDB 数据库。此数据库将作为 Apply 控制服务器。单击 确定 。



5.在“创建控制表 - 快速 - 服务器信息”窗口中,选择 应用已捕获的对目标表的更改 。然后,单击 下一步 。



6在“创建控制表 - 快速 - 复制详细信息”窗口中,单击 下一步 。不需要更改此窗口中的任何信息。



7.在“创建控制表 - 快速 - 表空间”窗口中,输入 TSASNAA 表空间的表空间规范。例如,将缓冲池设置为 IBMDEFAULTBP。单击 确定 。



8.单击“消息对话框”窗口上的 关闭 。此窗口显示生成将创建 Apply 控制表的 SQL 脚本的结果。如果产生了任何错误,这些错误就会显示在此窗口中。



8.在“立即运行或保存 SQL”窗口中输入有效的用户标识和密码,并单击 确定 以立即运行 SQL 脚本。



9.在“DB2 消息”窗口中应当看到一条消息指出已成功运行脚本。单击 关闭 。



10.展开 Apply 控制服务器 文件夹。COPYDB 数据库应当显示在该文件夹中。



步骤5:创建预订集和预订集成员



在注册源表之后,需要创建预订集。预订集将定义复制源数据库(在本方案中为 SAMPLE)与目标数据库(在本方案中为 COPYDB)之间的关系。预订集成员定义复制源表(在本方案中为 DEPARTMENT)与一个或多个目标表(本方案中只有一个目标表,它将称为 DEPTCOPY)之间的关系。



制定预订集和预订集成员步骤:



1.展开 SQL 复制 文件夹。



2.展开 定义 文件夹。



3.展开 Apply 控制服务器 文件夹。



4.展开 COPYDB 数据库。



A.右键单击 预订集 文件夹并选择 创建 。



还可以通过选择 SAMPLE 数据库的 注册的表 文件夹,右键单击内容窗格中的 DEPARTMENT 表并选择 创建预订集 来创建预订集。



B.在“创建预订集”窗口的“集信息”页中输入以下信息:



a. 在 预订集名称 字段中输入 DEPTSUB。此字符串标识预订集,并且,对于特定的 Apply 限定符,此字符串必须是唯一的。



b. 在 Apply 限定符 字段中输入 DEPTQUAL。此字符串标识对于将运行此预订集的 Apply 程序的实例来说是唯一的复制定义。



技巧



Apply 限定符是区分大小写的。如果想要 Apply 限定符采用小写字符,则当您输入该限定符时必须对它进行定界;例如,"deptqual"。缺省情况下,如果您只是输入 deptqual,则复制中心将把该值转换为大写字符。



c. 对 Capture 控制服务器别名 字段单击浏览按钮。在“选择 Capture 控制服务器”窗口中,选择 SAMPLE 数据库,并单击 确定 。



d. 对 目标服务器别名 字段单击浏览按钮。在“选择目标服务器”窗口中,选择 COPYDB 数据库并单击 确定 。COPYDB 数据库既是目标服务器又是 Apply 控制服务器。



e. 选择 激活预订集 复选框。



7.在“创建预订集”窗口的“源到目标映射”页中输入以下信息:



a.单击 添加 以将已注册的源添加至预订集成员。



b.在“添加已注册的源”窗口中,单击 全部检索 以显示 SAMPLE 数据库中的所有已注册的源。



c.在“添加已注册的源”窗口中,选择 DEPARTMENT 表,并单击 确定 。



d.在“创建预订集”窗口的“源到目标映射”页中,将目标表的名称从 TGDEPARTMENT 更改为 TGDEPTCOPY:在预订集成员表的 目标名 列中选择 TGDEPARTMENT,并输入TGDEPARTCOPY以覆盖缺省名称。



e.单击 更改 以打开“成员属性”窗口。从此窗口中,可以定义预订集成员的属性。



8.在“成员属性”窗口的“目标表索引”页中:



a. 从 目标中的可用列 列表中选择 DEPTNO 列。



b. 单击移动按钮( > )来将 DEPTNO 列移至 在索引中使用的列 列表。



c. 选择 使用选择的列来创建主键 来将 DEPTNO 列用作目标表的主键。



9.在“成员属性”窗口的“行过滤”页中,在 WHERE 语句 字段中输入以下子句:



DEPTNO >=’E00’



此 WHERE 子句指示您只想复制满足某些条件的那些行;在本例中,就是只复制部门号大于或等于“E00”的那些行。此 WHERE 子句将导致目标表只包含三行,而不是包含所有九行.







10.在“成员属性”窗口的“目标表表空间”页中,指定有关新的 TSTGDEPTCOPY 表空间的以下信息:



o 在 表空间的规范 区域中,单击 容器名 字段以指定 TSTGDEPTCOPY 表空间的容器名。



o 在 表空间的规范 区域中,将 大小 字段更改为 1。



o 在 表空间的规范 区域中,将 单位 字段更改为 MB。



o 指定此新表空间的其它信息;例如,将缓冲池设置为 IBMDEFAULTBP。



还可以指定此新表空间的其它信息;例如,将缓冲池设置为 IBMDEFAULTBP。



11.单击 确定 以关闭“成员属性”窗口。对于此方案,不需要对 目标装入选项 选项卡执行任何操作。



12.在“创建预订集”窗口的“调度”页中,将分钟数更改为 1,以便 Apply 程序每隔一分钟就要处理此预订集一次。使用 复制频率 区域中的 分钟数 字段上的旋钮来选择 1 分钟的时间间隔(或者在该字段中输入 1)。



保留 起始日期 、 起始时间 、 基于时间 和 使用相对定时 的缺省值。



13.在“创建预订集”窗口的“语句”页中,单击 添加 以打开“添加 SQL 语句或过程调用”窗口。使用此窗口来定义将在运行预订集时处理的 SQL 语句。在“添加 SQL 语句或过程调用”窗口中输入以下信息:



a.在 SQL 语句 字段中输入:



DELETE FROM ASN.IBMSNAP_APPLYTRAIL WHERE LASTRUN



< (CURRENT TIMESTAMP - 7 DAYS)



此语句将删除 Apply 跟踪表中 7 天之前的任何记录。



Apply 程序将执行在处理预订集之后在目标服务器中添加的 SQL 语句。SQL 语句必须在目标服务器中运行,这是因为 Apply 控制服务器与目标服务器是驻留在同一位置的,并且 Apply 跟踪表在 Apply 控制服务器中。

技巧:



Apply 程序运行您在每个预订周期中添加至预订集的 SQL 语句或过程。此示例效率比较低,这是因为 Apply 程序每一分钟都将执行此语句,尽管该语句每 24 个小时最多只删除 APPLYTRAIL 表中的数据一次。



b.在 SQLSTATE 字段中,输入 02000,并单击 添加 。此 SQL 状态指示“找不到行”错误是可以接受的,并且 Apply 程序应当忽略这些错误。



技巧:



对于此预订集,最多可以定义想要 Apply 程序忽略的十种 SQL 状态。



c.单击“确定”以关闭“添加 SQL 语句或过程调用”窗口。



14单击 确定 以关闭“创建预订集”窗口。



15.单击“消息对话框”窗口上的 关闭 。此窗口显示生成将更新 Apply 控制表并创建目标表的 SQL 脚本的结果。如果产生了任何错误,这些错误就会显示在此窗口中。



16.单击“立即运行或保存 SQL”窗口上的 确定 以立即运行 SQL 脚本。



可以将 SQL 脚本保存到一个文件中以供将来使用,也可以立即运行它:



a. 选择 保存至文件 。



b. 在 保存规范 区域中填充一些信息,例如,文件名。



c. 单击“应用”以保存该文件。如果脚本具有多个部分,而您未选择 将多个脚本保存到一个文件中 复选框,则将使用您指定的名称加上一个数字来将每一部分保存到一个独立的文件中。“立即运行或保存 SQL”窗口将保持打开状态。



d. 选择 立即运行 。



e. 单击 确定 以运行脚本,并关闭“立即运行或保存 SQL”窗口。



还可以将 SQL 脚本保存到一个文件中,以后再运行它,也可以保存 SQL 脚本并运行它。



17.在“DB2 消息”窗口中应当看到一条消息指出,同时在 SAMPLE 和 COPYDB 服务器上成功运行了脚本。单击 关闭 。



18.展开 Apply 控制服务器 文件夹和 COPYDB 数据库 ,然后单击 预订集 文件夹。 预订集 文件夹的内容窗格现在应当显示 DEPTSUB 预订集。



步骤6:创建Apply程序密码文件



因为 Apply 程序需要连接至 Capture 控制服务器、Apply 控制服务器和目标服务器,所以,必须创建一个密码文件以进行用户认证。因为密码文件的内容已加密,所以,只有 Apply 程序可以读取该文件,尽管您可以修改该文件。



创建密码文件步骤:



1.打开操作系统的命令行窗口,然后进入db2的sqllib\bin目录中,执行:



Asnpwd init using “path:/sqllib/repl/asnpwd.aut”



2. 输入以下命令来为 Apply 程序必须连接至的每个数据库添加用户标识和密码信息:asnpwd add alias sample id userid password password using “path”



步骤7:启动capture和apply程序



打开系统命令行窗口,执行: Asncap asncap_server=sample capture_schema=ASN startmode=cold



Asnapply CONTROL_SERVER=copydb apply_qual=deptqual
发新话题