DCB—Construct a data control block (BISAM)

Recommendation: The system no longer supports indexed sequential data sets. Convert the data set to a key sequenced data set (KSDS) and use the ISAM interface of VSAM or convert your program to use VSAM.

The data control block for a basic indexed sequential access method (BISAM) data set is constructed during assembly of the problem program. You must code DSORG and MACRF in the DCB macro, but the other DCB parameters can be supplied to the data control block from other sources. Each BISAM DCB parameter description contains a heading, "Source". The information under this heading describes the sources that can supply the parameters. Each reference to a DCB OPEN exit routine applies also to a JFCBE exit routine.

You can assemble the DCB macro into a program that resides above the 16MB line, but the program must move it below the line before using it.

The format of the DCB macro for BISAM is:

Note:
  1. This parameter must be supplied before an OPEN macro is issued for this DCB; it cannot be supplied in the open exit routine.

BISAM supports the following DCB parameters:
BFALN={F|D}
specifies the boundary alignment for each buffer in the buffer pool when the buffer pool is acquired for use with dynamic buffering or when the buffer pool is constructed by a GETPOOL macro. If BFALN is omitted, the system provides doubleword alignment for each buffer. You can specify:
F
specifies that each buffer is on a fullword boundary that is not also a doubleword boundary.
D
specifies that each buffer is on a doubleword boundary.

If the BUILD macro is used to construct the buffer pool, or if the problem program controls all buffering, the problem program must provide an area for the buffers and control buffer alignment.

Source: BFALN can be supplied in the DCB macro, in the DCB subparameter of a DD statement, or by the problem program before completion of the data control block exit routine.

BUFCB=relexp
specifies the address of the buffer pool control block when the buffer pool is constructed by a BUILD macro.

You can omit BUFCB if you request dynamic buffering or use the GETPOOL macro to construct the buffer pool, because the system places the address of the buffer pool control block into the data control block. Also, if the problem program is to control all buffering, omit BUFCB.

Source: BUFCB can be supplied in the DCB macro or by the problem program before completion of the data control block exit routine.

BUFL=absexp (maximum value is 32760)
specifies the length, in bytes, of each buffer in the buffer pool to be constructed by a BUILD or GETPOOL macro. When the data set is opened, the system computes the minimum buffer length required and verifies that the length in the buffer pool control block is equal to or greater than the minimum length required. The system then inserts the computed length into the BUFL field of the data control block.

If dynamic buffering is requested, the system computes the buffer length required, and BUFL is not required.

If the problem program controls all buffering, BUFL is not required. However, an indexed sequential data set requires additional buffer space for system use. For a description of the buffer length required for various ISAM operations, see z/OS DFSMS Using Data Sets.

Source: BUFL can be supplied in the DCB macro, in the DCB subparameter of a DD statement, or by the problem program before completion of the data control block exit routine.

BUFNO=absexp (maximum value is 255)
specifies the number of buffers that are requested for use with dynamic buffering. If dynamic buffering is requested but BUFNO is omitted, OPEN automatically acquires two buffers for use with dynamic buffering.

If the GETPOOL macro is used to construct the buffer pool, BUFNO is not required.

Source: BUFNO can be supplied in the DCB macro, in the DCB subparameter of a DD statement, or by the problem program before completion of the data control block exit routine.

DDNAME=symbol
specifies the name used to identify the job control language data definition (DD) statement that defines the indexed sequential data set being allocated or processed.

Source: DDNAME can be supplied in the DCB macro or by the problem program before an OPEN macro is issued to open the data set.

DSORG=IS
specifies the indexed sequential organization of the data set. IS is the only combination of characters that can be coded for BISAM.

Source: Unless it is for a data set passed from a previous job step, DSORG must be coded in the DCB macro and in the DCB subparameter of a DD statement. In this case, DSORG can be omitted from the DD statement.

EXLST=relexp
specifies the address of the DCB exit list. EXLST is required only if the problem program uses the data control block OPEN exit routine for additional processing.

For the functions, format, and requirements for exit list processing, see z/OS DFSMS Using Data Sets. The exit list must reside below the line.

Source: EXLST can be supplied in the DCB macro or by the problem program before the relevant function is needed.

MACRF={{(R[S][C])}
    {(W{U[A]|A}[C])}
    {(R[U[S]|S][C], W{U[A]|A}[ C])}}
specifies the type of macros (READ, WRITE, CHECK, WAIT, and FREEDBUF) and type of processing (add records, dynamic buffering, and update records) to be used with the data set being processed. You can code the parameter in any of the combinations shown above. The following characters can be coded for BISAM:
A
specifies that new records are to be added to the data set. This character must be coded if WRITE KN macros are used with the data set.
C
specifies that the CHECK macro is used to test I/O operations for completion. If C is not specified, WAIT macros must be used to test for completion of I/O operations.
R
specifies that READ macros are to be used. R is required if the OPEN option is INPUT or UPDAT. It has no effect if the OPEN option is OUTPUT or EXTEND.
S
specifies that dynamic buffering is requested in READ macros. Do not specify S if the problem program provides the buffer pool.
U
specifies that records in the data set are to be updated in place. If U is coded in combination with R, it must also be coded in combination with W. For example, MACRF=(RU,WU).
W
specifies that WRITE macros are to be used. W is required if the OPEN option is OUTPUT. It has no effect if the OPEN option is INPUT.

