データベースにいくつのアプリケーションが接続されているかを知る必要があります。これを行うには、ストアドプロシージャを実行する必要があります。出力は次のとおりです。
CMD_EXEC: 1
IFCA_RET: 0
IFCA_RES: 0
XS_BYTES: 0
IFCA_GRES: 0
GXS_BYTES: 0
RETURN_CODE: 0
MSG: NULL
ROWNUM TEXT
1 DSNL200I -DSNC DISPLAY LOCATION REPORT FOLLOWS-
2 LOCATION PRDID T ATT CONNS
3 ::170.0.0.236 SQL09079 S 277
4 ::170.0.0.243 SQL10057 S 0
5 ::170.0.0.249 JCC04160 S 0
6 ::170.0.0.252 JCC03660 S 0
7 ::170.0.0.204 JCC04160 S 0
8 ::170.0.0.20 SQL10057 S 1
9 ::170.0.0.21 JCC03660 S 0
10 ::170.0.1.21 JCC04080 S 1440
11 ::170.0.1.231 JCC03660 S 1
12 ::170.0.7.2 JCC03640 S 0
13 ::170.0.8.241 JCC03640 S 0
14 ::170.0.8.142 JCC03690 S 0
15 ::192.168.7.2 SQL09079 S 0
16 ::192.168.1.4 JCC03650 S 5
17 ::192.168.1.5 JCC03650 S 6
18 ::192.168.1.0 JCC03690 S 0
19 ::192.168.4.0 JCC03610 S 7
20 ::192.168.4.0 JCC03610 S 2
21 ::192.168.4.0 JCC04080 S 504
22 ::192.168.1.7 SQL10055 S 1
23 DISPLAY LOCATION REPORT COMPLETE
"ADMIN_COMMAND_DB21" RETURN_STATUS: 0
この列にはCONNS
接続数が表示されます。その列で配列を作成し、最大値を見つける必要があります。たとえば、次のようになります。
#/bin/bash
#number of logs to offload
#number of ADBAT
#number of QUEDBAT
#number of DSCDBAT
#nmber of connections
DB2PATH=/home/db2inst1/sqllib/bin/db2
$DB2PATH connect to mydb >> /dev/null
conn_arr=$($DB2PATH "CALL SYSPROC.ADMIN_COMMAND_DB21 ('-dis
location',17,LOC,NULL,?,?,?,?,?,?,?,?)" )
echo "$conn_arr" | ????
$DB2PATH connect reset >> /dev/null
このスクリプトが実行されるたびに、結果と行番号が変更されます。何を使うべきですか?
答え1
最大接続数を取得し、その数を変数に保存するには、mx
次のようにします。
$ mx=$(awk '/COMPLETE/{exit} f{if($5+0>x)x=$5} /CONNS/{f=1} END{print x}' <<<"$conn_arr")
$ echo $mx
1440
どのように動作しますか?
デフォルトでは、awkは一度に1行ずつファイルを読み込みます。
/COMPLETE/{exit}
現在の行がregexと一致する場合は、追加の行の
COMPLETE
読み取りを停止し、END
コマンドグループで終了します。f{if($5+0>x)x=$5}
変数
f
がtrue(0ではない)の場合、列5の数値が変数より大きい場合、列5の値にx
設定されます。x
/CONNS/{f=1}
現在の行に文字列(正規表現)が含まれている場合、
CONNS
変数はf
1に設定されます。これはテーブルの開始を示します。END{print x}
すべての行を読み取ったら、値を印刷します
x
。<<<"$conn_arr"
bash変数から入力を読み取るようにawkに指示します
conn_arr
。この構造はここにある文字列。