从 Java 调用 SQL 加载程序 如果文件大小 > 40 MB,程序不是 运行
Invoke SQL Loader from Java Program is not running if file size > 40 MB
我们正在尝试通过 SQL 加载程序将一个巨大的文件(比如 ~1 GB 大小)加载到 Oracle 数据库中。我创建了一个 Java 程序,该程序将从程序中执行 SQLLoader 命令,加载程序会将文件加载到 table.
我的代码:
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 大小的文件。
感谢所有阅读我的问题并尝试给出答案的人。
我们正在尝试通过 SQL 加载程序将一个巨大的文件(比如 ~1 GB 大小)加载到 Oracle 数据库中。我创建了一个 Java 程序,该程序将从程序中执行 SQLLoader 命令,加载程序会将文件加载到 table.
我的代码:
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 大小的文件。
感谢所有阅读我的问题并尝试给出答案的人。