我定时导出oracle数据库到dmp文件(用java实现),每次运行程序当第二次导出数据库时就卡死

我是完全导出数据库,
Runtime rt = Runtime.getRuntime();
File file = new File(filePath);
file.createNewFile();
String exp = "exp " + databasename + "/" + databasepw + "@" + netname + " file=" + filepath;
System.out.println(exp);
rt.exec(exp)

File file = new File(filePath); file.createNewFile(); ---这两句可以省略
命令前面加上 cmd /c start
例如 String exp ="cmd /c start exp username/password@netname file=xxxxx.dbf" ;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-01
不要在java中createNewFile,exp 命令指定文件名就可以了,文件名相同则覆盖。
原因:java里createNewFile后,该文件被java线程占用,导致exp命令无法覆盖dmp文件 ,所以会卡在那里追问

之前如果不是完全导出数据库的话,一切正常,每次定时执行的过程都是先删除磁盘上的dmp文件,再创建,再写入,但是后来改成完全导出后就不好用了

追答

1 检查文件是否真的被删了,如果有线程正在使用,文件是删不掉滴
2 定时时间间隔太短,第一次还没有完成就进入下一次了?
3 可以每次用不同的文件名导出,加上时间戳,这样数据也可以恢复到任意备份点

本回答被网友采纳
第2个回答  2012-11-01
不确认 你是导出完毕了吗?追问

恩肯定是导出完毕的,这个我已经验证了,但是不知道为什么第二次执行时,重新创建dmp文件也执行了,开始可以看到文件有内容写入,但是只写入2kb文件的大小就不在变化,之后定时功能也不好用了,估计是程序死在rt.exec(exp)里了,只是不知道怎么解决

相似回答