Data availability considerations
The following information describes the conditions that could cause data to become unavailable in a full-function database and the program calls that allow your program to manage data under these conditions.
Dealing with unavailable data
The conditions that make the database unavailable for both read and update are:
- The
/LOCK
command for a database was issued. - The
/STOP
command for a database was issued. - The
/DBRECOVERY
command was issued. - Authorization for a database failed.
The conditions that make the database available only for read and not for update are:
- The
/DBDUMP
command has been issued. - Database ACCESS value is RD (read).
In addition to unavailability of an entire database, other situations involving unavailability of a limited amount of data can also inhibit program access. One such example would be a failure situation involving data sharing. The active IMS system knows which locks were held by a sharing IMS system at the time the sharing IMS system failed. Although the active IMS system continues to use the database, it must reject access to the data which the failed IMS system locked upon failure. This situation occurs for both full-function and DEDB databases.
The two situations where the program might encounter unavailable data are:
- The program makes a call requiring access to a database that was unavailable at the time the program was scheduled.
- The database was available when the program was scheduled, but limited amounts of data are unavailable. The current call has attempted to access the unavailable data.
Regardless of the condition causing the data to be unavailable, the program has two possible approaches when dealing with unavailable data. The program can be insensitive or sensitive to data unavailability.
- When the program is insensitive, IMS takes appropriate action when the program attempts to access unavailable data.
- When the program is sensitive, IMS informs the program that the data it is attempting to access is not available.
If the program is insensitive to data unavailability, and attempts to access unavailable data, IMS aborts the program (3303 pseudo-abend), and backs out any updates the program has made. The input message that the program was processing is suspended, and the program is scheduled to process the input message when the data becomes available. However, if the database is unavailable because dynamic allocation failed, a call results in an AI (unable to open) status code.
If the program is sensitive to data unavailability and attempts to access unavailable data, IMS returns a status code indicating that it could not process the call. The program then takes the appropriate action. A facility exists for the program to initiate the same action that IMS would have taken if the program had been insensitive to unavailable data.
IMS does not schedule batch programs if the data that the program can access is unavailable. If the batch program is using block-level data sharing, it might encounter unavailable data if the sharing system fails and the batch system attempts to access data that was updated but not committed by the failed system.
The following conditions alone do not cause a batch program to fail during initialization:
- A PCB refers to a HALDB.
- The use of DBRC is suppressed.
However, without DBRC, a database call using a PCB for a HALDB is not allowed. If the program is sensitive to unavailable data, such a call results in the status code BA; otherwise, such a call results in message DFS3303I, followed by ABENDU3303.
Scheduling and accessing unavailable databases
By
using the INIT
, INQY
, SETS
,
SETU
, and ROLS
calls, the program can manage a data environment
where the program is scheduled with unavailable databases.
The INIT
call
informs IMS that the program is sensitive to unavailable data
and can accept the status codes that are issued when the program attempts to access such data. The
INIT
call can also be used to determine the data availability for each
PCB.
The INQY
call is operable in both batch and online IMS environments. IMS application programs
can use the INQY
call to request information regarding output destination, session
status, the current execution environment, the availability of databases, and the PCB address based
on the PCBNAME. The INQY
call is only supported by way of the AIB interface
(AIBTDLI or CEETDLI using the AIB rather than the PCB address).
The SETS
,
SETU
, and ROLS
calls enable the application to define multiple
points at which to preserve the state of full-function (except HSAM) databases and message activity.
The application can then return to these points at a later time. By issuing a SETS
or SETU
call before initiating a set of DL/I calls to perform a function, the
program can later issue the ROLS
call if it cannot complete a function due to data
unavailability.
The ROLS
call allows the program to roll back its IMS full-function database activity to the state that it was in
prior to a SETS
or SETU
call being issued. If the PSB contains an
MSDB or a DEDB, the SETS
and ROLS
(with token) calls are invalid.
Use the SETU
call instead of the SETS
call if the PSB contains a
DEDB, MSDB, or GSAM
PCB.
The
ROLS
call can also be used to undo all update activity (database and messages)
since the last commit point and to place the current input message on the suspend queue for later
processing. This action is initiated by issuing the ROLS
call without a token or
I/O area.
ROLS
(with a token) or SETS
.