1

目前我使用 PCF 命令删除 QMANAGER 上的队列

PCFMessage message = new PCFMessage( CMQCFC.MQCMD_DELETE_Q );
message.addParameter( CMQC.MQCA_Q_NAME, name);
agent.send( message );

如果队列被占用,我可以强制删除吗?


我在 QL 上尝试过但没有成功

@Override
protected PCFMessage getRequestRemove(String objetName,
        String qmanagerName,boolean forceQmanager) {
    PCFMessage request = new PCFMessage(CMQCFC.MQCMD_DELETE_Q);
        request.addParameter( CMQCFC.MQIACF_PURGE, CMQCFC.MQPO_YES );     
    
    request.addParameter(CMQC.MQCA_Q_NAME, objetName);
    request.addParameter(CMQC.MQIA_Q_TYPE, CMQC.MQQT_LOCAL);
    return request;
}

错误代码由以下原因引起:com.ibm.mq.pcf.PCFException:MQJE001:代码 achèvement '2',Motif '3014'。我的 PCF 库是 7.1.0.4

问候

4

2 回答 2

3

DELETE queue 命令上没有 FORCE 选项。如果队列当前由应用程序打开以进行输入,并且它们正在 MQGET 中等待,您可以使用以下命令将它们踢出。

MQSC

ALTER QLOCAL(q-name) GET(DISABLED)

聚碳酸酯

PCFMessage message = new PCFMessage (CMQCFC.MQCMD_CHANGE_Q);
message.addParameter(CMQC.MQCA_Q_NAME, name);
message.addParameter(CMQC.MQIA_INHIBIT_GET, CMQC.MQQA_GET_INHIBITED);
agent.send(message);

但是,如果队列当前打开并且应用程序当前不在 MQGET 或 MQPUT 中,那么您不能以这种方式将它们踢出,那么您唯一的选择是使用 找到有问题的应用程序DISPLAY CONN,然后发出 aSTOP CONN来获取他们释放队列。

队列最可能占用的是长 MQGET-waiter,因此上面的示例命令对大多数情况都有帮助。

于 2018-09-17T23:16:38.397 回答
0

莫拉格的回答解决了断开当前打开队列的进程的可能方法,如果您还想在队列中有消息时删除队列,则需要让 MQ 清除消息:

PCFMessage message = new PCFMessage( CMQCFC.MQCMD_DELETE_Q );
message.addParameter( CMQC.MQCA_Q_NAME, name);
message.addParameter( CMQCFC.MQIACF_PURGE, CMQCFC.MQPO_YES );
agent.send( message );
于 2018-09-18T18:07:15.640 回答