Oracle のエクスポートツール EXP.exe を起動させるプログラムを作成しているのですが、
最後の proc.waitFor();
のところでプログラムが止まってしまい、
いくら待ってもエクスポートダンプが出来上がりません。
原因、解決策をお持ちの方、回答をお願いします。
■環境
Oracle 9.2
Java 1.4.2.5
Windows 2000
■参照サイト
http://forums.oracle.com/forums/message.jspa?messageID=1179074
■ソース
String[] cmd = new String[8];
cmd[0] = "cmd.exe";
cmd[1] = "/C";
cmd[2] = "START";
cmd[3] = "/wait";
cmd[4] = "exp.exe";
cmd[5] = dbuser + "/" + password + "@" + dbstr;
cmd[6] = "tables=(table1,table2)";
cmd[7] = "file=" + filePath + stamp + dumpFileName;
proc = Runtime.getRuntime().exec(cmd);
proc.waitFor();
よろしくお願いします。
getOutputStream() を実行していましたのはどの段階ですか?
また、これはプロセスへの入力のはずですが getInputStream() じゃないですか?
以下は確証無く、思いつくままあげてみます。
・exec 時に env (環境変数) や dir (カレントディレクトリ) を指定する。
・exec の後、Thread.sleep() してみる。
・exec の後、proc.getOutputStream().close() してみる。
・exec の後、proc.getInputStream().close() してみる。
直接実行には問題ないようですので、あとはこれぐらいでしょうか。
実際に実行されるコマンドを同じユーザーでコマンドプロンプトから実行してみたらどうなりますか?
あと、exp.exe の log の指定もして見ましょう。何か表示されるかもしれません。
すばやい回答ありがとうございます。
コマンドプロンプトから実行すると、正常にエクスポートが完了します。
logはまだ試していませんが、proc.getOutputStream()から取得した情報では、
EXP ~~file=dumpFileName
と出力されたところで止まっているようです。
log オプションは画面表示される内容をファイルに書き出すだけだと思っているので試していませんでした。
logの指定も試してみます。
getOutputStream() を実行していましたのはどの段階ですか?
また、これはプロセスへの入力のはずですが getInputStream() じゃないですか?
以下は確証無く、思いつくままあげてみます。
・exec 時に env (環境変数) や dir (カレントディレクトリ) を指定する。
・exec の後、Thread.sleep() してみる。
・exec の後、proc.getOutputStream().close() してみる。
・exec の後、proc.getInputStream().close() してみる。
直接実行には問題ないようですので、あとはこれぐらいでしょうか。
ご指摘の通り getInputStream() の間違いです。
実行したのは
proc = Runtime.getRuntime().exec(cmd);
と
proc.waitFor();
の間です。
ちなみにproc.waitFor(); を呼び出さずに
プログラムを終了させると数百KBまでは正常なダンプファイルが作成されますが、
それを超えると5KBぐらい書き込んだ段階で止まってしまいます。
作成されたダンプファイルを除いてみると
...INTERUPTED みたいに書いてあって処理が中断してしまっているように読み取れました。
教えていただいた項目も試して見ます。
ご指摘の通り getInputStream() の間違いです。
実行したのは
proc = Runtime.getRuntime().exec(cmd);
と
proc.waitFor();
の間です。
ちなみにproc.waitFor(); を呼び出さずに
プログラムを終了させると数百KBまでは正常なダンプファイルが作成されますが、
それを超えると5KBぐらい書き込んだ段階で止まってしまいます。
作成されたダンプファイルを除いてみると
...INTERUPTED みたいに書いてあって処理が中断してしまっているように読み取れました。
教えていただいた項目も試して見ます。