Automatic deletion of journal receivers

If you choose system journal receiver management, you can also have the system delete journal receivers that are no longer needed for recovery. You can only specify this if you are using system journal receiver management.

The system can only evaluate whether a receiver is needed for its own recovery functions, such as recovering access paths or rolling back committed changes. It cannot determine whether a receiver is needed to apply or remove journaled changes.

Note: Use automatic deletion of journal receivers with care if you use save-while-active operations to save objects before they reach a commitment boundary. Ensure that you save the journal receivers before the system deletes them. If an object is saved before it reaches a commitment boundary it can have partial transactions. To avoid data loss you must have access to the journal receivers that were attached during the save-while-active operation when you restore the objects with partial transactions.

The system will automatically delete journal receivers if you do one of the following:

  • Specify Delete receivers when no longer needed in the IBM® Navigator for i Change Receivers or Journal Properties dialogs.
  • Specify DLTRCV (*YES) in the Create Journal (CRTJRN) or Change journal (CHGJRN) commands.

However, even if you select one of the previous items, the system cannot delete the journal receiver if any of the following conditions is true:

  • An exit program that is registered for the Delete Journal Receiver exit point (QIBM_QJO_DLT_JRNRCV) indicates that the receiver is not eligible for deletion.
  • A journal has remote journals associated with it, and one or more of the associated remote journals does not have a full copy of this receiver.
  • The system could not get the appropriate locks that are required to complete the operation.
  • The exit program registration facility was not available to determine if any exit programs were registered.

If you use system delete-receiver support, you must ensure that your environment is suitable. You must also regularly check the QSYSOPR message queue and the message queues that are assigned to your journals.

  • If the system cannot complete the DLTJRNRCV command for any of the above reasons, it retries every 10 minutes (or the value you specify on the DLTRCVDLY parameter). It sends a CPI70E6 message to the journal's message queue, and to QSYSOPR message queue. If this occurs, you might want to determine why the operation cannot be performed and either correct the condition or run the DLTJRNRCV command.
  • If the system cannot complete the command for any other reason, it sends a CPI70E1 message to the message queue that is assigned to the journal. If you have not specifically assigned a message queue to the journal, the message will be sent to the QSYSOPR message queue. Look at the messages in QHST to determine the problem. After you correct the problem, use the DLTJRNRCV command on the specific journal receiver.

Do not select to have the detached journal receiver deleted if you might need it for recovery or if you want to save it before it is deleted. The system does not save the journal receiver before deleting it. The system does not issue the warning message (CPA7025) that it sends if a user tries to delete a receiver that has not been saved.

Examples of when you might specify automatic journal deletion include:

  • You are journaling only because it is required to use commitment control.
  • You are journaling for explicit access-path protection.
  • You are replicating the journal receiver to another system through the remote journal function, and that system is providing the backup copy of the journal receiver.

Delaying the next attempt to delete a journal receiver

If you are using the CRTJRN or CHGJRN command, you can use the Delete Receiver Delay Time (DLTRCVDLY) parameter. The system waits the time you specify (in minutes) with the DLTRCVDLY parameter before its next attempt to delete a journal receiver that is associated with the journal when one of the following is true:

  • The system cannot allocate a needed object.
  • You are using an exit program, and the exit program votes no.
  • You are using remote journaling and the receiver has not been replicated to all the remote journals.

If you do not specify this parameter, the system waits ten minutes, which is the default.

Save your system while it is active has instructions for saving an object with transactions in a partial state. Example: Recover objects with partial transactions has instructions for recovering objects with partial transactions.