ISAM / VSAM Interface

The advent of getting MVS 3.8 installed and usable under Hercules has a good news/bad news aspect if you want to write some useful application programs using key-sequenced datasets in anything other than Assembler.  The good news is that VSAM (Virtual Storage Access Method) is present and fully functional in the base system.  The bad news is that the compilers that we have available for the higher level languages (specifically COBOL, PL/1, and RPG), don't know anything about describing and using VSAM files.  However, the ISAM interface is also present and functional on MVS 3.8 and that is how we can overcome this limitation, albeit with some minor limitations.

Subsequent to producing this page on my site, I wrote the VSAM Interface routines for the MVT COBOL and PL/I compilers.  So I am adding this note here to make sure that those who are contemplating using the ISAM/VSAM interface will be aware of another option.  You can read about, and download, the routines from VSAM File Access for COBOL and VSAM File Access for PL/I.

The ISAM interface allows a properly written and debugged program that processes an indexed sequential data set to process a key-sequenced VSAM dataset (KSDS) transparently.  The KSDS can have been converted from an indexed-sequential or a sequential dataset (or another KSDS) or can be loaded by one of your own programs.  The loading program can be coded with VSAM macros, ISAM macros, PL/1 statements, COBOL statements, or RPG statements.  That is, you can load records into a newly defined key-sequenced data set with a program that was coded to load records into an indexed sequential dataset.

When a processing program that uses ISAM (assembler-language macros, PL/1, COBOL, or RPG) issues an OPEN to open a key-sequenced data set, the ISAM interface is given control to:

  • construct control blocks that are required by VSAM

  • load the appropriate ISAM interface routines into virtual storage

  • initialize the ISAM DCB to enable the interface to intercept ISAM requests

  • take the DCB user exit requested by the processing program.

The ISAM interface intercepts each subsequent ISAM request, analyzes it to determine the equivalent keyed VSAM request, defines the keyed VSAM request in a request parameter list, and initiates the request.

The ISAM interface receives return codes and exception codes for logical and physical errors from VSAM, translates them to ISAM codes and routes them to the processing program or error-analysis (SYNAD) routine through the ISAM DCB or DECB.

Implementing the ISAM Interface

To execute your ISAM processing program to process a key-sequenced dataset, replace the ISAM DD card with a VSAM DD card using the ddname that was used for the ISAM dataset.  The VSAM DD card names the key-sequenced dataset and gives any necessary VSAM parameters (through the AMP parameter).  Specify DISP=MOD for resume loading and DISP=OLD or SHR for all other processing (be wary of SHR as there are significant limitations on the protections against simultaneous updates of VSAM data accessed through the ISAM interface). 

You do not have to specify anything about the ISAM interface itself.  The interface is automatically brought into action when you processing program opens a DCB whose associated DD statement describes a key-sequenced dataset (instead of an indexed sequential dataset).  If you have defined your VSAM dataset in a user catalog, specify the user catalog in a JOBCAT or STEPCAT DD statement.

The DCB parameter in the DD statement that identifies a VSAM dataset is invalid and must be removed.  If the DCB parameter is not removed, unpredictable results can occur.  Certain DCB-type information can be safely specified in the AMP parameter. 

When an ISAM processing program is run with the ISAM interface, the AMP parameter allows you to specify:

  • that a VSAM dataset is to be processed (AMORG)

  • the need for additional data buffers to improve sequential performance (BUFND)

  • the need for extra index buffers for simulating the residency of the highest level(s) of an index in virtual storage (BUFNI)

  • whether to remove records flagged (OPTCD)

  • what record format (RECFM) is used by the processing program

  • the number of concurrent BISAM and QISAM (basic and queued indexed-sequential access methods) requests that hte processing program can issue (STRNO)

  • the name of an ISAM user exit routine to analyze physical and logical errors (SYNAD).

AMP Subparameter Definition

AMORG (required)

Indicates that the DD statement defines a VSAM dataset and is required for the following reasons:

  • When dataset access is through the ISAM interface program and the DD statement contains VOLUME and UNIT parameters or contains a DUMMY parameter.

  • To open an ACB for a VSAM dataset, if the dataset is not fully defined at the beginning of the job step

BUFND=number

