【问题标题】:using sqlldr from java使用来自 java 的 sqlldr
【发布时间】:2011-05-19 11:13:35
【问题描述】:

我有一个用于数据库导入的 Java 实用程序。我希望能够在 oracle 上使用 sqlldr 来提高性能。我可以创建 controldata 文件,但这似乎不是 The Right Thing™ 要做的事情。我应该能够通过在控制文件中提供INFILE "-" 来流式传输数据(q1 - 如何?从命令行,我可以通过管道将“echo <data...>”传送到 sqlldr,但必须有一个将字符串流式传输到进程的输入流的方法?以前从未使用过Java)。我看不到如何流式传输控制文件本身(q2 - 还是我遗漏了一些明显的东西?)。我可以使用命名管道,但我不知道如何在 Windows 中从 Java 实例化和使用它们(q3 - 那会起作用吗?如何?)。

<moan>为什么oracle一定要这么复杂?这在 mysql 中是微不足道的...<moan>

【问题讨论】:

    标签: java oracle named-pipes sql-loader


    【解决方案1】:

    “为什么 oracle 一定要这么复杂? 在 mysql 中是微不足道的”

    您必须记住的是,Oracle 是一个古老的产品。 SQL Loader 作为一个实用程序必须有二十年的历史,也许更久。所以自然比一些较新的工具更难使用。

    这就是为什么您应该停止尝试将 SQL Loader 安装到您新奇的 Java 应用程序中的原因 :-) 改为查看外部表。因为这些是数据库对象,我们可以对它们使用 SQL SELECT,因此使用它们自动化加载过程会更容易。我在回答另一个问题时写了更多关于外部表的内容。 Check it out.

    【讨论】:

      【解决方案2】:

      从根本上说,SQLLDR 是关于从一个或多个文件中获取数据到数据库表中。它在这个角色上非常强大,尤其是在处理多个文件或从单个文件并行加载时(它可以有多个线程/进程同时从同一个文件中读取)。

      并非所有这些都适合从非真实文件中读取。如果您的数据流来自 Web 服务,那么我会使用 UTL_HTTP 提取它。如果它来自 FTP,那么我会以 CLOB/BLOB 的形式直接 FTP 到数据库中并从那里处理它。

      根据您的版本,还要查看外部表的preprocessor 功能

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多