iBM
mq
AMQ7017

IBM MQ : AMQ7017 ログ破損エラーで起動できないキューマネージャを復旧する手順

はじめに

IBM(WebSphere) MQキューマネージャが「AMQ7017:ログが使用できません。」で起動不能になった時、地味に対応に困るので、その復旧方法を覚書しておくことにした。

AMQ7017:ログが使用できません

AMQ7017エラーは、IBM MQのトランザクション・ログが何らかの理由により壊れて使えない状態である。このエラーになるとキューマネージャは開始できず。完全障害状態となる。意外に元に戻すための情報がなく、ググってみると困っている人が結構いる。

strmqm IBMMQMGR

WebSphere MQ キュー・マネージャー '' を開始しています。
AMQ7017: ログが使用できません。

我がチームの開発サーバでこの状態が起きた。どうやらサーバのディスク不足との理由で、誰かが”ログ・ファイル”と思われるものを次々削除した模様。 大変なログ違いなのだが、MQを知らないとこうしたミスが発生する。多分、データベースのログであれば、こんな真似はしないだろうと思う。

IBM Knowledge Centerの解説によると、AMQ7017の対処は、キューマネージャはバックアップを取得しておくべきで、バックアップからリストアするのが正しい見解のようである。本番ならともかく、開発環境なので、バックアップがない。他に復旧方法がないか模索したところ、次を発見。

ログ・エラーからキューマネージャを復旧する

AMQ7017エラーでMQが起動不能になったら、MQ-HAを作成する考え方が応用できそう。バックアップからのシステム・リストアよりも簡単なので、代わりに以下を行う。

1).キューマネージャの構成フォルダ(と配下のファイルすべて)を退避

AMD7017はMQログ・ファイルの破損であるから、ログだけなんとかすればいい。MQ構成は使用可能なので、構成はそのまま使えるよう、一旦構成を、別の場所に退避する。

cd /var/mqm/qmgrs
mv <キューマネージャ名> <キューマネージャ名>_org
cp -r <キューマネージャ名>_org <キューマネージャ名>

デフォルトは/var/mqm/qmgrsのキューマネージャ名で構成情報格納フォルダが作成されている。このフォルダをまるごと別のフォルダにコピーすれば構成退避できるが、できるだけオリジナルのまま残して起きたいので、オリジナルを別名に写し、更に元の名前でコピーし直す。

キューマネージャの作成(crtmqm)時、-md オプションで構成ファイルの場所を/var/qmgrs以外の場所に指定していた場合、/var/mqm/qmgrsと、-mdで指定したフォルダの両方に<キューマネージャ名>フォルダが出来上がっている(今回の場合もそうであった)。その場合、両方の<キューマネージャ名>フォルダをバックアップしておく。

2).キューマネージャ・ログ・フォルダはそのまま(放置)

キューマネージャのコミット・ログは、デフォルトでは/var/mqm/logsに<キューマネージャ>フォルダの下に格納される。crtmqm時、-ldで別場所を指定していた場合は、指定先(のキューマネージャ名)にログ格納される。 いずれにせよ、AMD7017状態では基本的にはログ破損しているので、ログは特に残す必要はない。

3).キューマネージャを削除する

(一瞬躊躇するが、)構成はバックアップ済みなので、安心してキューマネージャを削除する。キューマネージャの削除にはdltmqmコマンドを使用する。MQ管理者権限を持つ、ユーザで削除を行う。

dltmqm <キューマネージャ名>

4).同じ名称で再びキューマネージャを作成する

同じ名前のキューマネージャを、あらためて作成する。

MQ構成ファイルの格納場所やログ格納場所を前回と同一にする必要があるので、/var/mqm/qmgrs,/var/mqm/logsフォルダ以外を使用している場合は、-md,-ldオプションを忘れず指定する。

crtmqm <キューマネージャ名>    
crtmqm -md 構成フォルダ -ld ログ・フォルダ  <キューマネージャ名>

キュー・マネージャー ’’のデフォルト・オブジェクトを作成または置換しています。
デフォルト・オブジェクトの統計 : 作成 82、置換 0、失敗 0
設定を完了中です。
設定が完了しました。

キューマネージャの作成後、ここではキューマネージャを開始(strmqm)しない。

5).退避しておいたキューマネージャ構成を戻す

作り直したキューマネージャの構成を、1)で退避しておいたキューマネージャ構成に置き換える。

cd /var/mqm/qmgrs
mv <キューマネージャ名> <キューマネージャ名>_temp
mv <キューマネージャ名>_org <キューマネージャ名>

<キューマネージャ名>_tempに移したフォルダは必要ないので、頃合いを見て削除する。

ログが格納されているフォルダは、何も処置しない。

6).キューマネージャを開始してみる

再作成したログ・ファイル(フォルダ)で、過去のMQ構成を使用してキューマネージャを開始する。

strmqm <キューマネージャ名>

WebSphere MQ キュー・マネージャー '' を開始しています。
ログのやり直しフェーズ中に、キュー・マネージャー '' で 50 ログ・レコードがアクセスされました。
キュー・マネージャー '' のログのやり直しが完了しました。
キュー・マネージャー '' のトランザクション・マネージャーの状態が回復されました。
WebSphere MQ キュー・マネージャー '' が V8.0.0.x を使用して開始されました。

キューマネージャ名が同じなので、新しいログ・ファイルを使って、旧構成のキューマネージャがうまく起動してくれるようである。ただし、循環ログの場合のみ確認。リニア・ロギングでうかく行くか不明。
もともと、循環ログ・ファイルの本数を増やして置いたのだが、リカバリー処理により、いい感じに数を戻してくれた。これまでと同じ状態で稼働した模様。

おわり

心配なので、稼働後のキューマネージャ状態を確認。DISPLAY QMGR の内容OK、DISPLAY QL(*)の内容OK、CHANNEL、その他構成OK。大丈夫であった。

この方法は、Unix版、Windows版のMQで利用できる。 Windowsの場合は/var/mqm/qmgrsやlogsフォルダをC:¥ProgramData¥IBM¥MQ¥qmgrs,logsに読み替える。

IBM Knowlege Centerの推奨する方法、「そのファイルのバックアップ・コピーか、キュー・マネージャー全体を復元してください」が正式作法。自己判断、自己責任。

リンク

IBM Knowledge Center
https://www.ibm.com/support/knowledgecenter/ja/SSFKSJ_9.0.0/com.ibm.mq.ref.doc/amq7.htm