各位高手,大侠帮小弟看看这段代码吧!麻烦了,很棘手啊!
这段程序已经能够让oracle正确执行备份了.
但是为了让java程序能够检测备份是否成功,我做了读去进程错误信息的操作:
br.readLine()
这个时候就出问题了,不能读出任何信息,程序也不会往下执行了,
并且没有任何错误提示.
代码如下:
==============================
String command = "cmd /k start exp " + user + "/" + pass + " FILE=" + filename +" full = y";
java.lang.Runtime rt = java.lang.Runtime.getRuntime();
java.lang.Process p = rt.exec(command);
try {
BufferedReader br = new BufferedReader( new InputStreamReader(p.getInputStream()));
String str;
while ((str = br.readLine()) != null) { 
//执行到这里就会死掉,并且什么错误提示都没有啊。
System.out.println(str);
}
p.waitFor();
} catch (InterruptedException ex1) {
System.out.println(ex1.getMessage());
}
===================================
我做过实验,
把command换成ping www.sina.con.cn
就能够顺利执行并成功读出信息.请问这是怎么回事啊?
有没有能够监控oracle备份的其他办法?
急死我啦!各位高手帮帮忙啊,感激不尽!!!

解决方案 »

  1.   

    EXP有个LOG参数  他是把备份日志信息写到文件里面的可以用这个
      

  2.   

    批处理里就能实现,EXP命令会有返回值,如果是0就是成功,否则失败。
      

  3.   

    有LOG参数就好办了。我去试试。
    非常的感谢啊!
      

  4.   

    哦,非常感谢,批处理也是个很好的方法。
    可是要怎么样从java程序里,读出EXP命令的返回值???
    用Process.getInputStream()吗??
    这个:
    exp.batexp user/pass@zj file=d:\oradmp\ssgaexp.dmp owner=(CZRK,CZRK_USER) buffer=409600 compress=n log=d:\orasjbf\log\ssgaexp_czrk.log
    sqlplus system/ss @d:\orasjbf\drop_user_czrk.txtimp.bat
    imp.exe user/pass fromuser=(CZRK,CZRK_USER) touser=(CZRK,CZRK_USER) file=d:\oradmp\ss.dmp buffer=409600 commit=y log=d:\orasjbf\log\ssgaimp_czrk.log ignore=y
    sqlplus system/ssg@d:\orasjbf\user_grant_czrk.txt