我的问题适用于ETL场景,其中转换是在数据库之外(完全)执行的。 如果您要提取,转换和加载大量数据(超过2000万条记录),所涉及的数据库是:Oracle和MSSQL Server,那么最好的方法是:
感谢您的想法/建议。
答案 0 :(得分:1)
我总是会使用db的批量加载工具。远程控制批量负载是一个系统管理员问题;总有办法做到这一点。
这意味着ETL的前两个阶段将是为批量加载工具生成正确文件格式的应用程序,最后一个阶段是调用批量加载。
答案 1 :(得分:0)
如果将数据提取到平面文件,则可以使用Oracle外部表直接将文件读入oracle。此时,您可以执行直接路径插入(/ * + append * /)以执行必要的转换。此外,如果表格是nologging,您将节省重做成本,但需要考虑到数据可能丢失/需要在下次备份之前发生媒体故障时重新加载。
此外,如果数据是基于时间的,请考虑使用分区和分区交换。您可以通过上述方法将数据加载到无索引的临时表中,创建必要的索引(也可能是NOLOGGING),这比在插入期间维护索引更快,然后将分区“交换”到主表中。