1

rexx プログラムでは、COBOL プログラムが呼び出され、その SYSOUT が一時データセット割り当て (TSO 割り当て) を使用してキャプチャされ、次に EXECIO 読み取りが使用されます。通常は問題なく動作します。

ユーザーの 1 人 (別のマシンを使用) が、EXECIO 読み取りで問題を報告しました。

 IRX0562E Abnormal completion of the GET Data Management macro.   
 IRX0565E SG0     ,$LOGON  ,3420,D,SYSOUT  ,GET    ,WRNG.LEN.RECORD,0000003500000 0,QSAM.     
 IEC020I      001-4,SG0,$LOGON,SYSOUT,3420,BWS858,     
 IEC020I      SYS15089.T170858.RA000.SG0.R0278041     
 IEC020I DCB EROPT=ABE OR AN      INVALID CODE, AND/OR NO SYNAD EXIT  SPECIFIED   
 IRX0250E System abend code 001, reason code 00000004.     
 IRX0255E Abend in host command EXECIO or address environment routine MVS.

この問題は、特に COBOL プログラムが SYSOUT にいくつかの出力を持っている場合に発生することがわかりました。TSO 割り当てで「VB」属性を指定することにより、z/OS システムで同様の状況を再現できました。この場合、割り当てられたデータセットは ISPF で表示できません。ISPF で表示しようとすると、次のエラー メッセージが表示されます。

'I/O error occurred reading the edit data'

この破損したデータが SHARED/OLD モードを使用して割り当てられた場合、問題は解決されます。したがって、この種の問題は、新しい割り当てと COBOL プログラムの実行中に発生します。

COBOL プログラムの実行後、さらに SHR/OLD モードを割り当てることで、この問題が修正されました。ここで何がうまくいかなかったのかについてのアイデアはありますか?

テスト版では、カタログ化されたファイルを次のように使用します。COBOL プログラム実行直前の SYSOUT の割り当ては次のとおりです。レコード形式を「VB」に変更した場合にのみ問題が発生することを確認してください (これは、別の zos マシンでユーザーから報告された同じエラーの再作成です)。

     if (existsDSN(tmpDS)) then do  
         ADDRESS TSO, /* ここで動作します */
         "ALLOC DS('"tmpDS"') F(SYSOUT) SHR REUSE"  
     終わり  
     そうでなければする  
         ADDRESS TSO /* ここに ds 作成エラー */   
         "ALLOC DS('"tmpDS"') F(SYSOUT) NEW DSORG(PS)",  
         "BLKSIZE(121) SPACE(5,15) TRACKS RECFM(FBA) DIR(0)"  
     終わり

カタログ化された SYSOUT データセットは、ISPF ブラウズ モードでも読み取ることができないことに注意してください。


以下は、bill で言及されている COBOL プログラムの出力ですが、最初のレコードが SYSOUT に 2 回 (つまり、合計 4 つのメッセージ行) 表示されます。

 0000000121
4FFFFFFFFFF
00000000121
   '   ` expected message text
4070007004
00D0009000
4

2 に答える 2

0

私が疑ったように、これは DFSORT sysout メッセージと関係があります。DFSPARM パラメータを指定して DFSORT メッセージを別のデータセットにリダイレクトした後、この問題は解決されました。これを行うには、次を含むデータセットに対応する DFSPARM ddname を割り当てます。

  MSGDDN=dfsoutdd

この問題はバッチモードでも発生します。つまり、TSO alloc または rexx プログラムとは関係ありません。要約すると、問題は次の場合に発生します。

  1. COBOL プログラムには内部 SORTS があるため、SYSOUT で DFSORT メッセージを生成します。
  2. COBOL プログラム自体に 1 つまたは複数のテキスト表示がある
  3. SYSOUT が DISP=NEW で DSN に送られる場合 (SDSF スプールの SYSOUT は OK)

もう 1 つの観察結果は、プログラムの実行後に DFSORT がデータセット属性の変更を引き起こすことです。前

Organization . . . : PS Used tracks . . . . : 1
Record format . . . : VB Used extents . . . : 1
Record length . . . : 121
Block size . . . . : 27998
1st extent tracks . : 1

Organization . . . : PS Used tracks . . . . : 1
Record format . . . : FBA Used extents . . . : 1
Record length . . . : 121
Block size . . . . : 121
1st extent tracks . : 1
Secondary tracks . : 1
于 2015-04-08T08:53:20.093 に答える