从 java 使用 sqlldr

发布于 2024-11-08 18:01:58 字数 535 浏览 0 评论 0原文

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

为什么 Oracle 必须如此复杂?这在 mysql 中是微不足道的...

I have a Java utility for database imports. I'd like to be able to use sqlldr for performance on oracle. I could create the control and data files, but that doesn't seem like The Right Thing™ to do. I should be able to stream the data by providing INFILE "-" in the control file (q1 - how? from command line, I can pipe "echo <data...>" to the sqlldr, but there must be a way to just stream the string into the input stream for the process? never used Java for this before). I can't see how to stream the control file itself (q2 - or am I missing something obvious?). I could use named pipes, but I have no idea how to instantiate and use them from Java in windows (q3 - would that work and how?).

<moan>why must oracle be so complicated? it was trivial in mysql...<moan>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情绪 2024-11-15 18:01:58

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

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

这就是为什么您应该停止尝试将 SQL Loader 放入新奇的 Java 应用程序中:-) 请查看外部表,因为我们可以对它们使用 SQL SELECT,因此使用它们来自动化加载过程会更容易。再多一点关于我对另一个问题的回答中的外部表。 -this-record-i/3663254#3663254">检查一下。

"why must oracle be so complicated? it
was trivial in mysql"

What you must remember is, Oracle is a venerable product. SQL Loader as a utility must be twenty years old, maybe more. So naturally it is harder to work with than some newer tools.

And that is why you should stop trying to fit SQL Loader into your new-fangled Java app :-) Look at external tables instead. Because these are database objects we can use SQL SELECTs against them, so it's a whole easier to automate load processes with them. I wrote a bit more about external tables in my answer to another question. Check it out.

各自安好 2024-11-15 18:01:58

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

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

根据您的版本,另请查看外部表的预处理器功能

Fundamentally SQLLDR is about getting data from one or more files into a database table. It is powerful in that role, especially when dealing with multiple files or parallel loads from a single file (it can have multiple threads/processes reading from the same file at the same time).

Not all of these fit well with reading from something that isn't a real file. If your data stream is coming from a web service, then I'd pull it using UTL_HTTP. If it is coming from FTP, then I'd FTP straight into the database as a CLOB/BLOB and process it from there.

Depending on your version, also look at the preprocessor capabilities of external tables

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文