命令语句 "sqlldr user/pwd@sid control=a.ctl log=log.txt bad = bad.txt"
在windows的CMD命令行和UNIX里面直接调用没有任何问题。速度很快,可以上传成功。
但是我用java的Runtime.getRuntime().exec("sqlldr user/pwd@sid control=a.ctl log=log.txt bad = bad.txt"); 来调用sqlldr, 如果数据量小,没有任何问题,可以上传数据成功,但是数据大于2M的时候就会上传到一半突然停下来。LOG文件一直是空的,数据库也能看到上传了一部分数据,但是并没有上传成功。
感觉上是JAVA的Runtime.getRuntime().exec();被打断了。但是又没有什么办法测试。在windows里面用JAVA调也没问题,只有在UNIX里面出问题。。请教各位吧。有没有遇到过这种问题的帮忙一下。
[b]问题补充:[/b]
那能不能说一下具体的解决方案呢?
我的平台是IBM AIX 400, jdk1.6,oracle 10g
你可以看看这里:http://www.iteye.com/topic/179002
这个是因为Runtime.getRuntime().exec()要自己去处理stdout和stderr的。
所以如果你想让程序正常运行的话,请务必将上述用别的线程流取走。
java文档上说,由于有些本地平台为标准输入和输出流所提供的缓冲区大小有限,如果不能及时写入子进程的输入流或者读取子进程的输出流,可能导致子进程阻塞,甚至陷入死锁