日期:2014-05-18  浏览次数:20792 次

求助--关于java调用sqlloader,数据丢失的问题
命令语句 "sqlldr user/pwd@sid control=a.ctl log=log.txt bad = bad.txt"

环境 windows和unix/linux

在windows下直接试用cmd命令和unix/linux下直接输入命令都是没有问题,数据完整。

通过java代码调用, Runtime.getRuntime().exec("sqlldr user/pwd@sid control=a.ctl log=log.txt bad = bad.txt");

windows下也没有问题,但是在unix/linux下会出现数据丢失现象。而且丢失比较有规律,如插入的数据文件超过1W行时时候很容易发生只插入了10560行,但是数据文件是没有错的,如果数据文件格式有错,那在windows下应该会发生同样的问题。网上查了一下,有用Process来调用的执行,我想这个应该跟直接调用runtime应该也没什么关系。而且问题是,当数据丢失后,log.txt文件始终是空的,bad.txt也不会生成。
不知道这个是不是跟我建的表结构、存储大小有关系,但是头痛的是,windows下一点状况都没有,unix/linux下的表也是直接拷贝windows下的表的。

不知道有没有哪位朋友也碰到过类似问题,或者估计一下可能会出问题的地方的,先谢了。

------解决方案--------------------
如果跟内存有关,应该直接执行shell脚本的时候,也会出现同样的错误啊