java調(diào)用Oracle EXP備忘
一眼看過去相信大家都知道用Runtime.getRuntime().exec來調(diào)用,我的需求就是:
調(diào)用Oracle EXP命令完成備份,并返回生成的備份文件名,這個備份文件會很快在其他的地方被使用。
采用Runtime.getRuntime().exec我們都知道,需要處理它的InputStream,以避免出現(xiàn)執(zhí)行的命令輸出的信息過多使得進程被堵死,OK,按照這樣的方法,開寫:





??? Process?process = Runtime.getRuntime().exec(cmds);










?????????????????? }






竟然碰到這樣的問題,徹底暈,開始google,竟然只查到一篇和我這同樣的問題,更郁悶的是那個帖子最后樓主寫了一句“問題解決了”,但沒寫是怎么解決的,郁悶S。
只好自己開始嘗試各種辦法,上網(wǎng)抓人到處問,最后在自己不斷的嘗試下終于是出現(xiàn)了轉機,在我的N+1次嘗試的時候我改為只讀取process的ErrorStream,然后執(zhí)行,暈,OK了,在導出成功的情況下沒有問題,但在導出有錯誤的時候(像sid不對,用戶名錯誤,數(shù)據(jù)庫沒啟動等)進程還是被掛S,但只要導出成功沒問題,導出有錯誤的問題是很好處理的,OK,最后試驗的代碼改為這樣:































這樣反而可以了,說明什么呢,說明在執(zhí)行oracle的exp時,出現(xiàn)了一個很怪的現(xiàn)象,就是exp在console輸出的信息沒有被放入InputStream,反而是放到了ErrorStream中(即使正確的情況也是),這就導致了按照正常的情況去寫這段代碼的話反而會出問題。
擔心以后再次碰到這樣的問題,備忘一下....
posted on 2006-11-22 22:43 BlueDavy 閱讀(7750) 評論(8) 編輯 收藏 所屬分類: Java