リニア・ロギングのキュー・マネージャのメディア・リカバリー機能を確認する。前回までの記事はこちら。参考文献は末尾に記載。
リニア・ロギングとは
下記に適当な説明があるので、引用させて頂く。
引用元:WebSphere MQ System Administration Guide Version 7.0
Linear logging:
Use linear logging if you want both restart recovery and media recovery
(recreating lost or damaged data by replaying the contents of the log).
Linear logging keeps the log data in a continuous sequence of files. Space is not
reused, so you can always retrieve any record logged in any log extent that has not
been deleted
As disk space is finite, you might have to think about some form of archiving. It is
an administrative task to manage your disk space for the log, reusing or extending
the existing space as necessary.
線形的に増加していくタイプのロギング方式。メディア・リカバリー機能を使用するにはリニア・ロギング方式にする必要がある。尚、これとは対照的に循環ロギング(Circular Logging)と言うのもある。こちらはログファイルが環内で継続的に再利用されるため、ディスク容量はある一定までしか消費しない。キュー・マネージャーの作成コマンドcrtmqmではデフォルトでこの循環ロギング方式で作成する。
キュー・マネージャーの環境作成
リニア・ロギングのキュー・マネージャーは-llオプションで作成する。
$ crtmqm -ll QMLL WebSphere MQ queue manager created. Directory '/var/mqm/qmgrs/QMLL' created. Creating or replacing default objects for QMLL. Default objects statistics : 65 created. 0 replaced. 0 failed. Completing setup. Setup completed. $ strmqm QMLL WebSphere MQ queue manager 'QMLL' starting. 11 log records accessed on queue manager 'QMLL' during the log replay phase. Log replay for queue manager 'QMLL' complete. Transaction manager state recovered for queue manager 'QMLL'. WebSphere MQ queue manager 'QMLL' started.
続けてローカル・キュー、別名キューを作成しパーシステント、ノンパーシステント・メッセージをputする。
$ runmqsc QMLL Starting MQSC for queue manager QMLL. def ql(QL.A) defpsist(yes) replace 1 : def ql(QL.A) defpsist(yes) replace AMQ8006: WebSphere MQ queue created. def qa(QA.A) targq(QL.A) defpsist(no) replace 2 : def qa(QA.A) targq(QL.A) defpsist(no) replace AMQ8006: WebSphere MQ queue created. end 3 : end 2 MQSC commands read. No commands have a syntax error. All valid MQSC commands were processed. $ amqsput QL.A QMLL Sample AMQSPUT0 start target queue is QL.A I put in QL.A Sample AMQSPUT0 end $ amqsput QA.A QMLL Sample AMQSPUT0 start target queue is QA.A I put in QA.A Sample AMQSPUT0 end $
メディア・リカバリー
メディア・イメージの取得
キュー・マネージャーはキューのメッセージ数が0になった際に、自動的にチェックポイントを作るが、今回はrcdmqimgを使用して、ローカル・キューのメディア・イメージを取得することでチェックポイントを強制的に作る。
$ rcdmqimg -m QMLL -t ql QL.A Media image for object QL.A, type qlocal recorded.
キューの実体ファイルを削除
キューの障害を再現する為、QL.Aの実体ファイルを確認し削除する。
$ dspmqfls -m QMLL -t queue QL.A WebSphere MQ Display MQ Files QLOCAL QL.A /var/mqm/qmgrs/QMLL/queues/QL!A $ rm '/var/mqm/qmgrs/QMLL/queues/QL!A/q' $
キューの損傷を確認
$ amqsput QL.A QMLL Sample AMQSPUT0 start target queue is QL.A MQOPEN ended with reason code 2101 unable to open queue for output Sample AMQSPUT0 end $ mqrc 2101 2101 0x00000835 MQRC_OBJECT_DAMAGED $ runmqsc QMLL Starting MQSC for queue manager QMLL. dis ql(QL.A) 1 : dis ql(QL.A) AMQ8149: WebSphere MQ object damaged. [2016, QL.A]
仮に上記の結果とならず、まだキューにメッセージをputできたら、キューに対して数件のメッセージをputする事で検知させる。(キュー・マネージャーのバッファリングや検知タイミングのずれがある為)
オブジェクトの再作成
rcrmqimgコマンドを用いてQL.Aキューを再作成する。
$ rcrmqobj -m QMLL -t ql QL.A Object QL.A, type qlocal recreated.
QL.Aキューが復旧したか確認する。
$ runmqsc QMLL Starting MQSC for queue manager QMLL. dis ql(QL.A) 1 : dis ql(QL.A) AMQ8409: Display Queue details. QUEUE(QL.A) TYPE(QLOCAL) ACCTQ(QMGR) ALTDATE(2013-01-10) ALTTIME(04.27.37) BOQNAME( ) BOTHRESH(0) CLUSNL( ) CLUSTER( ) CLWLPRTY(0) CLWLRANK(0) CLWLUSEQ(QMGR) CRDATE(2013-01-10) CRTIME(04.26.59) CURDEPTH(1) DEFBIND(OPEN) DEFPRTY(0) DEFPSIST(YES) DEFPRESP(SYNC) DEFREADA(NO) DEFSOPT(SHARED) DEFTYPE(PREDEFINED) DESCR( ) DISTL(NO) GET(ENABLED) HARDENBO INITQ( ) IPPROCS(0) MAXDEPTH(5000) MAXMSGL(4194304) MONQ(QMGR) MSGDLVSQ(PRIORITY) NOTRIGGER NPMCLASS(NORMAL) OPPROCS(0) PROCESS( ) PUT(ENABLED) PROPCTL(COMPAT) QDEPTHHI(80) QDEPTHLO(20) QDPHIEV(DISABLED) QDPLOEV(DISABLED) QDPMAXEV(ENABLED) QSVCIEV(NONE) QSVCINT(999999999) RETINTVL(999999999) SCOPE(QMGR) SHARE STATQ(QMGR) TRIGDATA( ) TRIGDPTH(1) TRIGMPRI(0) TRIGTYPE(FIRST) USAGE(NORMAL) end 2 : end One MQSC command read. No commands have a syntax error. All valid MQSC commands were processed. $ amqsgbr QL.A QMLL Sample AMQSGBR0 (browse) start QMLL Messages for QL.A 1 no more messages Sample AMQSGBR0 (browse) end $
QL.Aのパーシステント・メッセージが確かにリカバリーできていることを確認できた。(またノンパーシステント・メッセージはリカバリーされていないことを確認できた。)
参考文献
- WebSphere MQ System Administration Guide Version 7.0