Yesterday, I wrote a blog item regarding Exporting MQ Objects into Individual Files.
I forgot that the dmpmqcfg program can output the MQ Object information as 1 line rather than spanning multiple lines.
Hence, if we let dmpmqcfg do that work then we can simplify the Rexx script to only output the various MQ objects to their own file.
Example of running dmpmqcfg against your queue manager called MQA1 such that it outputs each MQ object as 1 line:
dmpmqcfg -m MQA1 -a -o 1line > MQA1.all.mqsc
Then you run it against my REXX script called fmt_dmpmqcfg.rex:
/* Format output from dspmqcfg command to a single line for each entry. */
/* Put each MQ object type into a different file. */
/* */
/* Example dspmqcfg command: */
/* dmpmqcfg -m MQA1 -a -o 1line > MQA1.all.mqsc */
trace o
Parse Arg inFN .
if inFN = "" then
do
Say "Invalid number of parameters."
Say "i.e."
Say " fmt_dmpmqcfg.rex input_file_name"
Exit
end
types = "QMGR CHANNEL LISTENER NAMELIST PROCESS QALIAS QLOCAL QMODEL QREMOTE SERVICE SUB TOPIC AUTHREC AUTHINFO CHLAUTH COMMINFO"
/* open file */
Call Stream inFN,'C','OPEN READ'
/* Delete previous output and then open it. */
do i=1 to Words(types)
ptr = Word(types,i)
outFN = inFN||"."||ptr||".mqsc"
if (STREAM( outFN, 'C', 'QUERY EXIST' ) <> "") then
"ERASE "outFN
Call Stream outFN,'C','OPEN WRITE'
counts.ptr = 0
end
total = 0
do until Lines(inFN) = 0
inLine = Strip(LineIn(inFN)) /* read next line */
if (inLine = "") then
NOP /* blank line, forget-about-it */
else if (SubStr(inLine,1,1) = "*") then
NOP /* comment line, forget-about-it */
else
do
ptr = Word(inLine, 2)
if (Pos("(", ptr) > 0) then
ptr = SubStr(ptr, 1, Pos("(", ptr) - 1)
nothing = LineOut(inFN||"."||ptr||".mqsc", inLine) /* write to the file */
counts.ptr = counts.ptr + 1
total = total + 1
end
end
/* close the files */
Call Stream inFN,'C','CLOSE'
do i=1 to Words(types)
ptr = Word(types,i)
outFN = inFN||"."||ptr||".mqsc"
Call Stream outFN,'C','CLOSE'
Say outFN || " contains " || counts.ptr || " MQSC formatted commands."
end
Say ""
Say "Total formatted MQSC commands was:" total
Exit
To run the Rexx script, the command is:
rexx fmt_dmpmqcfg.rex MQA1.all.mqsc
The Rexx script will output:
MQA1.all.mqsc.QMGR.mqsc contains 1 MQSC formatted commands. MQA1.all.mqsc.CHANNEL.mqsc contains 43 MQSC formatted commands. MQA1.all.mqsc.LISTENER.mqsc contains 5 MQSC formatted commands. MQA1.all.mqsc.NAMELIST.mqsc contains 3 MQSC formatted commands. MQA1.all.mqsc.PROCESS.mqsc contains 2 MQSC formatted commands. MQA1.all.mqsc.QALIAS.mqsc contains 4 MQSC formatted commands. MQA1.all.mqsc.QLOCAL.mqsc contains 111 MQSC formatted commands. MQA1.all.mqsc.QMODEL.mqsc contains 7 MQSC formatted commands. MQA1.all.mqsc.QREMOTE.mqsc contains 11 MQSC formatted commands. MQA1.all.mqsc.SERVICE.mqsc contains 6 MQSC formatted commands. MQA1.all.mqsc.SUB.mqsc contains 1 MQSC formatted commands. MQA1.all.mqsc.TOPIC.mqsc contains 8 MQSC formatted commands. MQA1.all.mqsc.AUTHREC.mqsc contains 438 MQSC formatted commands. MQA1.all.mqsc.AUTHINFO.mqsc contains 4 MQSC formatted commands. MQA1.all.mqsc.CHLAUTH.mqsc contains 3 MQSC formatted commands. MQA1.all.mqsc.COMMINFO.mqsc contains 1 MQSC formatted commands. Total formatted MQSC commands was: 648
As I said yesterday, create a nightly job to run dmpmqcfg, the Rexx script and push the output to your source code repository and you will have a complete history of changes made to your queue manager.
Regards,
Roger Lacroix
Capitalware Inc.