Source: MACRF must be coded in the DCB macro.

MSHI=relexp
specifies the address of the storage area that are used to contain the highest-level master index for the data set. The system uses this area to reduce the search time required to find a given record in the data set. MSHI is coded only when SMSI is coded.

Source: MSHI can be supplied in the DCB macro or by the problem program before completion of the data control block exit routine.

MSWA=relexp
specifies the address of the storage work area to be used by the system when new records are being added to the data set. This parameter is optional, but the system acquires a minimum-size work area if the parameter is omitted. MSWA is coded only when the SMSW parameter is coded.

Processing efficiency can be increased if more than a minimum-size work area is provided. For more detailed information about work area size, see z/OS DFSMS Using Data Sets.

Source: MSWA can be supplied in the DCB macro or by the problem program before completion of the data control block exit routine.

NCP=absexp (maximum value is 99)
specifies the maximum number of READ and WRITE macros issued before the first CHECK (or WAIT) macro is issued to test for completion of the I/O operation. The maximum number can be less than 99, depending on the amount of virtual storage available below the line in the address space. If NCP is omitted, 1 is assumed. If dynamic buffering is used, the value specified for NCP must not exceed the number of buffers specified in BUFNO.

Source: NCP can be supplied in the DCB macro, in the DCB subparameter of a DD statement, or by the problem program before completion of the data control block open exit routine.

OPTCD=([L][R][W])
specifies the optional services that are performed by the control program when creating or updating an indexed sequential data set. You must request all optional services by one method. That is, by the data set label of an existing data set, this macro, or the DD statement on the DCB parameter. However, it can be modified by the problem program. You can code the following characters in any order, in any combination, and without commas between characters:
L
specifies that the control program delete records that have a first byte of X'FF'. (These records can be deleted when space is required for new records. To use the delete option, the relative key position (RKP) must be greater than 0 for fixed-length records and greater than 4 for variable-length records.)
R
specifies that the control program place reorganization statistics in certain fields of the data control block. The problem program can analyze these statistics to determine when to reorganize the data set. If OPTCD is omitted, the reorganization statistics are automatically provided. However, if you use OPTCD, you must specify OPTCD=R to get the reorganization statistics.
W
specifies a validity check for write operations on direct access storage devices.
SMSI=absexp (maximum value is 65535)
specifies the length, in bytes, that is required to contain the highest-level master index for the data set being processed. Look at the DCBNCRHI field of the data control block to determine the size that is required. When an indexed sequential data set is created (with QISAM), the size of the highest-level index is inserted into the DCBNCRHI field. If the value that is specified in SMSI is less than the value in the DCBNCRHI field, the task is abnormally terminated.

Source: SMSI can be supplied in the DCB macro or by the problem program before completion of the data control block exit routine.

SMSW=absexp (maximum value is 65535)
specifies the length, in bytes, of a work area that is used by BISAM. This parameter is optional, but the system acquires a minimum-size work area if the parameter is omitted. Code SMSW together with MSWA. If you code SMSW but the size you specify is less than the minimum that is required, the task is abnormally terminated. z/OS DFSMS Using Data Sets describes the methods of calculating the size of the work area.

If unblocked records are used, the work area must be large enough to contain all the count fields (8 bytes each), key fields, and data fields that are contained on one direct access storage device track.

If blocked records are used, the work area must be large enough to contain all the count fields (8 bytes each) and data fields that are contained on one direct access storage device track plus additional space for one logical record (LRECL value).

Source: SMSW can be supplied in the DCB macro or by the problem program before completion of the data control block exit routine.

SYNAD=relexp
specifies the address of the error analysis routine given control when an uncorrectable input/output error occurs. The entry point of this SYNAD routine must reside below the line. The contents of the registers when the error analysis routine is given control are described in z/OS DFSMS Using Data Sets. Additional status information available to the SYNAD routine is described in Status information following an input/output operation.

The error analysis routine must not use the save area pointed to by register 13. The system does not restore registers when it regains control from the error analysis routine. The error analysis routine can issue a RETURN macro that uses the address in register 14 to return control to the system. When control is returned in this manner, the system returns control to the problem program and proceeds as though no error had been found. If the error analysis routine continues processing, the results are unpredictable.

When you have issued the CHECK macro, the SYNAD routine receives control if an I/O error occurs. If SYNAD is omitted, the task is abnormally terminated when an uncorrectable input/output error occurs.

Source: SYNAD can be supplied in the DCB macro or by the problem program. The problem program can also change the error analysis routine address at any time.