我们正在尝试通过 SQL Loader 将一个大文件(例如大约 1 GB 大小)加载到 Oracle 数据库中。我创建了一个 Java 程序,它将从程序中执行 SQLLoader 命令,加载程序会将文件加载到表中。
我的代码:
public void invokeSQLLoader(){
String stringCommand="/usr/lib/oracle/18.3/client64/bin/sqlldr <userId>/<password>@<dburl> control=/u01/hmpoc/HM_EDW_PASSBACK.ctl data=/u01/hmpoc/Passback_Report.csv bad=/u01/hmpoc/PASSBACK.bad discard=/u01/hmpoc/PASSBACK.dsc log=/u01/hmpoc/PASSBACK.log ERRORS=1000000";
System.out.println("Passing Command::"+stringCommand);
Process proc = null;
try {
System.out.println("Starting procedure call---"+new java.util.Date());
Runtime rt = Runtime.getRuntime();
proc = rt.exec(stringCommand.trim());
System.out.println("End Procedure call---"+new java.util.Date());
}catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}/*finally {
proc.destroy();
}*/
System.out.println("SQLLDR Ended");
}
向各位专家提问和询问:
当文件大小约为 40 MB 时,我们可以通过 Java 程序加载数据。
当文件大小 > 42 MB 时,Java 程序成功运行,但数据未随文件一起加载。 Java 控制台中未显示任何错误或异常。就好像我从命令提示符运行相同的命令,使用相同的控制文件和数据文件来加载它。
有人可以帮我吗?如果我遗漏了某些内容,或者除了我的方法之外,从 Java 程序调用 sqlloader 的最佳方法是什么。
最佳答案
我得到了答案。我没有对上述 Java 代码进行任何更改。我只在控制文件中添加了DIRECT=TRUE。有用。现在我可以加载 1 GB 大小的文件。
感谢所有阅读我的问题并尝试给出答案的人。
关于java - 如果文件大小 > 40 MB,则不会从 Java 程序调用 SQL Loader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767016/