gpt4 book ai didi

ibm-mq - 如何使用 Linux 从 IBM MQ 队列管理器中的集群中删除所有队列?

转载 作者:行者123 更新时间:2023-12-02 01:17:29 25 4
gpt4 key购买 nike

我已经使用下面的命令删除了队列管理器中集群中的所有队列

echo "ALTER QLOCAL(*) CLUSTER('') CLUSNL('')"| runmqsc ${qmgr}.

我得到的错误是1 : ALTER QLOCAL(*) CLUSTER('') CLUSNL('')
AMQ8147:未找到 WebSphere MQ 对象 *。
一个 MQSC 命令读取。
没有命令有语法错误。
无法处理一个有效的 MQSC 命令。

我的需要是删除队列管理器中集群中的所有队列。提前致谢

最佳答案

更改 MQ 对象时不能使用通配符 (*)。相反,您必须指定要更改的确切对象,并且该对象必须存在。这就是您的命令失败的原因(因为它正在寻找一个名为 * 的对象,该对象不存在。

如果您想更改多个对象,您必须使用支持此功能的第三方工具,或者您必须以编程方式进行。如果您选择以编程方式执行此操作,您的程序必须执行以下操作

  1. 向您的队列管理器查询您要更改的对象。这可以使用 echo "DISPLAY QLOCAL(*) CLUSTER(<cluster name>)" | runmqsc -e <QMNAME> 来完成

上面的命令应该只显示指定集群中的队列,-e 选项意味着你不会看到 1 : DISPLAY QLOCAL(*) CLUSTER(<cluster name>)在输出中。但是,如果该命令返回任何对象,您将获得类似的输出并且您将获得返回代码 0:

5724-H72 (C) Copyright IBM Corp. 1994, 2016.
Starting MQSC for queue manager ROB.


AMQ8409: Display Queue details.
QUEUE(LOCAL) TYPE(QLOCAL)
CLUSTER(<cluster name>)
AMQ8409: Display Queue details.
QUEUE(QL) TYPE(QLOCAL)
CLUSTER(<cluster name>)

如果该命令找不到任何队列,您将看到以下错误,并且返回代码为 0:

5724-H72 (C) Copyright IBM Corp. 1994, 2015.
Starting MQSC for queue manager QMROB.


AMQ8147: WebSphere MQ object * not found.
One MQSC command read.
No commands have a syntax error.
One valid MQSC command could not be processed.

因此,在您可以将队列名称通过管道返回到 runmqsc 之前你必须得到原始队列名称

  1. 修剪输出以删除除 Q 名称之外的所有内容。这可以通过多种方式完成,但我个人会使用 grep 和 sed 。首先,我们只想要具有 QUEUE 的行在它们上面,所以我们使用 grep 删除 QUEUE 之后除了圆括号(及其内容)之外的所有内容。然后我们使用 sed 删除圆括号。你最终得到这样的结果:

    grep -o -P "(?<=QUEUE)(.+?)"| sed -e 's/[(|)]//g

如果我们将它添加到我们之前的命令中,我们会得到:

echo "DISPLAY QLOCAL(*) CLUSTER(<cluster name>)" | runmqsc -e <QMNAME> | grep -o -P "(?<=QUEUE)\(.+?\)" | sed -e 's/[(|)]//g

这给了我们输出:

LOCAL
QL
  1. 最后我们想把它推回 runmqsc要根据需要更改所有队列,我们​​可以使用 xargs 来完成。我们想通过 xargs 将其推送两次,因为第一个将确保每个队列名称作为一个单独的命令通过,并由第二个命令执行:

    xargs -n 1 | xargs -I {} echo "ALTER QUEUE({}) CLUSTER('') CLUSNL('')" | runmqsc <QM Name>

把所有的东西放在一起应该会让你得到这样的东西:

echo "DISPLAY QLOCAL(*) CLUSTER(<cluster name>)" | runmqsc -e <QMNAME> | grep -o -P "(?<=QUEUE)\(.+?\)" | sed -e 's/[(|)]//g | xargs -n 1 | xargs -I {} echo "ALTER QUEUE({}) CLUSTER('') CLUSNL('')" | runmqsc <QM Name>

当然,上面只是一个如何在一行中完成的示例,但是通过 shell 脚本来完成会更好,您可以在每个步骤之间添加检查以确保您没有即将对您的队列执行您不想执行的操作。

在测试时你也可以使用 -vrunmqsc 上标记因为这将在不执行操作的情况下验证命令 - 因此您可以看到输出并且 runmqsc 会告诉您是否有任何问题,而不是立即执行。

关于ibm-mq - 如何使用 Linux 从 IBM MQ 队列管理器中的集群中删除所有队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41998994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com