実行環境

122. エラーメッセージの見方

IBM i を操作していると様々なエラーに出くわす。
エラーが発生したときにエラー・メッセージを詳細に解析しない人は、

「エラーになったのですが何が原因のときにこのエラーが発生しますか?」

との質問が多い。
原因とエラーは1対1ではないのだ。
次に多いのが

「何か環境の設定が必要なのでしょうか?」

のように設定の問題を疑う人である。
両者ともにエラーが起こったことはわかっているのだが
エラー・メッセージを全く読まない人である。

WindowsやUNIXなどに比べてIBM iのエラー・メッセージは非常に詳細であり
丁寧に述べられている。
例えばオープン系であれば

「SOCKET識別子のエラー」

とだけしか報告されないのもめずらしくない。
これではどこでどのような原因によるエラーが発生してどのように
リカバリー(回復)すればよいのかも一切、述べられていない。

IBM i のエラー・メッセージは非常に詳細に述べられていて
可能性のある原因のいくつかを示している回復方法まで述べられている。

エラーが起きたときはエラー・メッセージは宝の宝庫である。
エラー・メッセージの見方がわかれば IBM iの操作や運用にかなりの
自信を持って取り組むことができるようになる。

(1) MSGID を必ず確認すること

多くのエラーはCPFメッセージと言ってメッセージ・ファイル: QSYS/QCPFMSG から
送出されたエラー・メッセージである。
CPFという名前は IBM iの前身であるS/38(=System38) のOSの名前が QCPFであったからで、
現在では何の意味もない。
IBMや他の人に質問するときに

「...というエラーが出ましたが?」

と伝えるよりは

7桁のMSGID (=[例] CPF9801 )

を伝えるべきである。
そのMSGIDを受け取った人は DSPMSGD でメッセージのすべての内容を
調べることができるからである。

MSGIDを言わずにおくと必ず「MSGIDは何ですか?」と聞かれてしまう。
人にエラー・メッセージを伝えるときには必ずMSGIDも併せて伝えるようにしよう

(2)メッセージの見方

CPFメッセージは最初の一部だけが表示されている場合が多い。
そこで

  • メッセージにカーソルを合わせて F1キーを押すとメッセージの全文が表示される。(追加のメッセージの表示)
  • さらに「F9= メッセージ詳細の表示」を押すと案外、知られていないがメッセージの発信元、つまり
    エラーの発生源を知ることができる。

    どのプログラムからエラーが出ているのかを知ることができるのである。

この2つは是非覚えていて欲しい。
特にエラーが発生したときにどの部分でエラーとなっているのか
知ることが大変重要なことである。

・SEV (=Sevierity:エラー重大度)を確認しよう。

JOBLOGなどを見ると複数のメッセージが出ている場合があるが
注目すべきはその重大度(SEV)である。
重大度(SEV)が30以上がエラーである。
重大度(SEV)が 10や 20そして 00であればエラーではなく
警告や単なる通知メッセージである。

それではいよいよCPFメッセージの読み方について説明しよう。

CPFメッセージは主に次の三つの部分によって構成されている。

●メッセージ
    エラーの内容の表示。場合によっては複数の値などを示して
    エラーを示している場合があるのでエラーの数値を
    よく読んでどのエラーが発生したのかを特定しなければならない。

●原因
    エラーを引き起こしたと考えられるいくつかの候補となる原因を列挙している。
    これが原因であると思い当たるものを選別しなければならない。

●回復手順
    リカバリー(復活)や対策の方法が示されてることはWindowsやUNIXでは例を見ない。
    回復手順まで詳しく説明されているので熟読して欲しい。



(3)メッセージを調べる

(2)で説明したようにIBM iのエラー・メッセージは詳解である。
しかもメッセージは MSGID によってメッセージ・ファイル(QSYS/QCPFMSG)から
送出されているのでもう一度メッセージの内容を

DSPMSGD CPFxxxx

によって確認することができる。
エラーを回復するためにはまずエラー・メッセージの内容をよく読んで理解することである。

よく SE は5つの能力が必要とされると聞くが 表現力、読解力、... など
最も難しいものは読解力であろう。
優秀な人は文書の読解力があるが文書の理解はなかなか難しいが
繰返し読むことで理解は深まる。

(4)エラー・メッセージだけが解決の鍵

エラーが起きたときにはエラー・メッセージだけが解決の糸口である。
エラー・メッセージを読まないで原因を想像するだけの人はSEには向いていない。
解決するにはエラー・メッセージを熟読して原因の可能性をさぐることである。

エラー・メッセージが示している原因が複数あるときには
ひとつひとつその原因かどうか論理的に検証する必要がある。
エラーが起きたときにこそあなたの論理思考が試されるときだ。

エラーが起きたからといって落ち込んだり驚いたりするよりは
原因を論理的に類推して解決することを楽しんで欲しい。

(5) 原因は遠くにある場合もある。

最後にエラーを生じた原因は間接的なものによる原因であることが多い。
例えば見たことのないポインタ・エラーが発生したとする。
エラー・メッセージは

「正しくないポインターでアクセスしようとしました。」

と表現されているが実はこれはバラメータ不足で
呼び出される側のプログラムのパラメータ数に比べて
呼び出し側のパラメータ数が不足している場合に起こる。

このようなエラーが起こる経験がなければ
なかなか原因を特定することはできない。

このサイトではこのような不明なエラーの解決方法も
今後紹介して行きたいと考えている。