为 Oracle GoldenGate 准备 Db2 z/OS 事务处理日志
了解如何配置 Db2 事务处理日志记录以支持 Oracle GoldenGate Extract 捕获的数据。
Oracle GoldenGate 可以从活动和归档日志中捕获 Db2 事务处理数据。按照以下准则配置日志,以便 Extract 可以捕获数据。
要为 Oracle GoldenGate for Db2 z/OS 启用更改捕获,请参阅为非 Oracle 数据库启用 TRANDATA
启用对日志记录的访问
激活 Db2 Monitor Trace Class 1 ("TRACE(MONITOR) CLASS(1) "),以便 Db2 允许 Extract 读取活动日志。OPX 的默认目标已足够,因为 Oracle GoldenGate 不使用目标。
手动启动跟踪
-
以具有
TRACE权限或至少具有SYSOPR权限的 Db2 用户身份登录到 Db2。 -
发出下列命令:
start trace(monitor) class(1) scope(group)
在启动 Db2 时自动启动跟踪
请执行以下两个操作之一:
-
在
DSNTIPN安装跟踪面板上将MONITOR TRACE设置为 "YES"。 -
在
DSNTIJUZ安装作业中设置‘DSN6SYSP MON=YES’,如 Db2 UDB 安装指南中所述。
注: ODBC 计划执行程序的主授权 ID 或辅助授权 ID 之一还必须具有 MONITOR2 权限。
大小和保留日志
使用 DATA CAPTURE CHANGES 定义表时记录的数据比使用 DATA CAPTURE NONE 定义表时记录的数据多。如果满足以下任一条件,则可能需要增加活动日志和归档日志的数量和大小。
-
您的应用程序会生成大量 Db2 数据。
-
您的应用程序不经常提交。
-
您希望长时间停止提取。
-
您的网络不可靠或缓慢。
使用 DSNTIJUZ 安装作业中的 DSN6LOGP MAXARCH 系统参数控制日志保留。
保留足够的日志数据,以便提取可以在停止后或计划外停机后从其检查点重新开始。提取必须有权访问包含最早未提交工作单元的开始时间的日志以及之后的所有日志。
如果在联机日志或归档日志中未保留提取处理期间需要的数据,则可能需要以下更正操作之一:
-
更改提取以从日志数据可用的较晚时间点捕获日志数据(并接受目标上可能的数据丢失)。
-
重新同步源表和目标表,然后重新启动 Oracle GoldenGate 环境。注: IBM 文档提供了改进日志读取性能的建议。特别是,可以使用大型日志输出缓冲区、大型活动日志并将归档文件设置为磁盘。
在磁带上使用归档日志
Oracle GoldenGate 可以读取磁带上的 Db2 归档日志,从而降低性能。例如,Db2 为单个恢复任务保留磁带归档文件,导致 Extract 在恢复完成之前无法读取用于恢复表的归档磁带。您可以使用 DFHSM 或等效工具在联机 DASD 存储和磁带之间无缝移动归档日志,但 Extract 必须等待传输完成。提取处理中的延迟会增加源数据与目标数据之间的延迟。
如果 Oracle GoldenGate Extract 可以或将要从磁带(物理磁带或虚拟磁带)读取,强烈建议确保考虑以下 ZPARMs:
交易
DEALLCT 子系统参数确定在取消分配归档读取磁带单元之前允许其保持未使用状态的时间长度。
更新:面板 DSNTIPB 上的选项 43
DSNZPxxx: DSN6LOGP DEALLCT
Oracle 建议将 DEALLCT 设置为 0、1(1 秒取消分配延迟)。默认值是立即取消分配。这将阻止 Db2 在提取的读取之间立即重新分配磁带。
MAXRTU
MAXRTU 子系统参数指定可分配给并发读取归档日志磁带卷的专用磁带单元的最大数量。
更新:面板 DSNTIPB 上的选项 43
DSNZPxxx: DSN6LOGP MAXRTU
缺省值为 2 个磁带单元,但应将其设置为可能从 tape+1 并发读取的预期进程数。例如,如果有 4 个提取和 2 个其他应用程序可以从磁带读取,则 MAXRTU 应至少为 7 (4 + 2 + 1)。
为了在从磁带读取时实现最佳性能和最小延迟,Oracle GoldenGate Extract 应使用:
TRANLOGOPTIONS BUFSIZE 33554432
这将指示 Extract 一次从事务处理日志读取多达 32MB,而不是默认每次读取 1MB。此设置不会增加 Oracle GoldenGate 在 z/OS 上使用的内存分配,即 ECSA(64 字节)或 64 位共享内存 (1MB)。当提取读取大型缓冲区时,Db2 瞬态内存分配可能会增加。
此外,在 Extract 参数文件中,在 DBLOGIN 参数之前,还可以使用以下内容来进一步优化 Db2 驱动程序 TCP 通信缓冲。例如:
SETENV(DB2SOSNDBUF='524288')
SETENV(DB2SORCVBUF='524288')
这将通知 Db2 驱动程序将 512KB 用于发送缓冲区和接收器缓冲区。其他值可以使用,并且对于每个安装都是可调的。
控制日志刷新
读取事务处理日志时,提取在获取提交记录之前不会处理事务处理。如果提交记录位于未满的数据块上,则在生成更多日志活动以完成该块之前,无法捕获该记录。Extract 用于读取日志的 API 仅检索完整的物理数据块。
接收包含提交的块的延迟可能会导致源数据与目标数据之间的延迟。如果应用程序没有生成足够的日志记录来填充块,则 Extract 将通过发出 SAVEPOINT 和 COMMIT 语句来生成日志记录,直到块以一种或另一种方式填充并释放。
在数据共享组中,每个 API 调用都会导致 Db2 刷新所有活动成员的数据块,从而无需提取执行刷新。
要防止提取执行刷新,请将提取参数 TRANLOGOPTIONS 与 NOFLUSH 选项一起使用。