2006年08月20日 01:56
(なんか、最近海外からっぽいアクセスが多いようなので英語で要約してみたりして。。)
Summary: On Windows, if you execute "onbar" from inside your batch file, remember that it is running as Windows Batch file. You should probably call onbar using "cmd /c onbar -b..." especially if you use it in a loop. It can avoid command line length overflow..
(日本語で以下だらだら書いてるけど、英語で要約するとたったこれだけかい...)
Unix でも Winodws でも、コマンドラインから "onbar" を実行した時に最初に呼び出されるのは、シェルスクリプト ( Winodws ではバッチファイル ) です。このスクリプトで引数の処理や必要な環境変数の設定などをして、onbar_d ( Windows では onbar_d.exe ) を呼び出しています。
さて、Unix ではシェル・スクリプトは呼び出し元のシェルとは別の、新しく呼び出されたシェルのプロセス上で実行されます。ところが、Windows のバッチファイルは、呼び出し元のシェル ( cmd.exe ) がバッチファイルのコマンドを実行しています。なので、バッチファイルの中で onbar を呼び出す時に、単純に
onbar -b -L 0
( "-L 0" の部分は、あくまでも一例、ということで )
call onbar -b -L 0
動作確認のために、SQLを実行し終了後随時データと論理ログをバックアップし、それを何千回か繰り返し、というテストをしていたのですが、なぜかその繰り返しを行うバッチファイルが何回目(数十回だったような)かでそれ以上動かなくなってしまいます。
こんなエラーが表示されます:
=== ここから
入力行が長すぎます。
:cont
の使い方が誤っています。
=== ここまで
調べたら、何と onbar の中で追加されていく環境変数の設定が貯まり貯まってコマンド長の制限を超えてしまっていたのが原因でした。環境変数をみると、実はこんなことになっているんですね~。
Path=c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20\bin;c:\ism\2.20.... ( 以下省略。)
cmd /c onbar -b -L 0