队列管理器配置备份及迁移
对于IBMMQ队列管理器配置备份,IBMMQ7.0版本之前需要借助第三方工具ms03,该文件可以在官方获取,下载时需要注意使用的操作系统,请根据实际环境进行下载,在7.0版本以后,官方将队列管理器配置备份及消息备份集成到dmpmqmsg命令中,本文档针对7.0版本以上做说明,主要针对dmpmqmsg方法实现消息迁移和队列管理器做说明。
下面是dmpmqmsg的使用方法:
[mqm@node-1 bin]$ dmpmqmsg --help
dmpmqmsg: invalid option -- '-'
5724-H72 (C) Copyright IBM Corp. 1994, 2022.
IBM MQ Queue Load/Unload Utility
Usage: dmpmqmsg <Optional flags as below>
[-a <File access mode for fopen()>
a Append
b Binary
[-b <initial buffer size in Kb>]
[-c Connect in client mode]
[-C [A][I][a][i][d][n] Context]
A Set all context (default)
I Set identity context
a Pass all context
i Pass identity context
d Default context
n No context
[-d <Display Options>]
a Add ASCII columns to HEX file
A Write output file in ASCII lines rather than HEX
c Output ApplData MQMD fields as char
C Display Correlation Id in summary
H Don't write file header
i Write message index
p Write output file in printable characters format
s Display queue summary
M Display Message Ids in summary
N Don't write MQMD to file
t Write output file in text lines
T Display time on queue
w<Length> Data width
[-D <Delay>]
+ve fixed delay in milliseconds
-ve random delay in milliseconds
r[time%] relative delay
[-f <File Name> or -f <stdout>]
[-F <File Name> (forcing overwrite)]
[-g [x][c][m][g] <Id> Get by Id
x Id is in Hex
m Id is Message Id
c Id is Correlation Id
g Id is Group Id
[-h Strip headers
[-i <Input Queue> (Browse)]
[-I <Input Queue> (Get)]
[-m <Queue Manager name>]
[-o <Output Queue>]
[-p Purge source queue]
[-P <CCSID>[:X'Encoding'] CodePage conversion]
[-q Quiet]
[-r <Message Range>]
x Message x only
x..y Message x to message y
x#y y messages starting at message x
#x First x messages
[-t <Transaction Message Limit>]
[-T <Time on queue (Age) selection>
[[[DD:]HH:]MM ][,[[DD:]HH:]MM]
[-s <Ascii Search String>]
[-S <Ascii Not Search String>]
[-e <Ebcdic Search String>]
[-E <Ebcdic Not Search String>]
[-w <MQGET Wait interval(seconds)]
[-x <Hex Search String>]
[-X <Hex Not Search String>]
[-u <UserId>]
Examples
--------
Unload a queue to a file : dmpmqmsg -iQ1 -fmyfile
Load a queue from a file : dmpmqmsg -oQ1 -fmyfile
Copy a queue from Q1 to Q2 : dmpmqmsg -iQ1 -oQ2
Move a queue from Q1 to Q2 : dmpmqmsg -IQ1 -oQ2
Move old messages from Q1 to Q2 : dmpmqmsg -IQ1 -oQ2 -T1440
Provide Summary of messages : dmpmqmsg -iQ1 -ds
[mqm@node-1 bin]$
注意:首先确认当前IBMMQ服务是否启动,在使用dmpmqmsg进行导入导出时,当前对列管理器要处于启动状态,若当前队列管理器处于关闭状态则首先需要启动该队列管理器。
1. 队列中消息迁移
在IBMMQ队列管理器进行迁移时,需要考虑到源队列管理器中存放的消息是否需要进行迁移,若消息需要同步迁移则参考如下测试过程:若消息不需要迁移,则忽略此步骤。
dmpmqmsg命令参数测试
查看队列管理器ultimatech中的队列1123,可以看到当前队列深度为2,表明当前存在2条消息,使用
dmpmqmsg命令进行消息的备份(消息的导出)
C:\Users\Administrator\Desktop>dmpmqmsg -m ultimatech -i1123 -fmyfile
结果如下:
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
WebSphere MQ Queue Load/Unload Utility
Read - Files: 0 Messages: 2 Bytes: 56
Written - Files: 1 Messages: 2 Bytes: 56
此时可以将ultiamtech队列管理器队列1123中的消息清除掉。
消息清除完后,可以看到队列的队列深度为0。
此时使用dmpmqmsg命令将消息重新导入到队列中
C:\Users\Administrator\Desktop>dmpmqmsg -o1123 -fmyfile -m ultimatech
结果如下:
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
WebSphere MQ Queue Load/Unload Utility
Read - Files: 1 Messages: 2 Bytes: 56
Written - Files: 0 Messages: 2 Bytes: 56
通过控制台查看mq队列1123队列深度,此时队列深度为2,表明当前消息被导入成功。
上面操作是针对一个队列管理中的队列操作的,备份的文件,是无法查看消息的内容,如果想要查看消息的内容,可以重新创建一个新的队列管理器和队列,将备份的消息导入到新创建的队列管理器中。
示例如下:
创建队列管理器
crtmqm dataimport
创建本地队列
runmqsc dataimport
创建队列Q1
define qlocal (Q1)
使用dmpmqmsg命令将myfile导入到队列管理器dataimport中
C:\Users\Administrator\Desktop>dmpmqmsg -m dataimport -oQ1 -fmyfile
结果如下:
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
WebSphere MQ Queue Load/Unload Utility
Read - Files: 1 Messages: 2 Bytes: 56
Written - Files: 0 Messages: 2 Bytes: 56
此时可以从Q1队列中查看消息的内容
2. 队列管理器配置备份导出
首先确认dmpmqmsg是否可用,该命令在IBMMQ安装路径的bin目录下,若当前服务器中配置了IBMMQ的环境变量,可直接使用该命令;若未配置环境变量,则进入到IBMMQ安装路径的bin目录下执行该命令:
导出对列管理器配置
dmpmqcfg -m <Queue Manager name> -x all> qmgr_config.txt
参数说明:-m 指队列管理器名称
-x 指需要导出的类型,此处选择所有类型(all),针对该参数官方提供如下参数(all|object|authrec|chlauth|sub|policy)过滤定义过程以显示 对象 定义, 权限记录, 通道认证 记录,持久 预订 或 策略。 默认为 all 是返回所有类型;
qmgr_config.txt为最终导出生成的文件名称,文件名称亦可自定义,此处只是示例,亦可指定文件位置,若不添加路径则在当前路径生成该文件。
注意:在qmgr_config.txt文件生成后,请查看该文件是否正常生成,并存在数据。
3. 队列管理器配置导入
1)在需要导入其他IBMMQ配置的环境中创建新的对列管理器并启动该队列管理器
#创建队列管理器,队列管理器的名称根据实际情况进行命名,可与源队列管理器同名也可重新定义队列管理器名称
crtmqm <Queue Manager name>
#启动队列管理器
strmqm <Queue Manager name>
2)查看队列管理器是否正常开启
dspmq -m <Queue Manager name>
3)将源队列管理器导出文件qmgr_config.txt上传到当前服务器中,使用runmqsc命令进行配置导入
runmqsc <Queue Manager name> < qmgr_config.txt
4)源配置导入成功后,若需要将源数据队列中消息迁移到当前队列管理器中,请参考本文档4.1章节进行消息导入(若无需导入源数据,本步骤可以忽略)。命令如下:
dmpmqmsg -o <Qname> -f myfile -m <Queue Manager name>
参数说明:-o 指定导入队列名称
-f 指定导入源数据的文件名称
-m 指定队列管理器名称
导入完成后,查看当前队列中深度是否和源队列中相同,若相同则数据导入成功。
5)登入当前对列管理器,使用display命令查看队列、通道、监听是否正常导入,最终发送一条测试消息,确认该IBMMQ是否可以正常使用。
4. 附录
参考链接如下:
https://www.ibm.com/docs/en/ibm-mq/9.3?topic=systems-examples-using-dmpmqmsg-utility
https://www.ibm.com/docs/zh/ibm-mq/9.3?topic=reference-dmpmqmsg-queue-load-unload