使用 SSIS 在 Oracle 和 SQL 服务器之间传输数据的性能问题

Performance issues of a data transfer between Oracle and SQL Server using SSIS

我正在尝试设计一个使用 SSIS 将数据从 Oracle 传输到 SQL Server 2016 的过程。这样做的目的是从 SQL Server 2000 实例中删除生产过程,其中传输是通过链接服务器实现的。

我在SSIS进程中设计的传输很慢。

我尝试使用 "Native OLE DB\Microsoft OLE DB Provider for Oracle" 以及 "Native OLE DB\Microsoft OLE DB Provider for Oracle" OLEDB 连接。

结果是,传输跨越 28,228472 行的数据集的 9,934 条记录大约需要一分钟。

我尝试将 "Oracle Source" 组件与 "Oracle Connection Manager" 一起使用。

结果是,我可以测试连接,设计流程甚至预览结果集。一旦我 运行 我的 Visual Studio 中的包,它就会指出错误:"The component metadata for could not be upgraded to the newer version of the component. The PerformUpgrade method failed."

我需要能够在合理的时间内转移日期。
我使用的环境如下:

Visual Studio: Visual Studio 2019 16.2.0
SSIS project compatibility mode is: SQL Server 2016

Targeted SQL Server: SQL Server 2016 (13.0.5233.0)
The SSIS package will be run on: SQL Server 2016 (13.0.5264.1)

The Oracle environment is:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production

我建议对您的 oledb 目标使用 "Table or view - Fast load" 模式。

并使用"upsert"data flow with lookup transform来尽量减少数据写入I/O。

如果可能,请使用 "Full cache" 作为查找模式(需要 RAM)。

Here are some other tips 这可能会有所帮助。

我设法解决了性能问题并确保传输了总数据量。

我放弃了使用 OLEDB 连接,转而使用 "ADO NET"。 我使用“.Net Providers\OracleClient Data Provider”作为源,“.Net Providers\SqlClient Data Provider”作为目标。

ADO.net 源和连接提供了一致的数据传输性能并确实获取了所有记录。 SQL 服务器之间的传输在 OLEDB 连接下仍然可以更好地工作。 ADO 源和 OLEDB 目标之间的传输需要非 unicode 到 unicode 的转换。