【发布时间】:2013-06-18 19:31:14
【问题描述】:
我们有一个用 C 和 Pro*C 编写的应用程序,它使用主机阵列和批量插入将日志文件中的数据插入到 Oracle 11.2 数据库中。这使用APPEND 和NOLOGGING 提示来利用直接路径插入并减少生成的重做量。 NOLOGGING 对此很有意义,因为它是一个临时临时表,如果需要,可以从日志文件中恢复数据。
我们正在尝试在 Java 中复制此功能,但无法使用直接路径插入大量记录。 Java/JDBC 可以做到这一点吗?
我尝试和调查的事情是:
- JDBC 批处理(标准批处理和Oracle's extensions)。这种方法节省了往返时间,但这可以忽略不计,因为应用程序与数据库位于同一台机器上。它也不使用直接路径。
-
APPEND_VALUES提示。这听起来很有希望,但意义不大,因为 JDBC 批处理似乎并未实际执行许多记录的“数组”插入。
据我了解,直接路径插入仅支持the subquery syntax and not the VALUES clause。无法使用,因为要插入的数据在数据库中尚不存在。
我一直找不到任何关于 Java 能够使用 Pro*C 使用的主机数组样式加载的参考。
顺便说一句,我们正在研究外部表加载或 SQL*loader 并赞赏这些工具能够直接加载路径,但这个问题实际上是关于是否可以从 Java 中直接插入路径得到明确的答案。了解 Java API 的局限性不仅对本项目有用,对以后的项目也有用。
所以重申一下这个问题,有没有一种方法可以利用 Java 的直接路径插入?
相关问题:
【问题讨论】:
-
你找到通过jdbc直接插入的方法了吗?
-
不。看起来不可能。我们最终只使用传统的路径加载并对其进行并行化。我仍然希望有人会过来指出我错过的东西。
-
我看到 smb 能够测试它,但是在他的情况下它没有用:asanga-pradeep.blogspot.com/2014/10/…
-
@BurhanAli - 也许尝试使用 jdbc oci 驱动程序。它应该是基于 OCI C 的功能之上的 JNI 层。
-
如果你只能使用子查询语法而不是使用
INSERT INTO table_name ( value ) SELECT 'literal' FROM DUAL UNION ALL SELECT 'other' FROM DUAL?
标签: java jdbc oracle11g bulkinsert direct-path