从 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");
}

对各位专家的提问和疑问:

  1. 当文件大小为 ~ 40 MB 时,我们可以通过我的 Java 程序加载数据。

  2. 当文件大小 > 42 MB 时,Java 程序成功运行但数据未随文件一起加载。 Java 控制台中没有显示错误或异常。就好像我 运行 来自命令提示符的相同命令,它正在加载相同的控制文件和数据文件。

谁能帮帮我?如果我遗漏了什么或者除了我的方法之外从 Java 程序调用 sqlloader 的最佳方法是什么。

我得到了答案。我没有对上面提到的 Java 代码进行任何更改。我只在我的控制文件中添加了 DIRECT=TRUE 。有用。现在我可以加载直到 1 GB 大小的文件。

感谢所有阅读我的问题并尝试给出答案的人。