关于如何从 oracle10g 中提取 600 万条记录有啥建议吗?

Posted

技术标签:

【中文标题】关于如何从 oracle10g 中提取 600 万条记录有啥建议吗?【英文标题】:Any suggestions on how to extract 6 million records from an oracle10g?关于如何从 oracle10g 中提取 600 万条记录有什么建议吗? 【发布时间】:2010-04-08 05:59:40 【问题描述】:

我只是想给你一点背景

    需要编写一个 PL-SQL 来提取 600 万条连接不同表的记录并创建一个文件。 需要更多建议,特别是关于如何获取这么多记录的建议。因为一次获取​​这百万条记录可能会占用大量资源。那么问题是如何获取这么多记录?

任何 pl-sql 都将受到高度赞赏。

【问题讨论】:

您如何测试您的方法对资源的关注程度如何?您为什么考虑改变最初的方法? 【参考方案1】:

您需要提取单个表的内容还是JOIN 结果?必须订购结果吗?如果是这样,您应该首先优化您的提取查询。

一旦您有了最佳查询,您可以直接SELECT(例如通过sqlplus),或写入外部(平面文件)表,或使用 ODI。

Donald Burleson: Accessing flat files with Oracle SQL Ask Tom: extracting data to a flat file Creating an ODI Project and Interface: Exporting an RDBMS Table to a Flat File

【讨论】:

【参考方案2】:

600 万行并不是那么多。只需编写查询并让优化器完成它的工作。如果您的统计数据是最新的,这也是自动的,它应该运行得很好。尝试对其进行调整可能会使其运行速度变慢,除非您比 Oracle 的工程师团队更了解查询优化。

如果所有行都足够小,则只使用 PL/SQL 是可以的。 UTL_FILE 包将使用 PUT_LINE 命令将您限制为每行 32767 个字符。有一种解决方法,但它需要将数据复制到 BLOB。

我建议安装 Python 和 cx_Oracle 或 Perl 和 DBD::Oracle。他们会很乐意毫无问题地翻阅 600 万行。默认设置为拉取大量行以降低网络传输。

如果您让我知道您希望如何继续,我可以发布一些示例代码,但在谷歌上搜索 cx_Oracle 或 DBD::Oracle 的文档将找到有关如何获取记录的基础知识。

【讨论】:

您还可以考虑使用 Java 存储过程并使用标准 java.io 类来编写文件。不过,您需要授予适当的 Java 权限才能写入文件系统。【参考方案3】:

我编写了 Java 程序将所有记录写入文件。在我的选择中,我有 20 个线程,它像梦一样工作。

【讨论】:

欢迎来到 Stack Overflow!这也许应该是一个评论,而不是一个答案,因为它几乎只是说你设法让它工作而没有提供太多细节。多一点代表,you will be able to post comments.

以上是关于关于如何从 oracle10g 中提取 600 万条记录有啥建议吗?的主要内容,如果未能解决你的问题,请参考以下文章

oracle 10g中怎样执行很长的sql语句呢(最长可能有10万+字符)

关于oracle 10g中嵌套表扩展的困惑

如何从 Oracle 10G PL/SQL 函数和过程中查找所有表引用? [复制]

ORACLE10G expdp 导出数据报错,大神看下

如何在 Play 框架中执行查询(使用 Oracle 10g)

oracle 10g和11g客户端可以共存吗