Q Capture与Q Apply管理全解析
在数据处理与管理的领域中,Q Capture和Q Apply是非常重要的工具,它们在数据复制和传输方面发挥着关键作用。下面将详细介绍它们的相关管理操作和技术要点。
1. 获取Q Capture重启队列信息
若要从DB2日志的某个点启动Q Capture,就需要从重启队列中获取
qRestartMsg.restartLSN
和
qRestartMsg.lastCommitSEQ
的值。以单向复制为例,重启队列名为
CAPA.RESTARTQ
,队列管理器名为
QMA
,使用以下命令获取信息:
$ asnqmfmt CAPA.RESTARTQ QMA
执行该命令后,会输出一系列信息,从中可以看到
qRestartMsg.restartLSN
和
qRestartMsg.lastCommitSEQ
的值。
如果不知道重启队列的名称,可以使用以下查询语句来查找:
db2 "SELECT SUBSTR(qmgr,1,10) AS qmgr, SUBSTR(restartq,1,20) AS restartq
FROM asn.ibmqrep_capparms "
查询结果示例如下:
| QMGR | RESTARTQ |
| ---- | ---- |
| QMA | CAPA.RESTARTQ |
2. Q Capture和Q Apply的管理方式
Q Capture和Q Apply可以通过复制中心或命令行进行管理,这里主要介绍命令行方式。由于Q复制的异步特性,在热启动/停止Q Capture和Q Apply时,顺序无关紧要。但在多向复制中,冷启动时启动顺序很重要,必须先启动所有Q Capture并使其正常运行,再启动Q Apply。
管理Q Capture的两个主要命令是
asnqcap
和
asnqccmd
,管理Q Apply的两个主要命令是
asnqapp
和
asnqacmd
。
3. Q Capture和Q Apply的日志
Q Capture和Q Apply的日志名称由以下部分组成:
- 实例名称
- Q Capture数据库服务器名称
- 控制表模式
- 标签(Q Capture为
QCAP.LOG
,Q Apply为
QAPP.LOG
)
例如,对于控制表位于DB2A数据库、模式为ASN的DB2实例中的Q Capture,其日志名称为
db2.DB2A.ASN.QCAP.log
。默认情况下,日志会写入程序启动的目录,或者由
CAPTURE_PATH
和
APPLY_PATH
启动参数指定的目录。如果日志文件不存在,在需要写入时会自动创建。为防止日志文件过大,可以定期重命名日志文件,但需要先停止Q Capture和Q Apply。若遇到问题,可以在启动命令后追加
DEBUG=Y
以调试模式启动。
4. Q Capture管理
4.1 Q Capture的主要任务
- 读取DB2日志,并将已提交的事务放入发送队列。
- 跟踪已处理的内容。
- 启动控制表的清理操作。
4.2 启动Q Capture
使用
asnqcap
命令启动Q Capture,该命令有众多参数,具体如下表所示:
| 参数 | 描述 |
| ---- | ---- |
| ADD_PARTITION=Y|N | 确定Q Capture是否开始读取自上次重启后添加的分区的日志文件。 |
| AUTOSTOP=Y|N | 到达日志末尾时终止Q Capture。 |
| CAPTURE_PATH= | Q Capture日志文件的位置。 |
| CAPTURE_SCHEMA= | 用于标识Q Capture的模式名称。 |
| CAPTURE_SERVER= | Q Capture控制服务器的名称(即源数据库)。 |
| COMMIT_INTERVAL=n|500 | 提交到WebSphere MQ的间隔时间(毫秒)。 |
| IGNORE_TRANSID=transaction_ID | 指定Q Capture忽略由transaction_ID标识的事务,这些事务不会被复制或发布。 |
| LOB_SEND_OPTION=I/S | 指定Q Capture是在事务消息中内联发送LOB值(I),还是在单独的消息中发送(S)。 |
| LOGRDBUFSZ=n|256 | 指定Q Capture从DB2检索日志记录时传递给DB2的缓冲区大小。 |
| LOGREUSE=Y|N | 重用或追加消息到日志文件。 |
| LOGSTDOUT=Y|N | 将消息发送到标准输出。 |
| LSN=formatted_lsn | 指定Q Capture在热重启时开始的日志序列号,指定该参数时必须同时指定MAXCMTSEQ参数。 |
| MAXCMTSEQ=formatted_lsn | Q Capture关闭前成功发送的最后一个事务的提交日志记录位置。 |
| MEMORY_LIMIT=n|32 | 从日志重建事务的最大字节数。 |
| MSG_PERSISTENCE=Y/N | 指定Q Capture是否将持久(已记录)消息写入WebSphere MQ队列。 |
| MONITOR_INTERVAL=n|300 | 插入监控表的间隔时间(秒)。 |
| MONITOR_LIMIT=n|10080 | 监控表行可清理的时间(分钟)。 |
| PRUNE_INTERVAL=n|300 | Q Capture尝试清理控制表的间隔时间(秒)。 |
| QFULL_NUM_RETRIES (RN)=N|30 | 指定重试次数,最多1000次,值为0表示MQPUT操作失败时停止。 |
| QFULL_RETRY_DELAY (RD)=N|250 | 指定Q Capture在MQPUT尝试之间等待的时间(毫秒),范围为10毫秒到3600000毫秒(1小时),默认延迟为250毫秒或COMMIT_INTERVAL参数的值,取较小者。 |
| SIGNAL_LIMIT=n|10080 | 信号表行可清理的时间(分钟)。 |
| SLEEP_INTERVAL=n|5000 | 到达日志末尾后休眠的时间(毫秒),默认值为5000毫秒,减小该值可能会降低Q Capture的延迟。 |
| STARTALLQ=Y/N | 指定Q Capture在启动时是否激活所有发送队列。 |
| STARTMODE=[ COLD|WARMSI|WARMSA|WARMNS ] | 启动模式,COLD表示从日志末尾开始读取,等待CAPSTART;WARMSI表示如果没有重启信息则初始切换到冷启动;WARMSA表示如果出错则始终切换到冷启动;WARMNS表示从不切换到冷启动。 |
| TERM=Y|N | 如果DB2终止,则终止Q Capture。 |
| TRACE_LIMIT=n|10080 | 跟踪表行可清理的时间(分钟)。 |
启动Q Capture的最小信息是Q Capture控制表的位置(如DB2A),通常还会指定Q Capture模式(默认为ASN)、Q Capture路径(日志写入位置)和启动模式。示例命令如下:
asnqcap capture_server=DB2A capture_schema=ASN capture_path=c:\temp startmode=WARMSI
Q Capture的启动参数存储在
IBMQREP_CAPPARMS
控制表中,可以使用相关SQL查询。如果启动Q Capture失败且未在相应目录创建日志文件,需要检查是否有有效的InfoSphere复制服务器许可证。
此外,还可以从DB2日志的已知点启动Q Capture,而无需对目标表进行完全刷新。通过提供
lsn
(要捕获的最旧未提交事务的日志序列号)和
maxcmtseq
(最近提交并放入发送队列的事务的LSN)的值,使用
asnqcap
命令启动。可以使用
asnqmfmt
命令或查看Q Capture日志中的
ASN7109I
消息来获取这些值。示例命令如下:
asnqcap CAPTURE_SERVER=db2a CAPTURE_SCHEMA=asn LSN=0000:0000:0000:023b:35f8 MAXCMTSEQ=4614:f4b1:0000:0001:0000
也可以不使用冒号指定
LSN
和
MAXCMTSEQ
的值以节省空间,例如
LSN=FFFFFFFFFFFFFFFFFFFF
。
4.3 管理运行中的Q Capture
使用
asnqccmd
命令管理运行中的Q Capture,其格式为:
asnqccmd [<parameter>=<value> ...] [command]
可能的参数包括:
-
CAPTURE_SCHEMA=
:用于标识Q Capture的模式名称。
-
CAPTURE_SERVER=
:Q Capture控制服务器的名称。
-
LOGSTDOUT=Y|N
:将消息发送到标准输出。
可能的命令包括:
-
CHGPARMS
:更改Q Capture的操作参数。
-
PRUNE
:清理Q Capture的控制表。
-
QRYPARMS
:查询Q Capture的操作参数。
-
REINIT
:重新初始化所有Q Capture订阅。
-
REINITQ
:重新初始化Q Capture的一个发送队列。
-
STATUS
:查询Q Capture线程的状态。
-
STATUS SHOW DETAILS
:查询Q Capture线程的增强状态。
-
STOP
:停止Q Capture。
例如,停止Q Capture的命令示例:
asnqccmd CAPTURE_SERVER=db2a STOP
查询Q Capture状态的方式有两种:
- 使用
asnqccmd
命令的
qryparms
选项检查Q Capture实际启动时的参数:
asnqccmd CAPTURE_SERVER=db2a QRYPARMS
-
使用
asnqccmd命令的STATUS选项查看Q Capture线程的状态:
asnqccmd CAPTURE_SERVER=db2a STATUS
使用
STATUS SHOW DETAILS
选项可以获得更详细的Q Capture状态报告,包括是否正在运行、程序启动后的时间、Q Capture诊断日志的位置、活动Q订阅的数量、当前日志时间和当前内存的值、Q Capture发布到发送队列的最后一个事务的逻辑日志序列号、Q Capture在最近监控间隔内从日志记录构建事务使用的内存量等信息。命令示例:
asnqccmd CAPTURE_SERVER=db2a STATUS SHOW DETAILS
4.4 修改运行中的Q Capture
修改运行中的Q Capture分两步:先更改参数,再重新初始化Q Capture。使用
asnqccmd
命令的
chgparms
关键字和以下参数之一临时更改Q Capture的参数:
autostop memory_limit signal_limit
commit_interval monitor_interval sleep_interval
logreuse monitor_limit term
logstdout prune_interval trace_limit
例如,将运行中的Q Capture的
monitor_interval
参数临时更改为10秒:
asnqccmd CAPTURE_SERVER=db2a CHGPARMS monitor_interval=10
如果要临时更改两个参数,参数之间用空格分隔:
asnqccmd capture_server=DB2A chgparms prune_interval=60 sleep_interval=10000
需要注意的是,这些命令只是临时更改运行中的Q Capture的参数。如果停止并重新启动Q Capture,它将从
IBMQREP_CAPPARMS
表中获取参数值。要使更改永久生效,需要更新
IBMQREP_CAPPARMS
表,示例SQL如下:
db2 "UPDATE asn.ibmqrep_capparms SET monitor_interval=10 WHERE qmgr= 'QMA' "
4.5 从DB2日志的特定点启动Q Capture
可以通过命令行参数从DB2日志的已知点启动Q Capture,而无需触发目标表的加载。具体步骤如下:
1. 确定
lsn
(要捕获的最旧未提交事务的日志序列号)和
maxcmtseq
(最近提交并放入发送队列的事务的LSN)的值。可以使用
asnqmfmt
命令或查看Q Capture日志中的
ASN7109I
消息来获取这些值。
2. 将获取的值插入
asnqcap
命令中,示例如下:
asnqcap CAPTURE_SERVER=db2a CAPTURE_SCHEMA=asn LSN=0000:0000:0000:023b:35f8 MAXCMTSEQ=4614:f4b1:0000:0001:0000
也可以不使用冒号指定
LSN
和
MAXCMTSEQ
的值以节省空间。
可以通过以下步骤测试从DB2日志的已知点启动Q Capture的概念:
1. 设置双向场景。
2. 让应用程序向服务器SYA上的表插入行。
3. 在应用程序运行时,取消服务器SYA上运行的Q Capture。
4. 使用
asnqmfmt
命令确定重启值。
5. 检查Q Capture日志以确定重启值。
6. 确认
asnqmfmt
命令和Q Capture日志中的重启值一致。
7. 使用
asnqcap
命令和适当的重启值重新启动Q Capture。
4.6 无加载启动Q Capture
要从日志末尾启动Q Capture而不触发目标加载,在
asnqcap
命令中指定所有
FFFF
:
asnqcap CAPTURE_SERVER=db2a CAPTURE_SCHEMA=asn LSN=FFFF:FFFF:FFFF:FFFF:FFFF MAXCMTSEQ=FFFF:FFFF:FFFF:FFFF:FFFF
4.7 进行Q Capture跟踪
使用
asntrc
命令进行Q Capture跟踪,需要在启动Q Capture之前打开跟踪:
asntrc on -db db2a -schema asn -qcap
然后启动Q Capture:
start asnqcap capture_server=DB2A startmode=cold
等待问题出现后,获取跟踪格式和跟踪流:
asntrc fmt -db db2a -schema asn -qcap > trc.fmt
asntrc flw -db db2a -schema asn -qcap > trc.flw
关闭跟踪:
asntrc off -db db2a -schema asn -qcap
可以使用任何文本编辑器查看跟踪输出:
notepad trc.flw
5. Q Apply管理
5.1 Q Apply的主要任务
- 识别Q订阅是否准备好处理。
- (如果指定)对目标表进行完全刷新。
- 将新更改从接收队列复制到目标表。
5.2 启动Q Apply
使用
asnqapp
命令启动Q Apply,该命令有众多参数,具体如下表所示:
| 参数 | 描述 |
| ---- | ---- |
| APPLY_PATH= | Q Apply工作文件的位置。 |
| APPLY_SCHEMA=ASN | 用于标识Q Apply的模式名称。 |
| APPLY_SERVER=DB2DBDFT | Q Apply控制服务器的名称。 |
| APPLYUPTO | Q Apply应用到指定时间戳后停止,该时间戳必须以格林威治标准时间(GMT)的完整或部分时间戳指定。如果使用该参数,应将心跳间隔设置为大于零的值,以便Q Apply能判断是否已过
APPLYUPTO
时间。 |
| AUTOSTOP=Y|N | 所有队列清空后终止Q Apply。 |
| BUFFERED_INSERTS=Y/N | 指定Q Apply是否使用缓冲插入,这在某些分区数据库中可以提高性能。 |
| CLASSIC_LOAD_FILE_SZ=500,000 | 经典加载文件大小。 |
| COMMIT_COUNT=
|1 | 指定每个Q Apply代理线程在一个提交范围内应用到目标表的事务数量。 |
| DEADLOCK_RETRIES=n|3 | SQL死锁错误的重试次数。 |
| DFTMODELQ | 指定Q Apply使用的模型队列名称,而不是
IBMQREP.SPILL.MODELQ
。 |
| DIAGLOG=Y|N | 将消息发送到日志文件(在V9.7.1中已弃用)。 |
| IGNBADDATA=Y|N | 对于联邦目标,指定Q Apply是否检查源数据中的非法字符(如果源和目标的代码页不同),并在发现非法字符时继续处理。 |
| INSERT_BIDI_SIGNAL=N|Y | 指定Q Capture和Q Apply是否使用
P2PNORECAPTURE
信号插入来防止双向复制中事务的重新捕获。 |
| LOADCOPY_PATH | 在HADR配置中,当主服务器由Q Apply调用DB2 LOAD实用程序加载时使用该参数。设置该参数会提示Q Apply启动LOAD实用程序,并在指定路径中创建加载数据的副本,HADR配置中的辅助服务器将在该路径中查找复制的数据。 |
| LOAD_DATA_BUFF_SZ=n|8 | 与多维集群(MDC)表一起使用,指定DB2 LOAD实用程序在初始加载目标表时用于在实用程序内传输数据的4KB页面数量,该参数仅适用于使用DB2 LOAD实用程序的自动加载。 |
| LOGREUSE=Y|N | 重用或追加消息到日志文件。 |
| LOGSTDOUT=Y|N | 将消息发送到标准输出。 |
| MAX_PARALLEL_LOADS=n|15 | 指定Q Apply对于给定接收队列可以同时启动的目标表自动加载操作的最大数量。 |
| MONITOR_INTERVAL=n|300 | 插入监控表的间隔时间(秒)。 |
| MONITOR_LIMIT=n|10080 | 监控表行可清理的时间(分钟)。 |
| NICKNAME_COMMIT_CT=n|10 | 指定在加载过程中,导入实用程序对引用目标表的昵称提交更改的行数,该参数仅适用于联邦目标的自动加载,必须使用导出和导入实用程序。 |
| P2P_2NODES= Y|N | 该参数允许Q Apply在仅有两个活动服务器的点对点配置中优化性能,通过不将冲突删除记录到
IBMQREP_DELTOMB
表中。仅在具有两个活动服务器的点对点复制中使用
p2p_2nodes = y
设置。 |
| PRUNE_INTERVAL=n|300 | Q Apply尝试清理控制表的间隔时间(秒)。 |
| PWDFILE=asnpwd.aut | 密码文件的名称。 |
| QMGR | 队列管理器名称。 |
| RICHKLVL=0|2|5 | 指定引用完整性检查的级别,默认情况下,Q Apply检查事务之间基于RI的依赖关系,以确保相关行按正确顺序应用。 |
| SKIPTRANS=”
” | 指定Q Apply不应基于事务ID应用一个或多个接收队列中的一个或多个事务。 |
| SPILL_COMMIT_COUNT=n|10 | 指定Q Apply溢出代理在加载操作期间复制数据时在一个提交范围内分组的行数。 |
| SQL_CAP_SCHEMA | SQL捕获模式。 |
| TERM=Y|N | 如果DB2终止,则终止Q Apply。 |
| TRACE_LIMIT=n|10080 | 跟踪表行可清理的时间(分钟)。 |
启动Q Apply的最小信息是Q Apply控制表的位置(如DB2B),通常还会指定Q Apply模式(默认为ASN)和Q Apply日志路径/密码文件位置。示例命令如下:
asnqapp APPLY_SERVER=db2b APPLY_PATH="C:\TEMP"
5.3 查看Q Apply启动参数
有两种方式查看Q Apply启动时的参数:
- 查询
IBMQREP_APPLYPARMS
控制表,使用相关SQL查询。
- 使用
asnqacmd
命令的
qryparms
选项,
asnqacmd
命令的格式为:
asnqacmd [<parameter>=<value> ...] [command]
可能的参数包括:
-
APPLY_SCHEMA=
:用于标识Q Apply的模式名称。
-
APPLY_SERVER=
:Q Apply控制服务器的名称。
-
LOGSTDOUT=Y|N
:将消息发送到标准输出。
可能的命令包括:
-
CHGPARMS
:更改Q Apply的操作参数。
-
PRUNE
:清理Q Apply的控制表。
-
QRYPARMS
:查询Q Apply的操作参数。
-
REINITQ
:如果队列处于活动状态,刷新队列的参数。
-
STATUS
:查询Q Apply线程的状态。
-
STATUS SHOW DETAILS
:查询Q Apply的增强状态。
-
STARTQ
:开始处理队列中的消息。
-
STOP
:停止Q Apply。
-
STOPQ
:停止处理队列中的消息。
-
TRCSTART
:开始将程序流信息写入Q Apply跟踪缓冲区(在V9.7中已弃用)。
综上所述,Q Capture和Q Apply在数据复制和管理中起着重要作用,通过合理使用相关命令和参数,可以实现高效的数据处理和管理。在实际应用中,需要根据具体需求和场景,灵活运用这些技术和方法,以确保数据的准确复制和传输。同时,要注意日志管理和参数设置,避免出现问题影响系统的正常运行。
Q Capture与Q Apply管理全解析
6. Q Apply管理操作示例
下面通过具体的示例,进一步展示如何使用
asnqapp
和
asnqacmd
命令进行Q Apply的管理操作。
6.1 启动Q Apply示例
假设我们要启动Q Apply,指定控制服务器为
db2b
,工作文件路径为
C:\TEMP
,模式为
ASN
,启动命令如下:
asnqapp APPLY_SERVER=db2b APPLY_SCHEMA=ASN APPLY_PATH="C:\TEMP"
6.2 查询Q Apply参数示例
若要查询Q Apply的操作参数,可使用
asnqacmd
命令的
QRYPARMS
选项:
asnqacmd APPLY_SERVER=db2b APPLY_SCHEMA=ASN QRYPARMS
6.3 更改Q Apply参数示例
若要将Q Apply的
monitor_interval
参数更改为20秒,使用
asnqacmd
命令的
CHGPARMS
选项:
asnqacmd APPLY_SERVER=db2b APPLY_SCHEMA=ASN CHGPARMS monitor_interval=20
6.4 停止Q Apply示例
停止Q Apply可使用
asnqacmd
命令的
STOP
选项:
asnqacmd APPLY_SERVER=db2b APPLY_SCHEMA=ASN STOP
7. Q Capture与Q Apply管理流程总结
为了更清晰地展示Q Capture和Q Apply的管理流程,下面给出相应的流程图。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B{选择操作对象}:::decision
B -->|Q Capture| C(获取重启队列信息):::process
B -->|Q Apply| D(确定控制表位置):::process
C --> E(启动Q Capture):::process
D --> F(启动Q Apply):::process
E --> G(管理运行中的Q Capture):::process
F --> H(管理运行中的Q Apply):::process
G --> I{是否需要修改参数}:::decision
H --> J{是否需要修改参数}:::decision
I -->|是| K(修改Q Capture参数):::process
J -->|是| L(修改Q Apply参数):::process
I -->|否| M(监控Q Capture状态):::process
J -->|否| N(监控Q Apply状态):::process
K --> M
L --> N
M --> O([结束]):::startend
N --> O
8. 常见问题及解决方法
在使用Q Capture和Q Apply的过程中,可能会遇到一些常见问题,下面给出相应的解决方法。
8.1 Q Capture启动失败且未创建日志文件
- 问题描述 :尝试启动Q Capture,但未在相应目录创建日志文件,Q Capture未能正常启动。
- 解决方法 :检查是否有有效的InfoSphere复制服务器许可证。
8.2 Q Apply在处理事务时出现错误
- 问题描述 :Q Apply在复制新更改到目标表时出现错误,如SQL错误、数据格式错误等。
-
解决方法
:
-
检查
QAPP.LOG日志文件,查看详细的错误信息。 - 根据错误信息,检查源表和目标表的结构是否一致,数据类型是否匹配。
-
若涉及数据格式问题,检查
IGNBADDATA参数设置,可尝试将其设置为Y以忽略非法字符。
-
检查
8.3 日志文件过大问题
- 问题描述 :Q Capture和Q Apply的日志文件不断增大,占用大量磁盘空间。
-
解决方法
:
- 定期重命名日志文件,在重命名前需停止Q Capture和Q Apply。
- 可以编写脚本,在系统空闲时自动执行日志文件重命名操作。
9. 总结
Q Capture和Q Apply是数据复制和管理的重要工具,通过命令行方式可以灵活地对它们进行管理。在使用过程中,需要熟悉各个命令和参数的含义,根据实际需求进行合理配置。同时,要注意日志管理和常见问题的解决方法,以确保系统的稳定运行。
在启动Q Capture和Q Apply时,要提供必要的信息,如控制表位置、模式、日志路径等。在管理运行中的Q Capture和Q Apply时,可以使用相应的命令修改参数、查询状态、清理控制表等。通过合理设置参数,可以优化Q Capture和Q Apply的性能,提高数据处理效率。
希望本文的内容能帮助你更好地理解和使用Q Capture和Q Apply,在实际应用中充分发挥它们的优势,实现高效的数据复制和管理。
超级会员免费看
46

被折叠的 条评论
为什么被折叠?



