ILE COBOL Programmer's Guide

TRANSACTION File Recovery

In some cases, you can recover from I/O errors on TRANSACTION files without intervention by the operator, or the varying off/varying on of workstations or communications devices.

For potentially recoverable I/O errors on TRANSACTION files, the system initiates action in addition to the steps that must be taken in the application program to attempt error recovery. For more information about action taken by the system, see the Communications Management.

By examining the file status after an I/O operation, the application program can determine whether a recovery from an I/O error on the TRANSACTION file is possible. If the File Status Key has a value of 9N, the application program may be able to recover from the I/O error. A recovery procedure must be coded as part of the application program and varies depending on whether a single device was acquired by the TRANSACTION file or whether multiple devices were attached.

For a file with one acquired device:

  1. Close the TRANSACTION file with the I/O error.
  2. Reopen the file.
  3. Process the steps necessary to retry the failing I/O operation. This may involve a number of steps, depending on the type of program device used. (For example, if the last I/O operation was a READ, you may have to repeat one or more WRITE statements, which were processed prior to the READ statement.) For more information on recovery procedures, see the ICF Programming manual.

For a display file with multiple devices acquired:

  1. DROP the program device that caused the I/O error on the TRANSACTION file.
  2. ACQUIRE the same program device.
  3. See Step 3 above.

For an ICF file with multiple devices acquired:

  1. ACQUIRE the same program device.
  2. See Step 3 above.

For a display file with multiple devices acquired:

Application program recovery attempts should typically be tried only once.

If the recovery attempt fails:

For a description of major and minor return codes that may help in diagnosing I/O errors on the TRANSACTION file, see the ICF Programming manual.

Figure 92 gives an example of an error recovery procedure.

Figure 91. Example of Error Recovery Procedure -- 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'

Figure 92. Example of Error Recovery Procedure


 5722WDS V5R3M0  030905 LN  IBM ILE COBOL           CBLGUIDE/RECOVERY      ISERIES1   03/09/15 13:48:21        Page      2
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     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
           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 V5R3M0  030905 LN  IBM ILE COBOL          CBLGUIDE/RECOVERY     ISERIES1   03/09/15 13:48:21        Page      3
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
    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 V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/RECOVERY        ISERIES1   03/09/15 13:48:21        Page      4
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
           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*    (Insert some database processing, for example.)
           016400
                           * * * * *   E N D   O F   S O U R C E   * * * * *

(1)
This defines processing that takes place when an I/O error occurs on RECOVFILE.

(2)
This prints out information to help in diagnosing the problem.

(3)
If the file-status equals 9N (temporary error), and no previous error recovery has been attempted for this I/O operation, error recovery is now attempted.

(4)
Recovery consists of dropping, then reacquiring, the program device on which the I/O error occurred.

(5)
To avoid program looping, recovery is not attempted now if it was attempted previously.

(6)
The mainline of the program consists of writing to and reading from a device until the user signals an end to the program by pressing F1.

(7)
If the WRITE operation failed but recovery was done, the WRITE is attempted again.

(8)
If the READ operation failed, processing will continue by writing to the device again, and then attempting the READ again.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]