Specifies the number of I/O buffers that VSAM is to use ofr data records.  The minimum is 1 plus the STRNO subparameter number.  This value overrides the BUFND value specified in the ACB or GENCB macro, or provides a value if one is not specified.  If you omit STRNO, BUFND must be at least 2.

If you omit BUFND from AMP and from the ACB macro instruction, the system uses the STRNO number plus 1.

BUFNI=number

Specifies the number of I/O buffers that VSAM is to use for index records.  This value overrides the BUFNI value specified in the ACB or GENCB macro, or provides a value if one is not specified.  If you omit BUFNI from AMP and from the ACB macro instruction, VSAM uses as many index buffers as the STRNO subparameter number.  If you omit both BUFNI and STRNO, VSAM uses 1 index buffer.

If data access is through the ISAM interface program, specify for the BUFNI number 1 more than the STRNO number, or specify 2 if you omit STRNO, to simulate having the highest level of an ISAM index resident.  Specify a BUFNI number 2 or more greater than the STRNO number to simulate having intermediate levels of the index resident.

BUFSP=number

Specifies the maximum number of bytes for the data and index buffers in the user area.  This value overrides the BUFSP value specified in the ACB or GENCB macro, or provides a value if one is not specified.

If BUFSP specifies fewer bytes than the BUFfERSPACE parameter of the access method services DEFINE command, the BUFFERSPACE number overrides the BUFSP number.

OPTCD=I
OPTCD=L
OPTCD=IL

Indicates how the ISAM interface program is to process records that the step's processing program flags for deletion.

I requests, when the data control block (DCB) contains OPTCD=L, that the ISAM interface program is not to write into the dataset records marked for deletion by the processing program.

If AMP=('OPTCD=I') is specified without OPTCD=L in the DCB, the system ignores deletion flags on records.

L requests that the ISAM interface program is to keep in the dataset records marked for deletion by the processing program.

If records marked for deletion are to be kept but OPTCD=L is not in the DCB, AMP=('OPTCD=L') is required.

Note:  This parameter has the same meaning and restrictions for the ISAM interface as it has for ISAM.  While it was not requred in the ISAM job control language, you should code it in the AMP parameter.

IL requests that the ISAM interface program is not to write into the dataset records marked for deletion by the processing progarm.  If the processing program had read the record for update, the ISAM interface program deletes the record from the dataset.

AMP=('OPTCD=IL') has the same effect as AMP=('OPTCD=I') coded with the OPTCD=L in the DCB.

RECFM=F
RECFM=FB
RECFM=V
RECFM=VB

Identifies the ISAM record format used by the processing program.  You must code this RECFM subparameter when the record format is not specified in the DCB.

Note:  This parameter has the same meaning and restrictions for the ISAM interface as it has for ISAM.  While it was not required in the ISAM job control language, you should code it in the AMP parameter.

All VSAM requests are for unblocked records.  If the processing program requests blocked records, the ISAM interface program sets the overflow-record indicator for each record to indicate that each is being passed to the program unblocked.

F indicates fixed-length records.
FB indicates blocked fixed-length records.
V indicates variable-length records.
VB indicates blocked variable-length records.

If no RECFM is specified in the AMP parameter or in the DCB, V is the default.

STRNO=number

Indicates the number of request parameter lists the processing program uses concurrently.  The number must at least equal the number of BISAM and QISAM requests that the program can issue concurrently.  If the program creates subtasks, add together the number of requests for each subtask plus 1 for each subtask that sequentially processes the dataset.  This value overrides the STRNO value specified in the ACB or GENCB macro, or provides a value if one is not specified.

SYNAD=module

Names a SYNAD exit routine.  The ISAM interface program is to load and exit to this routine if a physical or logical error occurs when the processing program is gaining access to the dataset.

The SYNAD parameter overrides a SYNAD exit routine specified in the EXLST or GENCB macro instruction that generates the exit list.  The address of the intended exit list is specified in the access method control block that links this DD statement to the processing program.  If no SYNAD exit is specified, the system ignores the AMP SYNAD parameter.


I hope that you have found my instructions useful.  If you have questions that I can answer to help expand upon my explanations and examples shown here, please don't hesitate to send them to me:



This page was last updated on September 07, 2003 .