原因码

除了针对 IBM® MQ MQI 记录的原因码外,还可能出现以下原因码。 有关其他代码,请参阅 IBM MQ 应用程序事件日志。

表 1. 原因码及其含义
原因码 说明
MQRC_LIBRARY_LOAD_ERROR (6000) 无法装入一个或多个 IBM MQ 库。 检查所有 IBM MQ 库是否位于您正在使用的系统上的正确搜索路径中。 例如,确保包含 IBM MQ 库的目录位于 PATH中。
MQRC_CLASS_LIBRARY_ERROR (6001) 其中一个 IBM MQ classlibrary 调用返回了意外的 ReasonCodeCompletionCode 值。 请检查首次故障症状报告以获取详细信息。 请记下正在使用的最后一个方法/属性和类,并通知 IBM 支持人员该问题。
MQRC_STRING_LENGTH_TOO_BIG (6002) 试图向消息缓冲区写入长度大于 65535 个字节的 UTF 格式字符串。
MQRC_WRITE_VALUE_ERROR (6003) 使用的值超出范围; 例如 msg.WriteByte (240)
MQRC_PACKED_DECIMAL_ERROR (6004) 试图从消息缓冲区读取压缩十进制数,但是该数据指针处的数据格式不是有效的压缩数据格式。
MQRC_FLOAT_CONVERSION_ERROR (6005) 试图从消息缓冲区读取单精度或双精度浮点数,但是该数据指针处的数据格式不是相应的浮点格式。
MQRC_REOPEN_EXCL_INPUT_ERROR (6100) 打开的对象没有正确的 OpenOptions 设置,因此,需要一个或多个附加选项。 因为此队列对独占输入打开,而关闭将呈现一个窗口,从而为其他输入提供可能获取访问该队列的机会,所以需要隐式重新打开,但不能关闭。 显式地设置 OpenOptions 值以涵盖所有可能性,这样便不需要隐式地重新打开。
MQRC_REOPEN_INQUIRE_ERROR (6101) 打开的对象没有正确的 OpenOptions 设置,因此,需要一个或多个附加选项。 因为关闭之前要动态地检查对象的一个或多个特征,且 OpenOptions 值不包含 MQOO_INQUIRE 选项,因此,需要隐式重新打开,但不能关闭。 显式地设置 OpenOptions 值以包含 MQOO_INQUIRE 选项。
MQRC_REOPEN_SAVED_CONTEXT_ERR (6102) 打开的对象没有正确的 OpenOptions 设置,因此,需要一个或多个附加选项。 因为已使用 MQOO_SAVE_ALL_CONTEXT 选项打开此队列,且之前执行了破坏性的 Get 调用,所以需要隐式重新打开,但不能关闭。 这已使保留的状态信息与开放式队列关联,此信息将在关闭时被破坏。 显式地设置 OpenOptions 值以涵盖所有可能性,这样便不需要隐式地重新打开。
MQRC_REOPEN_TEMPORARY_Q_ERROR (6103) 打开的对象没有正确的 OpenOptions 设置,因此,需要一个或多个附加选项。 因为队列是定义类型为 MQQDT_TEMPORARY_DYNAMIC 的本地队列,而它将在关闭时被破坏,因此,需要隐式重新打开,但不能关闭。 显式地设置 OpenOptions 值以涵盖所有可能性,这样便不需要隐式地重新打开。
MQRC_ATTRIBUTE_LOCKED (6104) 试图在对象打开时更改该对象的值或属性。 某些属性(如 AlternateUserId)不能在对象打开时进行更改。
MQRC_CURSOR_NOT_VALID (6105) 自隐式重新打开上次使用已打开队列的浏览光标以来,该浏览光标已失效。 显式地设置 OpenOptions 值以涵盖所有可能性,这样便不需要隐式地重新打开。
MQRC_ENCODING_ERROR (6106) 下一个消息项的编码需要是 MQENC_NATIVE 编码才能读取。
MQRC_STRUCID_ERROR (6107) 缺少下一个消息项的标识结构(由数据指针开始处的 4 个字符派生而来),或者该结构与在其中读取项的变量类型不一致。
MQRC_NULL_POINTER (6108) 在需要或者暗指非空指针的位置提供了空指针。 这可能是由于将 Visual Basic 或 Excel 中使用的 IBM MQ 对象的显式声明用作要调用的参数所致。 例如:
  • 在 Visual Basic 中,dim msg as Object 正常工作,而 dim msg as MqMessage 可能无法正常工作。
  • 在 Visual Basic 中,定义和设置队列后,dim msg as MqMessageq.put msg 正常工作,而在 Excel 中,此命令会生成一个 MQRC_NULL_POINTER 异常。
