Reason code 2085—MQRC_UNKNOWN_OBJECT_NAME—is the error you get when IBM MQ cannot find the object your program named. The connection succeeded, authority might be fine, but PAY.IN or ORDERS.NEW simply is not on this queue manager—or you asked for a queue when the object is a topic. Developers swear the queue exists because it works in test; operations DISPLAY QLOCAL on production and finds PAY.IN on QM_PROD while the job connects to QM_PROD_DR with empty repository after a failed promotion. This tutorial explains how 2085 surfaces in MQOPEN and MQPUT, case and padding rules, alias and remote queue indirection, model and dynamic queues, cluster name resolution, DLH reason 2085 on dead letters, and a troubleshooting workflow that fixes typos before opening authority tickets.
MQOD ObjectName and ObjectType must match a defined object. Opening ORDERS.NEW as OT_Q with no QLOCAL OR QALIAS yields 2085. Opening ORDERS.NEW as OT_TOPIC when only a queue exists yields object type errors or unknown object depending on call sequence. JMS createQueue maps to queue open—wrong JNDI name causes 2085 wrapped in JMSException. Always log ObjectName, ObjectType, and queue manager name from the failing connection handle context.
| Scenario | Why 2085 | Fix |
|---|---|---|
| Typo PAY..IN double dot | No matching name | Correct string; DEFINE if new |
| Queue on wrong QM | Object not on connected QM | Promotion or CONNAME fix |
| Use remote name locally | QREMOTE not defined | DEFINE QREMOTE plus XMITQ path |
| Expired dynamic reply | Queue deleted | Longer expiry; faster reply |
| Cluster queue not visible | Cluster repos or namelist | Cluster DEFINE and repos |
1234567DISPLAY QLOCAL('ORDERS.NEW') DISPLAY QALIAS('ORDERS.NEW') DISPLAY QREMOTE('ORDERS.NEW') * If all fail with not found, object is missing on this QM DEFINE QLOCAL('ORDERS.NEW') REPLACE + DESCR('Created after 2085 incident') MAXDEPTH(10000) REPLACE
Use DISPLAY with exact case. On distributed MQ, names are often case-sensitive. Mainframe conventions may pad names—verify COBOL copybooks do not truncate or pad with spaces differently than MQSC definitions.
Applications should open stable QALIAS names per environment; ALTDEF points to QM-specific base queue. 2085 after promotion often means alias missing on new queue manager while base queue was copied. Remote queues: applications must not MQOPEN a queue name that only exists on a remote queue manager unless a QREMOTE on the local QM defines routing. Put through QREMOTE does not require the application to open the remote name directly—architects clarify in standards.
Model queue DEFINE creates dynamic queues with prefix; if model missing, dynamic create fails with 2085-related errors. Dynamic queues expire after inactivity—reply queue gone before response PUT is a classic integration bug. Increase DEFPSIST and expiry attributes only after understanding memory and security implications of long-lived dynamic queues.
Messages on the DLQ carry MQDLH with Reason 2085 when the original put targeted unknown object. Fix routing definition; requeue only after correcting destination name on a test queue. Teach support to read DLH Reason before requeue storms.
2085 is mailing a letter to an address where no building exists—the post office is open (queue manager up) but the street name is wrong.
You tried to put marbles in a box name that does not exist in the room you are standing in.
Given JMS queue ORDERS.NEW failing 2085, list DISPLAY commands for QLOCAL, QALIAS, QREMOTE in order.
Explain request-reply dynamic queue expiry causing server-side 2085 on reply PUT.
Write DEFINE QALIAS pattern for dev/test/prod using one application constant name.
1. 2085 means:
2. First command to verify queue exists:
3. Opening PAY.IN on QM_TEST when queue exists only on QM_PROD causes:
4. QALIAS requires: