关于如何从 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。
【讨论】:
【参考方案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 PL/SQL 函数和过程中查找所有表引用? [复制]