java - 如果文件大小 > 40 MB,则不会从 Java 程序调用 SQL Loader

标签 java oracle11g architecture sql-loader

我们正在尝试通过 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");
}

向各位专家提问和询问:

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

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

有人可以帮我吗?如果我遗漏了某些内容,或者除了我的方法之外,从 Java 程序调用 sqlloader 的最佳方法是什么。

最佳答案

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

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

关于java - 如果文件大小 > 40 MB,则不会从 Java 程序调用 SQL Loader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52767016/

相关文章:

java - 如何在java中将依赖项添加到jar文件中

web-services - 为什么在 "ENTERPRISE"应用程序中使用 SOAP over JSON 和自定义数据格式?

asp.net-mvc - 这应该使用多个还是单个 MVC 包来完成?

java - 如何在 Windows 上使用 JNA 从 Java 操作内存

java - AOP重定向调用

java - Flink co group outer join 因高背压而失败

甲骨文 - ORA-06502 : PL/SQL: numeric or value error (DBMS_OUTPUT)

java - 无法通过精简连接 Oracle 11g

sql - 删除 11g 后留下 1000 条记录?

iOS客户端服务器方法