MQRC_NO_CONNECTION_REFERENCE (6109) MQQueue 对象丢失与 MQQueueManager 对象的连接。 如果队列管理器断开连接,会发生这种情况。 删除此 MQQueue 对象。
MQRC_NO_BUFFER (6110) 没有可用的缓冲区。 对于 MQMessage 对象,无法分配缓冲区,因为对象状态中存在内部不一致。
MQRC_BINARY_DATA_LENGTH_ERROR (6111) 二进制数据的长度与目标属性的长度不一致。 对于所有属性而言,0 是一个正确的长度。 CorrelationId 属性和 MessageId 属性的正确长度是 24。 AccountingToken 属性的正确长度是 32。
MQRC_BUFFER_NOT_AUTOMATIC (6112) 无法调整用户定义和管理的缓冲区的大小。 因为消息缓冲区是系统管理的,这表明存在内部不一致。
MQRC_INSUFFICIENT_BUFFER (6113) 在向请求提供数据指针后,可用的缓冲区空间不足。 这可能是因为无法调整缓冲区的大小。
MQRC_INSUFFICIENT_DATA (6114) 在为读请求提供数据指针后,数据不足。 将此缓冲区减小到合适的大小后再读取该数据。
MQRC_DATA_TRUNCATED (6115) 将数据从一个缓冲区复制到另一个缓冲区时,数据被截断。 这可能是因为无法调整目标缓冲区的大小,或是因为寻址这个缓冲区或其他缓冲区的问题,或是因为缓冲区的大小缩小。
MQRC_ZERO_LENGTH (6116) 在要求或暗示长度为正的位置提供的长度为零。
MQRC_NEGATIVE_LENGTH (6117) 在要求长度为零或为正的位置提供的长度为负。
MQRC_NEGATIVE_OFFSET (6118) 在要求偏移量为零或为正的位置提供的偏移量为负。
MQRC_INCONSISTENT_FORMAT (6119) 下一个消息项的格式与读取项的变量的类型不一致。
MQRC_INCONSISTENT_OBJECT_STATE (6120) 此对象(已打开)和引用的 MQQueueManager 对象(未连接)之间存在不一致。
MQRC_CONTEXT_OBJECT_NOT_VALID (6121) MQPutMessageOptions 上下文引用没有引用有效的 MQQueue 对象。 此对象之前被破坏过。
MQRC_CONTEXT_OPEN_ERROR (6122) MQPutMessageOptions 上下文引用引用了无法打开以建立上下文的 MQQueue 对象。 这可能是由于 MQQueue 对象具有不恰当的打开选项。 请检查引用的对象的原因码以确定问题原因。
MQRC_STRUC_LENGTH_ERROR (6123) 内部数据结构的长度与其内容不一致。 对于 MQRMH 标头,长度不足以包含固定字段和所有偏移量数据。
MQRC_NOT_CONNECTED (6124) 因为到队列管理器的必需连接不可用,所以方法失败,且无法隐式地建立连接。
MQRC_NOT_OPEN (6125) 方法失败,因为 IBM MQ 对象未打开,并且无法隐式完成打开。
MQRC_DISTRIBUTION_LIST_EMPTY (6126) 因为分发列表中没有 MQDistributionListItem 对象,因此打开 MQDistributionList 失败。

更正操作:至少向分发列表中添加一个 MQDistributionListItem 对象。

MQRC_INCONSISTENT_OPEN_OPTIONS (6127) 因为对象已打开,所以方法失败,且此打开选项与所需的操作不一致。

更正操作:使用适当的打开选项打开此对象,然后重试。

MQRC_WRONG_VERSION (6128) 由于指定或遇到的版本号不正确或不受支持,因此方法失败。