CICS abend

AEYH: QIDERR not handled

An AEYH abend means an EXEC CICS temporary storage or transient data command named a queue CICS couldn't find, and the program didn't handle the QIDERR condition. Usually the TS queue was never written or already deleted, or the TD queue isn't defined in that region.

Other names for this code

Also written as AEYH abend, CICS AEYH, abend AEYH, QIDERR, CICS QIDERR, AEYH QIDERR, queue not found CICS.

What it means

QIDERR means the queue named on the command doesn't exist. EIBRESP is 44. It applies to both kinds of CICS queue.

For temporary storage (TS), READQ TS and DELETEQ TS raise QIDERR when no queue with that name is in main or auxiliary storage. A TS queue comes into being when a program first writes to it with WRITEQ TS, and it lasts until something deletes it. TS names are up to 8 characters with the QUEUE option or up to 16 with QNAME, and a shorter name is padded with blanks.

For transient data (TD), READQ TD, WRITEQ TD and DELETEQ TD raise QIDERR when the symbolic destination can't be found. A TD queue has to be defined and installed in the region, usually with a TDQUEUE resource definition.

Problems reaching a remote queue are reported differently. An unknown SYSID or a broken link raises SYSIDERR, not QIDERR.

The default action for QIDERR is to abend the task with AEYH. A program that codes RESP(WS-RESP) gets control back and can test for DFHRESP(QIDERR).

Common causes

  • A pseudo-conversational program reads a TS queue that holds saved screen data, but the queue was never written because the user started partway through the dialog, or a previous step already deleted it.
  • The TS queue name is built from the terminal ID or user ID, and the program builds it differently when it reads than when it writes.
  • The name field has low-values or the wrong padding, so it doesn't match the name that was written.
  • A housekeeping job or a cleanup step deleted TS queues while a transaction still needed them.
  • A TD queue isn't defined in this region. The CSD group holding the TDQUEUE definition isn't installed, or it's in the group list for test but not production.
  • DELETEQ TS runs on a queue that was already deleted.

How to find the problem

  1. The terminal message DFHAC2206 names the transaction. In the dump, EIBFN shows the queue command and EIBRSRCE the queue name. Long TS names are cut short in EIBRSRCE.
  2. Run the transaction under CEDF and look at the QUEUE or QNAME field in hex. Trailing low-values and case differences show up there.
  3. Use CEBR to browse a TS queue by name, or CEMT INQUIRE TSQUEUE to list the TS queues that exist.
  4. For TD, run CEMT INQUIRE TDQUEUE(name). If CICS doesn't find it, check the TDQUEUE definition with CEDA and which group installs it.

How to fix it

  • For a TS read, treat QIDERR as 'no saved data'. Start the dialog fresh instead of abending.
  • Build the queue name in one place, such as a copybook or a common paragraph, and use it for every write, read and delete.
  • Move spaces to the name field before building the name, so a short name is padded with blanks.
  • Define and install the missing TDQUEUE in the region, and add its group to the group list so it survives a cold start.
  • Ignore QIDERR on DELETEQ TS in cleanup code, since the queue being gone already is the outcome you wanted.

What it looks like

DFHDU0203I 10/18/2026 13:27:41 CICSPRD1 A transaction dump was taken for dumpcode: AEYH, Dumpid: 1/0094.
DFHAC2206 13:27:41 CICSPRD1 Transaction PAY6 failed with abend AEYH. Updates to local recoverable resources backed out.

IBM documentation

IBM documentation: AEYH. Use the documentation for your installed release.

Report a correction to WND Software.

Questions

Can WRITEQ TS raise QIDERR?

Not for an ordinary write. WRITEQ TS creates the queue if it doesn't exist. The exception is a WRITEQ TS with the REWRITE option, which needs an existing queue. Otherwise QIDERR on TS comes from reading or deleting a queue that isn't there.

Why does DELETEQ TS give QIDERR?

The queue had already been deleted, or never existed. In cleanup code this is harmless, so test for QIDERR and carry on.

What is the difference between AEYH and AEIW?

AEYH means the queue can't be found at all. AEIW means a READQ TD found the queue but it was empty.