- 论坛徽章:
- 0
|
异常造成,可用下列办法先恢复它的安全信息,就能删除此Queue。
先进到如下目录:
对于UNIX系统为:$MQM/qmgrs/<qmanger name>/queues/auth
找到此Queue的名字,用此目录下其它Queue(如Q1!LOCAL)的内容覆盖此Q:
cp Q1!LOCAL EXA!LOCAL
如果没有此Queue的名字,也可使用上述命令直接创建,若EXA.LOCAL为用户创建的第一个Queue,则可再创建一个Queue,再用上述办法。
使用上述办法后,就能成功删除此Queue了。
连接故障维护
MQ客户端与MQ服务器端通讯时报2035错误
通常情况下,MQ客户端与MQ服务器端通讯时,使用MQ服务器端的服务连接通道在MCAUSER属性中指定的用户作为MQ客户端连上来时使用的用户,如果MCAUSER属性值为空,则使用MQ客户端所在操作系统使用的用户作为MQ客户端连上来时使用的用户。通讯时,报2035错误,就是由于客户端与服务器端通讯时所使用的用户没有权限造成的。解决办法有两种:
方法1:
在服务器端的服务连接通道定义中设置MCAUSER属性的值为mqm:(下例中假设通道定义名为SERVER)
ALTER CHANNEL(SERVER) CHLTYPE(SVRCONN) MCAUSER("mqm")
同时确保mqm用户为mqm组的成员,具体办法随MQ 服务器所在的操作系统而定,在此就不再赘述。
方法2:
若保持MQ服务器端的通道定义的MCAUSER属性值为缺省值,即为空,则可将MQ客户端所使用的用户添加到MQ服务器所在的操作系统中。例如,若MQ客户端使用的用户为ADMIN,则在MQ服务器端添加用户ADMIN,并保证此用户在MQ服务器端的mqm组中,以及有执行队列管理器上的操作所必需的权限。
MQ通道消息序列号(MSN)复位问题
正常情况下,无论是重新启动队列管理器还是重新启动计算机,通道序列号都不会因此而变化,因而不需要进行复位操作。但是,当在通信双方的一方机器上重新安装MQ或者删除重新建立通道,或者手动对通道的一方进行复位,尽管通道仍然可以正常启动,但是当传送数据时,通信双方会因通道序列号不匹配而出错。在通道错误日志文件(/MQ安装目录/qmgrs/队列管理器名/errors/AMQERR01.LOG)中会出现AMQ9526错误,类似如下格式:
---------------------------------------------------------
AMQ9526: 通道 'SDR.TEST' 的消息序号出错。
说明:
本地和远程队列管理器对下一个消息序号不一致。当希望消息序号 1 时,发送了序号为 6 的消息。
操作:
确定该不一致的原因。有可能同步信息已损坏, 或已被逆序恢复成先前的版本。如果问题不能解决, 可用 RESET CHANNEL 命令在通道的发送端人工复位此序号。
---------------------------------------------------------
出现这种情况时,解决办法是:
用MQSC命令RESET CHANNEL(通道名)进行复位。
例如上述例子中,既可以在通道的发送方运行命令:
RESET CHL(SDR.TEST)
也可以在通道的接收方运行命令:
RESET CHL(SDR.TEST) SEQNUM(6)
RESET CHANNEL命令说明
该命令可以用于除SVRCONN 和 CLNTCONN 外的所有通道类型。但是,如果该命令用于发送或服务器通道,则除发送或服务器通道被复位外,另一端(接收或请求器通道)也会在下一次初始化时被同时复位。如果该命令被用于接收方或请求器方,另一方不会被自动复位。
如何检查远程机器上的MQSeries通道侦听程序是否在运行
在使用MQSeries进行通讯时,通讯双方需要先启动通道侦听程序,但是,当通讯出现故障时,如何知道对方的侦听程序已经在运行成为一个问题。以下介绍一个简单的办法, 使用telnet 检测对方的侦听程序:
运行命令格式:
telnet [对方IP地址] [对方MQ端口号]
如: telnet 10.2.2.11 1414
在Unix上,如果能建立连接,提示如下:
telnet 9.185.43.164 1414
Trying...
Connected to 9.185.43.164.
Escape character is '^]'.
在Windows NT上, Telnet 窗口左上方将出现黑色方块状光标。
以上操作如果不能确定是否已经建立连接,可以使用netstat命令查看。
命令格式:
netstat -n
如果已建立连接,出现 tcp4 0 0 10.2.2.11.1414 10.2.2.10.1587 ESTABLISHED
注意连接状态为ESTABLISHED
通道处于不确定性状态(INDOUBT)的解决方法
在某些异常情况下, 通道可能处于不确定状态,导致消息无法正常发送。本文说明检查不确定状态的方法,以及解决办法.
MQSC命令: DIS CHS(通道名) ALL
在通道的状态属性中, INDOUBT属性值为YES(仅对发送通道SDR, 服务器通道SVR, 和群集发送通道CLUSSDR有效). 通道处于不确定性状态的原因是通道的一方与另一方之间对消息是否发送或接收到不能达成一致.
通常情况下, 通道会在重新启动时自动进行再同步, 称为通道分辨(RESOLVE)可以采用MQSC命令或者 PCF 编程来进行通道分辨, 下面以MQSC命令为例说明:
在除MQ for Windows 95/98外的其它平台上, 使用 DISPLAY CHSTATUS命令来判断通道两端最后提交的逻辑工作单元 (LUWID),命令如下:
在发送端(通道的不确定端), 执行DISPLAY CHSTATUS(通道名称) SAVED CURLUWID
在接受端:
DISPLAY CHSTATUS(通道名称) SAVED LSTLUWID 在MQSeries for Windows中, DISPLAY CHSTATUS 不支持, 可以察看"部件"窗口中的通道状态属性.
如果以上两个LUWID一致, 则说明接收端已经提交不确定的UOW. 这种情况下, 可以用以下命令将不确定消息从传输队列中移去。
RESOLVE CHANNEL(name) ACTION(COMMIT)
如果以上两个LUWID不一致, 说明接收端尚未提交不确定的UOW. 这种情况下, 可以用以下消息保留不确定消息.
RESOLVE CHANNEL(name) ACTION(BACKOUT)
当通道状态属性INDOUBT变为NO并重新启动后, 通道即可重新传送传输队列中的消息。
常用MQ系统操作命令
创建队列管理器
crtmqm QMNmae
启动队列管理器
strmqm QMName
停止队列管理器
endmqm –i QMName
常用MQSC脚本命令
查看队列管理器信息
DISPLAY QMGR
查看所有通道状态
DISPLAY CHSTATUS(*)
检查通道具体状态
DISPLAY CHSTATUS(ChannelName) ALL
检查通道配置
DISPLAY CHANNEL(ChannelName)
检查队列配置和深度
DIS QLOCAL(QName)
该命令的显示结果可以看出队列当前深度
启动通道
START CHANNEL(ChannelName)
停止通道
STOP CHANNEL(ChannelName)
解决通道中的可疑交易
RESOLVE CHANNEL(ChannelName) ACTION ( COMMIT | BACKOUT )
复位通道序号
RESET CHANNEL(ChannelName)
定义新对象
DEFINE
改变对象定义
ALTER
删除对象
DELETE |
|