TRANSACTION ファイルのリカバリー

オペレーターが介入したり、ワークステーションや通信装置をオン / オフに構成変更したりすることなく、TRANSACTION ファイルの入出力エラーを回復できる場合もあります。

TRANSACTION ファイルに対して潜在的にリカバリー可能な入出力エラーが発生した場合、 アプリケーション・プログラム中で取る必要のあるリカバリー・ステップのほかにも、システムはエラー・リカバリーを試行するためのアクションを開始します。 システムが行うアクションの詳細については、「Communications Management」を参照してください。

入出力操作後にファイル状況を調べることによって、アプリケーション・プログラムは TRANSACTION ファイルの入出力エラーからリカバリーできるかどうかを判別できます。 ファイル状況キーの値が 9N の場合、アプリケーション・プログラムは入出力エラーから回復できます。 リカバリー手順は、アプリケーション・プログラムの一部としてコーディングしなければならず、TRANSACTION ファイルが装置を 1 つ獲得したのか、それとも複数の装置を接続したのかによって異なります。

装置を 1 つ獲得したファイルでは、以下のとおりです。

  1. 入出力エラーが発生した TRANSACTION ファイルをクローズする。
  2. ファイルを再オープンする。
  3. 失敗した操作を再試行するのに必要なステップを処理する。 使用されているプログラム装置のタイプによっては、これに複数のステップが関係してくる場合があります。 (たとえば、最後の入出力操作が READ だった場合は、READ ステートメントを処理する前に処理された 1 つまたは複数の WRITE ステートメントを繰り返す必要が生じることがあります。) リカバリー手順の詳細については、「ICF Programming」を参照してください。

複数の装置を獲得したディスプレイ・ファイルでは、以下のとおりです。

  1. TRANSACTION ファイルに関する入出力エラーを発生させたプログラム装置を DROP する。
  2. その同じプログラム装置を ACQUIRE する。
  3. 上記のステップ 3 を参照。

複数の装置を獲得した ICF ファイルでは、以下のとおりです。

  1. その同じプログラム装置を ACQUIRE する。
  2. 上記のステップ 3 を参照。

複数の装置を獲得したディスプレイ・ファイルでは、以下のとおりです。

アプリケーション・プログラムのリカバリーの試行は、通常は 1 回だけでなければなりません。

リカバリーの試行が失敗した場合は、以下のとおりです。

TRANSACTION ファイルの入出力エラーを診断する際に役立つメジャー戻りコードとマイナー戻りコードについては、「ICF Programming」を参照してください。

図 92 に、エラー・リカバリー手順の例を示します。

図 91. エラー・リカバリー手順の例 -- DDS
 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
      A*  DISPLAY FILE FOR ERROR RECOVERY EXAMPLE
      A*
      A                                      INDARA
      A          R FORMAT1                   CF01(01 'END OF PROGRAM')
      A*
      A                                 12 28'ENTER INPUT '
      A            INPUTFLD       5   I 12 42
      A                                 20 26'F1 - TERMINATE'
