人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

現在、Java からコマンドプロンプト経由で
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();


よろしくお願いします。

●質問者: ひつじおとこ
●カテゴリ:コンピュータ
✍キーワード:exe Java Oracle password String
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

実際に実行されるコマンドを同じユーザーでコマンドプロンプトから実行してみたらどうなりますか?

あと、exp.exe の log の指定もして見ましょう。何か表示されるかもしれません。

◎質問者からの返答

すばやい回答ありがとうございます。

コマンドプロンプトから実行すると、正常にエクスポートが完了します。

logはまだ試していませんが、proc.getOutputStream()から取得した情報では、

EXP ??file=dumpFileName

と出力されたところで止まっているようです。

log オプションは画面表示される内容をファイルに書き出すだけだと思っているので試していませんでした。

logの指定も試してみます。


2 ● b-wind
●35ポイント ベストアンサー

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 みたいに書いてあって処理が中断してしまっているように読み取れました。

教えていただいた項目も試して見ます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