MVSの動き方を決める重要なシステム設定パラメーターとして、PARMLIBメンバーがあります。元々はSYS1.PARMLIBという名称の区分データセットが使われていました。現在ではインストール時のカスタマイズによって異なるDSNにしたり、PARMLIBライブラリーを複数のデータセットに分散することもできます。
ずいぶん以前のMVSでは、PARMLIBメンバーにエラーがあるだけでもIPLが止まってしまうため、パラメーター・メンバーの修正にはずいぶんと気を使ったものです。運用で使用しているメンバーを直接直さずに代替のメンバーを作り、そちらを修正する。あるいは現行のメンバー内容をコピーした代替メンバーを作っておき、もしIPLに失敗したら、代替メンバーのパラメーターでIPLし直す、などはよく行われました。これらはIPLができないとOSが起動しないのでエラーを起こしてしまったメンバーを直したり元に戻したりすることができないからでもありました。
しかしOS/390、z/OSとなった現在のMVSでは、PARMLIBメンバーのパラメーター定義や値に誤りなどがあってもよほどのものでない限り、エラーは無視され(警告はされる)IPLが途中で止まるようなことはなくなりました。
そんな中で「これのどこがエラー?」と見えてしまいそうなものをひとつ。
コメントの終わり位置が悪いためエラーとなる例
NJEのテストをするためOS内にテスト用の代替JES2を追加したところ…
定義したPARMLIBメンバー
1 2 3 4 5 6 7 8 9 10 11 12 13 |
EDIT SYS1.PARMLIB(IEFSSN00) - 01.14 Columns 00001 00080 Command ===> Scroll ===> CSR ****** ********************************* Top of Data ********************************** =COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 000001 SUBSYS SUBNAME(JES2) /* JES2 AS PRIMARY SUBSYSTEM */ 000002 PRIMARY(YES) START(YES) 000003 SUBSYS SUBNAME(JESB) /* JES2 AS SECONDARY SUBSYSTEM */ 000004 SUBSYS SUBNAME(IRLM) 000005 SUBSYS SUBNAME(JRLM) 000006 SUBSYS SUBNAME(FFST) 000007 SUBSYS SUBNAME(TNF) INITRTN(MVPTSSI) 000008 SUBSYS SUBNAME(VMCF) INITRTN(MVPXSSI) INITPARM(H390V2R4) ****** ******************************** Bottom of Data ******************************** |
再IPLしたらJES2起動時(IEFSSN00メンバー処理時)にエラーになってしまいました
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
N 0000000 S390SYS1 03212 14:32:28.04 00000290 IEE252I MEMBER IEFSSN00 FOUND IN SYS1.PARMLIB NC0000000 S390SYS1 03212 14:32:28.05 INTERNAL 00000290 S JES2 MR0000000 S390SYS1 03212 14:32:28.06 INTERNAL 00000290 ASA003I SYNTAX ERROR IN PARMLIB MEMBER=IEFSSN00 ON LINE 3, 153 DR 153 00000090 POSITION 41: INVALID_COMMENT WAS SEEN, WHERE ONE OF DR 153 00000090 (CONSNAME INITRTN INITPARM PRIMARY DR 153 00000090 START SUBSYS <end_of_file>) DR 153 00000090 WOULD BE CORRECT. DR 153 00000090 DETECTING MODULE IS IEFJPMSG. INPUT LINE: ER 153 00000090 SUBSYS SUBNAME(JESB) /* JES2 AS SECONDARY SUBSYSTEM NR0000000 S390SYS1 03212 14:32:28.06 INTERNAL 00000090 IEFJ001I IEFSSN00 LINE 3: ERROR IN SUBSYSTEM DEFINITION, REFER TO SR HARDCOPY LOG N 4040000 S390SYS1 03212 14:32:28.08 00000090 IEE389I MVS COMMAND PROCESSING AVAILABLE N 0000000 S390SYS1 03212 14:32:28.18 00000290 IEE252I MEMBER IEASLP00 FOUND IN SYS1.PARMLIB N 0000000 S390SYS1 03212 14:32:28.19 00000290 IEE252I MEMBER ADYSET01 FOUND IN SYS1.PARMLIB N 0000000 S390SYS1 03212 14:32:28.19 00000290 IEE252I MEMBER MPFLST00 FOUND IN SYS1.PARMLIB </end_of_file> |
IEFSSN00に追加したのは「SUBSYS SUBNAME(JESB)」の行です。コメントもきちんと/*と*/で囲まれているし一見すると問題ありません。以前は追加した行の最後のカンマを付け忘れたため、以降の行がすべて無視されていたなどということもありましたが、現在主にサポートされているキーワード形式のパラメーターではそのような心配も減りました。
1 2 3 |
↓ =COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 000003 SUBSYS SUBNAME(JESB) /* JES2 AS SECONDARY SUBSYSTEM */ |
一見すると正しいのですが、PARMLIBメンバーの基本的な構文規則ではパラメーターはコメントも含め1桁目から71桁目に記述しなければなりません。この例ではコメントのストッパーが72桁目になってしまい、結果として無視されているからです。
1 2 3 |
実際はこのように解釈されてしまう =COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8 000003 SUBSYS SUBNAME(JESB) /* JES2 AS SECONDARY SUBSYSTEM |
落ち着いて見ればわかりますが、このような一見すると正しく見え、どこがおかしい?という類のものはなかなか原因を見つけられないというもののひとつでもあります。そうでなくてもIPLでエラーが出たりすると、(自分が直したのが原因であることが明白で)あせりが先に立ってしまったりするものです。