図 92. エラー・リカバリー手順の例
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/RECOVERY        ISERIES1   06/02/15 13:48:21        ページ    2
                                     ソ ー ス
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID.  RECOVERY.
     3     000300 ENVIRONMENT DIVISION.
     4     000400 CONFIGURATION SECTION.
     5     000500 SOURCE-COMPUTER. IBM-ISERIES.
     6     000600 OBJECT-COMPUTER. IBM-ISERIES.
     7     000700 INPUT-OUTPUT SECTION.
     8     000800 FILE-CONTROL.
     9     000900     SELECT RECOVFILE
    10     001000         ASSIGN TO WORKSTATION-RECVFILE-SI
    11     001100         ORGANIZATION IS TRANSACTION
    12     001200         ACCESS MODE IS SEQUENTIAL
    13     001300         FILE STATUS IS STATUS-FLD, STATUS-FLD-2
    14     001400         CONTROL-AREA IS CONTROL-FLD.
    15     001500     SELECT PRINTER-FILE
    16     001600         ASSIGN TO PRINTER-QPRINT.
           001700
    17     001800 DATA DIVISION.
    18     001900 FILE SECTION.
    19     002000 FD  RECOVFILE.
    20     002100 01  RECOV-REC.
           002200     COPY DDS-ALL-FORMATS OF RECVFILE.
    21    +000001       05  RECVFILE-RECORD PIC X(5).                                          <-ALL-FMTS
          +000002*  INPUT FORMAT:FORMAT1    FROM FILE RECVFILE   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000003*                                                                             <-ALL-FMTS
    22    +000004       05  FORMAT1-I     REDEFINES RECVFILE-RECORD.                           <-ALL-FMTS
    23    +000005           06 INPUTFLD              PIC X(5).                                 <-ALL-FMTS
          +000006* OUTPUT FORMAT:FORMAT1    FROM FILE RECVFILE   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000007*                                                                             <-ALL-FMTS
          +000008*      05  FORMAT1-O     REDEFINES RECVFILE-RECORD.                           <-ALL-FMTS
          +000008*      05  FORMAT1-O     REDEFINES RECVFILE-RECORD.                           <-ALL-FMTS
           002300
    24     002400 FD  PRINTER-FILE.
    25     002500 01  PRINTER-REC.
    26     002600    05  PRINTER-RECORD             PIC X(132).
           002700
    27     002800 WORKING-STORAGE SECTION.
           002900
    28     003000 01  I-O-VERB                      PIC X(10).
    29     003100 01  STATUS-FLD                    PIC X(2).
    30     003200    88  NO-ERROR                     VALUE "00".
    31     003300    88  ACQUIRE-FAILED               VALUE "9H".
    32     003400    88  TEMPORARY-ERROR              VALUE "9N".
    33     003500 01  STATUS-FLD-2                  PIC X(4).
    34     003600 01  CONTROL-FLD.
    35     003700    05  FUNCTION-KEY               PIC X(2).
    36     003800    05  PGM-DEVICE-NAME            PIC X(10).
    37     003900    05  RECORD-FORMAT              PIC X(10).
    38     004000 01  END-INDICATOR                 PIC 1   INDICATOR 1
           004100                                     VALUE B"0".
    39     004200    88  END-NOT-REQUESTED            VALUE B"0".
    40     004300    88  END-REQUESTED                VALUE B"1".
    41     004400 01  USE-PROC-FLAG                 PIC 1
           004500                                     VALUE B"1".
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/RECOVERY        ISERIES1   06/02/15 13:48:21        ページ    3
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
    42     004600    88  USE-PROC-NOT-EXECUTED        VALUE B"0".
    43     004700    88  USE-PROC-EXECUTED            VALUE B"1".
    44     004800 01  RECOVERY-FLAG                 PIC 1
           004900                                     VALUE B"0".
    45     005000    88  NO-RECOVERY-DONE             VALUE B"0".
    46     005100    88  RECOVERY-DONE                VALUE B"1".
    47     005200 01  HEADER-LINE.
    48     005300    05  FILLER                     PIC X(60)
           005400                                     VALUE SPACES.
    49     005500    05  FILLER                     PIC X(72)
           005600                                     VALUE "ERROR REPORT".
    50     005700 01  DETAIL-LINE.
    51     005800    05  FILLER                     PIC X(15)
           005900                                     VALUE SPACES.
    52     006000    05  DESCRIPTION                PIC X(25)
           006100                                     VALUE SPACES.
    53     006200    05  DETAIL-VALUE               PIC X(92)
           006300                                     VALUE SPACES.
    54     006400 01  MESSAGE-LINE.
    55     006500    05  FILLER                     PIC X(15)
           006600                                     VALUE SPACES.
    56     006700    05  DESCRIPTION                PIC X(117)
           006800                                     VALUE SPACES.
    57     006900 PROCEDURE DIVISION.
    58     007000 DECLARATIVES.
           007100 HANDLE-ERRORS SECTION.
           007200     USE AFTER STANDARD ERROR PROCEDURE ON RECOVFILE.   1 
           007300 DISPLAY-ERROR.
    59     007400     SET USE-PROC-EXECUTED TO TRUE.
    60     007500     WRITE PRINTER-REC FROM HEADER-LINE
           007600          AFTER ADVANCING PAGE
           007700     END-WRITE
    61     007800     MOVE "ERROR OCCURED IN" TO DESCRIPTION OF DETAIL-LINE.
    62     007900     MOVE I-O-VERB TO DETAIL-VALUE OF DETAIL-LINE.
    63     008000     WRITE PRINTER-REC FROM DETAIL-LINE
           008100          AFTER ADVANCING 5 LINES
           008200     END-WRITE
    64     008300     MOVE "FILE STATUS =" TO DESCRIPTION OF DETAIL-LINE.
    65     008400     MOVE STATUS-FLD TO DETAIL-VALUE OF DETAIL-LINE.   2 
    66     008500     WRITE PRINTER-REC FROM DETAIL-LINE
           008600          AFTER ADVANCING 2 LINES
           008700     END-WRITE
    67     008800     MOVE "EXTENDED FILE STATUS =" TO DESCRIPTION OF DETAIL-LINE.
    68     008900     MOVE STATUS-FLD-2 TO DETAIL-VALUE OF DETAIL-LINE.
    69     009000     WRITE PRINTER-REC FROM DETAIL-LINE
           009100          AFTER ADVANCING 2 LINES
           009200     END-WRITE
    70     009300     MOVE "CONTROL-AREA =" TO DESCRIPTION OF DETAIL-LINE.
    71     009400     MOVE CONTROL-FLD TO DETAIL-VALUE OF DETAIL-LINE.
    72     009500     WRITE PRINTER-REC FROM DETAIL-LINE
           009600          AFTER ADVANCING 2 LINES
           009700     END-WRITE.
           009800 CHECK-ERROR.
    73     009900     IF TEMPORARY-ERROR AND NO-RECOVERY-DONE THEN
    74     010000         MOVE "***ERROR RECOVERY BEING ATTEMPTED***"   3 
 5722WDS V5R4M0  060210 LN  IBM ILE COBOL                 CBLGUIDE/RECOVERY        ISERIES1   06/02/15 13:48:21        ページ    4
  STMT PL SEQNO  -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S コピー名   変更日付
           010100             TO  DESCRIPTION OF MESSAGE-LINE
    75     010200         WRITE PRINTER-REC FROM MESSAGE-LINE
           010300             AFTER ADVANCING 3 LINES
           010400         END-WRITE
    76     010500         SET RECOVERY-DONE TO TRUE
    77     010600         DROP PGM-DEVICE-NAME FROM RECOVFILE
    78     010700         ACQUIRE PGM-DEVICE-NAME FOR RECOVFILE   4 
           010800     ELSE
    79     010900         IF RECOVERY-DONE THEN   5 
    80     011000             MOVE "***ERROR AROSE FROM RETRY AFTER RECOVERY***"
           011100                 TO  DESCRIPTION OF MESSAGE-LINE
    81     011200             WRITE PRINTER-REC FROM MESSAGE-LINE
           011300                 AFTER ADVANCING 3 LINES
           011400             END-WRITE
    82     011500             MOVE "***PROGRAM ENDED***"
           011600                 TO  DESCRIPTION OF MESSAGE-LINE
    83     011700             WRITE PRINTER-REC FROM MESSAGE-LINE
           011800                 AFTER ADVANCING 2 LINES
           011900             END-WRITE
    84     012000                 CLOSE RECOVFILE
           012100                       PRINTER-FILE
    85     012200                 STOP RUN
           012300         ELSE
    86     012400             SET NO-RECOVERY-DONE TO TRUE
           012500         END-IF
           012600     END-IF
    87     012700     MOVE "***EXECUTION CONTINUES***"
           012800         TO DESCRIPTION OF MESSAGE-LINE.
    88     012900     WRITE PRINTER-REC FROM MESSAGE-LINE
           013000         AFTER ADVANCING 2 LINES
           013100     END-WRITE.
           013200 END DECLARATIVES.
           013300
           013400 MAIN-PROGRAM SECTION.
           013500 MAINLINE.
    89     013600     MOVE "OPEN" TO I-O-VERB.
    90     013700     OPEN I-O     RECOVFILE
           013800          OUTPUT  PRINTER-FILE.
    91     013900     PERFORM I-O-PARAGRAPH UNTIL END-REQUESTED.   6 
    92     014000     CLOSE RECOVFILE
           014100           PRINTER-FILE.
    93     014200     STOP RUN.
           014300
           014400 I-O-PARAGRAPH.
    94     014500     PERFORM UNTIL USE-PROC-NOT-EXECUTED OR NO-RECOVERY-DONE   7 
    95     014600          MOVE "WRITE" TO I-O-VERB
    96     014700          SET USE-PROC-NOT-EXECUTED TO TRUE
    97     014800          WRITE RECOV-REC FORMAT IS "FORMAT1"
           014900               INDICATOR IS END-INDICATOR
           015000          END-WRITE
           015100     END-PERFORM
    98     015200     MOVE "READ" TO I-O-VERB.
    99     015300     SET USE-PROC-NOT-EXECUTED TO TRUE.
   100     015400     SET NO-RECOVERY-DONE TO TRUE.
   101     015500     READ RECOVFILE FORMAT IS "FORMAT1"
           015600         INDICATOR IS END-INDICATOR   8 
           015700     END-READ
   102     015800     IF NO-ERROR THEN
   103     015900         PERFORM SOME-PROCESSING
           016000     END-IF.
           016100
           016200 SOME-PROCESSING.
          016300*   (たとえば、データベース処理などを挿入します。) 
           016400
                           * * * * *   ソ ー ス 仕 様 の 終 わ り   * * * * *
 1 
RECOVFILE に関する入出力エラーの発生時に行う処理を定義します。
 2 
問題を診断する際に役立つ情報を出力します。
 3 
ファイル状況が 9N (一時エラー) で、この入出力操作に関するエラー・リカバリーがこれ以前に試行されていない場合、 この時点でエラー・リカバリーが試行されます。
 4 
リカバリー手順として、入出力エラーの発生したプログラム装置をドロップしてから再獲得します。
 5 
プログラムのループを避けるため、リカバリーがそれ以前に試行されていた場合、ここでは試行されません。
 6 
プログラムの主部は、ユーザーが F1 キーを押してプログラムに終了を通知するまで、装置の読み書きを実行します。
 7 
WRITE 操作が失敗してリカバリーした場合、WRITE が再試行されます。
 8 
READ 操作が失敗した場合、装置に再書き込みしてから READ を再試行することにより処理が続行されます。