我需要在队列管理器中识别群集队列。我需要输出作为队列名称和clustername。
将队列添加到群集中哪些队列不在群集中 从群集中删除队列中的队列
答案 0 :(得分:2)
要显示在本地队列管理器上设置了CLUSTER
或CLUSNL
属性的所有队列,您可以使用WHERE
参数搜索CLUSTER
或CLUSNL
的队列NE
属性''
(非等于)printf "DISPLAY Q(*) WHERE(CLUSTER NE '')\nDISPLAY Q(*) WHERE(CLUSNL NE '')" | runmqsc <qmgr> | grep "QUEUE(" | awk -F'[()]' '{print $2}'
(空白)。
printf "DISPLAY Q(*) WHERE(CLUSTER NE '')\nDISPLAY Q(*) WHERE(CLUSNL NE '')" | runmqsc <qmgr> | grep -o '^\w\+:\|\w\+[(][^)]\+[)]' | awk -F '[()]' -v OFS="," 'function printValues() { if ("QUEUE" in p) { print p["QUEUE"], p["CLUSTER"], p["CLUSNL"] } } /^\w+:/ { printValues(); delete p; next } { p[$1] = $2 } END { printValues() }'
下面的变化将打印带有“QUEUE,CLUSTER,CLUSNL”的CSV输出。 printValues语法来自@ mike.dld,回答这篇文章“Print part of an array or a file and sort in shell”
CLUSTER
要显示本地队列管理器上没有设置CLUSNL
和WHERE
属性的所有队列,您可以使用CLUSTER
参数搜索{{1}的队列}和CLUSNL
属性EQ
(EQUAL)到''
(空白)。 sort,uniq和awk帮助仅显示两者都是空白的那些。
printf "DISPLAY Q(*) WHERE(CLUSTER EQ '')\nDISPLAY Q(*) WHERE(CLUSNL EQ '')" | runmqsc <qmgr> | grep "QUEUE(" | awk -F'[()]' '{print $2}' | sort | uniq -c | awk '{ if ($1 ~ /2/) {print $2}}'
要向群集添加队列,您需要ALTER
将CLUSTER
属性设置为有效群集的名称。您还可以使用CLUSNL
属性指定NAMELIST
,NAMELIST
必须包含至少一个群集名称,但可以包含多个群集名称,以允许队列位于多个群集中。
echo "ALTER QL(TEST.Q) CLUSTER(RAJCLUS)" | runmqsc <qmgr>
要从群集中删除队列,您需要删除CLUSTER
和CLUSNL
属性。
echo "ALTER QL(TEST.Q) CLUSTER('') CLUSNL('')" | runmqsc <qmgr>