【发布时间】:2014-08-30 16:42:24
【问题描述】:
我有一个关于优化在 Oracle 和 SQL Server 之间传输 10 亿到 13 亿条记录(未来容量高达 20 亿或更多记录)的好方法的问题。
*编辑*我忘了提——这个过程需要每周运行一次,在 1 个周末的时间范围内。
目前我计划使用 ETL 包。我现在正在寻找 Talend 或 SSIS。
这是数据设置。数据驻留在 Oracle 上,需要先收集并重新打包后再传输。
目前我的流程是这样的: 1.) 存储过程提取所有数据并将其重新打包到 oracle 表中。 2.) ETL 将扫描此表并将其移动到 SQL Server DB。 3.) Oracle 和 SQL Server 上的表是一样的。
我一直在寻找有关优化流程的一些想法。如何优化插入到 SQLserver 中的好方法?
1.) 我想只是将表放在 SQL Server 上,然后将表创建为 select * from oracle_table
2.) 存储过程的重新设计,使其在 ETL 中运行(使我不必插入到 oracle 中),然后直接插入到 SQL Server -- 在使用 Talend(我不能代表 SSIS)进行小批量测试时,我遇到了一些性能问题 - 重组过程需要更长的时间来提取数据,然后直接在 Oracle 上调用它。这是正常的,还是我搞砸了优化?
3.) 有没有更好的方法来进行我不知道的海量数据传输?
任何建议都会很棒。我认为链接服务器是这里的一种选择,但没有设置,而且我以前从未设置过。
任何点/提示都会很棒,因为我对这一切都很陌生。
【问题讨论】:
-
您真的每周都会生成 1-20 亿个全新的行吗?这似乎不太可能。最大的优化来源似乎很有可能是构建变更数据捕获流程,这样您就只需要移动一周内实际添加或修改的任何一小部分行。
-
实际上是的——我知道这听起来很疯狂,但数据每周都在变化,并且会自我更正。
-
那么您的 1-20 亿行中的绝大多数每周都在变化?这似乎不太可能。即使您有一个正在纠正数据的流程,从一周到下一周,绝大多数数据似乎很有可能不会发生变化。
-
在这张大桌子上备份和恢复不会有任何帮助吗?如果两台服务器都使用相同的 SAN,那肯定是有益的。我以前没有这样做过,只是把它扔在那里,以便有人可以阐明一些事实。
标签: sql-server oracle optimization ssis etl