あるデータベース区画サーバーで次々と順番にコマンドを実行することもできますし、 複数のコマンドを並列に実行することもできます。 UNIX ベースのプラットフォームでは、コマンドを並列に実行するときは、 出力をバッファーに送信して、表示用に収集する (省略時の処置) よう選択するか、 またはコマンドが出されるマシンに出力を表示することができます。 Windows NT では、コマンドを並列に実行すると、 そのコマンドが出されるマシンに出力が表示されます。
rah コマンドを使用するには、次のように入力してください。
rah command
db2_all コマンドを使用するには、 次のように入力してください。
db2_all command
rah 構文に関するヘルプを表示するには、 次のように入力してください。
rah "?"
コマンドは、対話式プロンプトで入力できるものであればほとんど何でもかまいません。 たとえば、順に実行される複数のコマンドも可能です。 UNIX ベースのプラットフォームでは、 複数のコマンドは、セミコロン (;) を用いて分離します。 Windows NT では、複数のコマンドは、& 記号 (&) を用いて分離します。 最後のコマンドの後には、区切り記号を使用しないでください。
以下の例は、db2_all コマンドを使用して、 ノード構成ファイルで指定したすべてのデータベース区画サーバーでデータベース構成を変更する方法を示したものです。 ; 文字が二重引用符の内側にあるので、要求は同時に実行されます。
db2_all ";UPDATE DB CFG FOR sample USING LOGFILSIZ=100"
Windows NT では、すべてのデータベース区画サーバーで実行されているすべてのプロセスが、 呼び出しトレースバックをインスタンス・ディレクトリー内の Pxxxx.nnn ファイルに書き出すようにします (Pxxxx はプロセス ID、nnn はノード番号)。
UNIX ベースのプラットフォームでは、これらのコマンドは、 次のような特定の暗黙的な設定で rah を実行します。
Windows NT では、これらのコマンドは rah を実行して、 すべてのマシンで並列に実行します。
次のようにコマンドを指定することができます。
コマンドに次のような特殊文字が入っている場合は、 プロンプト方式を使用する必要があります。
| & ; < > ( ) { } [ ] unsubstituted $
コマンド行でパラメーターとしてコマンドを指定するときに、 上にリストしたような特殊文字のいずれかが含まれている場合は、 二重引用符で囲む必要があります。
注: | UNIX ベースのプラットフォームでは、コマンドは、 ユーザーがプロンプトで入力したのと同じように、ユーザーのコマンド履歴に追加されます。 |
コマンドの中の特殊文字はすべて、正常に入力することができます (\ 以外は引用符で囲まずに)。 コマンドに \ を入れる必要があるときは、円記号を 2 つ (\\) 入力しなければなりません。
注: | UNIX ベースのプラットフォームでは、Korn シェルを使用していない場合は、 コマンドの中の特殊文字はすべて正常に入力することができます ("、\、 置換不能文字 $、および単一引用符 (') 以外は、引用符に入れずに)。 コマンドにこれらの文字のいずれかを入れる必要があるときは、 円記号を 3 つ (\\\) 前に置かなければなりません。 たとえば、コマンドに \ を入れる必要があるときは、 逆斜線を 4 つ (\\\\) 入力しなければなりません。 |
コマンドに 2 重引用符 (") を入れる必要があるときは、円記号を 3 つ前に付けて、 たとえば、\\\" のように入力しなければなりません。
注:
注: | この節の情報は UNIX ベースのプラットフォームだけに適用されます。 |
省略時解釈により、 バッファー・ファイルの名前は /tmp/$USER/rahout ですが、 環境変数 $RAHBUFDIR/$RAHBUFNAME によって名前を指定することができます。
複数のコマンドを同時に実行したいことを指定するときは (省略時解釈によって)、 このスクリプトは、すべてのホストに送信されるコマンドに追加のコマンドを接頭部として付加して、 $RAHBUFDIR と $RAHBUFNAME をバッファー・ファイルで使用できるかどうかチェックすることができます。 これは、$RAHBUFDIR を作成します。 これを抑止するときは、環境変数 RAHCHECKBUF=no をエクスポートします。 ディレクトリーが存在していて、使用可能であることがわかっている場合は、 このようにすると時間を節約することができます。
rah を使用して複数のマシンでコマンドを同時に実行する前に、 以下のことを確認してください。
rah ")mkdir /tmp/$USER"
export RAHCHECKBUF=no
注: | この節の情報は UNIX ベースのプラットフォームだけに適用されます。 |
環境変数 RAHWAITTIME によって制御されるインターバルで、 通知メッセージが書き出されます。 この指定方法の詳細については、ヘルプ情報を参照してください。 通知メッセージはすべて、 RAHWAITTIME=0 をエクスポートすることによって完全に抑止することができます。
1 次モニター・プロセスは、 rahwait>or という名前のコマンド (ps コマンドで示される) です。 最初の通知メッセージで、このプロセスの pid (プロセス ID) が示されます。 その他のすべてのモニター・プロセスは、 rah スクリプト (またはシンボリック・リンクの名前) を実行する ksh コマンドとして表示されます。 必要であれば、次のコマンドによって、すべてのモニター・プロセスを停止することができます。
kill <pid>
ここで、<pid> は、1 次モニター・プロセスのプロセス ID です。 シグナル番号を指定してはなりません。 省略時値である 15 のままにしてください。 これは、リモート・コマンドにはまったく影響しませんが、 バッファー出力の自動的な表示をしないようにします。 rah の 1 回の実行が生きている間に、 2 つ以上の異なるモニター・プロセスのセットが、 異なる時点で実行される可能性があることに注意してください。 しかし、どの時点でも現行のセットを停止すると、その後ではもう開始されません。
レギュラーのログイン・シェルが Korn シェルでない場合 (たとえば、 /bin/ksh) は、 rah を使用することができますが、 次のような特殊文字が含まれるコマンドを入力する方法に関する規則に、 いくらか相違があります。
" unsubstituted $ '
さらに詳しいことは、rah "?" を入力してください。 また、UNIX ベースの環境では、 リモート・コマンドを実行する ID にあるログイン・シェルが Korn シェルでないときは、 rah を実行する ID にあるログイン・シェルも Korn シェルであってはなりません。 (rah は、リモート ID のシェルが、 ローカル ID にもとづく Korn シェルであるかどうかに関する判別を行います。) シェルは、単一引用符で囲まれたストリングについて、置換または特別な処理を行ってはなりません。 現状のままにしておいてください。
パフォーマンスを向上させるために、 rah は大規模なシステムで tree_logic を使うように拡張されています。 つまり、rah はリストに含まれるノード数を検査し、その数がしきい値を超過するのであれば、 リストのサブセットを作成して、それ自体の再帰的呼び出しをそれぞれのノードに送信します。 それぞれのノードでは、再帰的に呼び出された rah は前述の同じ論理に従います。 これは、リストが十分に小さくなり、 「リスト上のすべてのノードにコマンドを送信する」という標準的な論理 (ここでは "ツリーのリーフ" という論理) に従えるようになるまで続きます。 このときのしきい値は、環境変数 RAHTREETHRESH で指定できます。 これを指定しないと、省略時値の 15 になります。
物理ノードに対して複数の論理ノードが存在するシステムの場合は、 db2_all は再帰的な呼び出しをそれぞれの物理ノードに送信してから、 その同じ物理ノード上の他の論理ノードに rsh するので、 物理ノード間の通信量も少なくなります。 (この点は、db2_all だけに当てはまるもので rah には当てはまりません。 rah は常にそれぞれの物理ノードだけに送信します。)
このバージョンの rah の構文およびセマンティクスは、古いバージョンの rah (このプロダクトでは rah.sh_old として提供されている) のものとほとんど同じです。 ただし、どのオプションを使うかについての細かい制限については、 以下のように異なる点もいくつかあります。
注: | () および ## の置換の動作は、古い rah/db2_all と同じはずです。 |
export RAHTREETHRESH=nn (nn は任意の正の整数)
これを指定しないと、省略時値の 15 になります。