きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

MQ GTFトレースを読めるようになるには

素人でもMQODとMQMDとMQGMOとMQPMOくらいは読めるようになる。
どういう情報を見てトレースを読めばいいかということを書いてみる。


要領としては3点

  • 項目数を理解する
  • 項目に使われるバイト長を理解する
  • ビットで理解する


このWSTEに出てくる値を材料に説明しようと思う。
IBM Open Mic Replay: WebSphere MQ Problem Diagnostics - Reading Traces - United States


トレースの値に良い材料がないから、MQMDとMQGMOの見方のみを書きます。
ほな、MQMDからいってみよう。


MQMD – Message descriptor
Initial values and language declarations for MQMD

USRD9 5EA ASCB 00FADA00 JOBN LAURANEG
  CSQW073I EXIT: MQ user parameter trace
   +0000 D4C44040 00000002 00000000 00000008 | MD  ............ |
   +0010 FFFFFFFF 00000000 00000311 000001F4 | ................ |
   +0020 D4D8E2E3 D9404040 00000000 00000001 | MQSTR   ........ |
   +0030 D4D8E3D7 E4E361F2 F0F1F0F0 F3F0F9F2 | MQTPUT/201003092 |
   +0040 F3F0F3F5 F4F6F9F1 D4D8E3D7 E4E361F2 | 30354691MQTPUT/2 |
   +0050 F0F1F0F0 F3F0F9F2 F3F0F3F5 F4F6F9F1 | 0100309230354691 |
   +0060 00000000 40404040 40404040 40404040 |                  |
   +0070 40404040 40404040 40404040 40404040 |                  |
   +0080 40404040 40404040 40404040 40404040 |                  |
   +0090 40404040 D9E3D7C8 40404040 40404040 |     RTPH         |
   +00A0 40404040 40404040 40404040 40404040 |                  |
   +00B0 40404040 40404040 40404040 40404040 |                  |


上記の値を細かく分割していきたいと思います。
分割するバイト数は、各項目のバイト長に応じてます。
MQCHAR4なら4バイト、MQLONGも4バイトです。

   +0000 D4C44040                            :StrucId (MQCHAR4)
                                              MQMD_* (Message descriptor structure)
                       MQMD_STRUC_ID
   +0000          00000002                   :Version (MQLONG)
                                              MQMD_* (Message descriptor structure)
                                              MQMD_VERSION_2
   +0000                   00000000          :Report (MQLONG)
                                              MQRO_* (Report Options)
                                              MQRO_NONE
   +0000                            00000008 :MsgType (MQLONG)
                                              MQMT_* (Message Types)
                                              MQMT_DATAGRAM
   +0010 FFFFFFFF                            :Expiry (MQLONG)
                                              MQEI_UNLIMITED
   +0010          00000000                   :Feedback (MQLONG)
                                              MQFB_* (Feedback Values)
                                              MQFB_NONE
   +0010                   00000311          :Encoding (MQLONG)
                                              MQENC_* (Encoding)
                                              MQENC_NATIVE z/OSのはX'00000311'=785
   +0010                            000001F4 :CodedCharSetId (MQLONG)
                                              MQCCSI_* (Coded Character Set Identifiers)
                                              500
   +0020 D4D8E2E3 D9404040                   :Format (MQCHAR8)
                                              MQFMT_* (Formats)
                                              MQFMT_STRING
   +0020                   00000000          :Priority (MQLONG)
                                              MQPRI_* (Priority)
   +0020                            00000001 :Persistence (MQLONG)
                                              MQPER_* (Persistence Values)
                                              MQPER_PERSISTENT
   +0030 D4D8E3D7 E4E361F2 F0F1F0F0 F3F0F9F2 :MsgId (MQBYTE24)
   +0040 F3F0F3F5 F4F6F9F1                    MQMI_* (Message Identifier)
                                              MQTPUT/20100309230354691
   +0040                   D4D8E3D7 E4E361F2 :CorrelId (MQBYTE24) 
   +0040 F0F1F0F0 F3F0F9F2 F3F0F3F5 F4F6F9F1  MQCI_* (Correlation Identifier)
                                              MQTPUT/20100309230354691
   +0050 00000000                            :BackoutCount (MQLONG)
   +0050          40404040 40404040 40404040 :ReplyToQ (MQCHAR48)
   +0060 40404040 40404040 40404040 40404040   
   +0070 40404040 40404040 40404040 40404040 
   +0080 40404040                            
   +0080          D9E3D7C8 40404040 40404040 :ReplyToQMgr (MQCHAR48)
   +0090 40404040 40404040 40404040 40404040 
   +00A0 40404040 40404040 40404040 40404040 
   +00B0 40404040                            
   +00B0          40404040 40404040 40404040 :UserIdentifier (MQCHAR12)

GTFトレースに出てくるのはココまでっぽいですが、MQMD自体はまだ続きます。
MQのTRACEの出力先 DEST(RES)にしてダンプを取ってれば、
おそらくはpMsgDesc. 13B596B0から値が見れるのではないかと思う。
先頭についてるpはポインターのpだろう。


次はMQGMO。
MQGMO – Get-message options
Initial values and language declarations for MQGMO

  CSQW073I EXIT: MQ user parameter trace
   +0000 C7D4D640 00000001 00006021 00000000 | GMO ......-..... |
   +0010 FF000000 00000000 D3C1E4D9 C14BD8D3 | ........LAURA.QL |

同じく、細かく分けていく。

   +0000 C7D4D640                            :StrucId (MQCHAR4)
                                              MQGMO_* (Get message options structure)
                                              MQGMO_STRUC_ID
   +0000          00000001                   :Version (MQLONG)
                                              MQGMO_* (Get message options structure)
                                              MQGMO_VERSION_1
   +0000                   00006021          :Options (MQLONG)
                                              MQGMO_* (Get Message Options)
                         X'00004000' : MQGMO_CONVERT
                         X'00002000' : MQGMO_FAIL_IF_QUIESCING
                         X'00000020' : MQGMO_BROWSE_NEXT
                         X'00000001' : MQGMO_WAIT
   +0000                            00000000 :WaitInterval (MQLONG)
                                              MQWI_* (Wait Interval)
   +0010 FF000000                            :Signal1 (MQLONG)
                                              MQEC_* (Signal Values)
   +0010          00000000                   :Signal2 (MQLONG)
   +0010                   D3C1E4D9 C14BD8D3 :ResolvedQName (MQCHAR48)

少しデータが中途半端なところで終わってますが、だいたいこんな具合に見れば読めます。
Optionsの箇所は、ビットが立ってるところを見る必要があるので面倒ですが、そこは慣れでしょう。


他には、右側に出てくる文字列の元データがASCIIの場合はどう読むか。
ASCII primary command — display characters as ASCII
EBCDIC primary command — display characters as EBCDIC


GTFトレースで出てくるコントロールブロックについては一覧がある。
The control blocks traced


GTFトレースの中で出てくる読み解けないものは多くあるが、
モジュールの分類を理解しておくと、扱ってるデータは分からなくてもフローは分かるようになる。
WebSphere MQ component and resource manager identifiers