首页 > 解决方案 > 从 Oracle 到 SQL Server 的 SSIS 不完整数据加载

问题描述

我有一个 SSIS DFT,它决定打破它负责将数据从 Oracle 12c 移动到 SQL Server 2016,没有中间任务 - 它只是使用针对 Oracle 的日期范围执行一个相当简单的查询,并快速插入到 SQL Server 上的临时表加载。在记录超过约 250 万的日子里,该任务将在向 SQL Server 写入一些完全可被缓冲区大小整除的记录后报告成功,尽管验证了 Oracle 预期的约 300 万条记录。

Oracle 源使用 32 位 Oracle OLE DB 提供程序,而 SQL Server 使用 32 位MSOLEDBSQL提供程序。我目前无法测试 64 位驱动程序以查看它是否能解决问题。DFT 当前设置AutoAdjustBufferSize为 true,DefaultBufferMaxRows为 50k。暂存表设置为所有列定义为VARCHAR,即使源列不是,所以会发生一些隐式转换。该程序包通过运行 TWS 的调度服务器执行,该服务器仅指向包含传递给 DTEXEC 实用程序的参数值的 bat 脚本。

我已经尝试测试对AutoAdjustBufferSize, DefaultBufferMaxRows, Maximum Insert Commit Size, Rows Per Batch 和附加到 Oracle 连接字符串的更改UseSessionFormat=True(一些类似的问题已经成功地做到了这一点)。到目前为止,还没有解决这个问题。

有没有其他人遇到过这个问题并找到了解决方案以及根本问题是什么?

标签: sql-serveroraclessis

解决方案


我设法找到了解决问题的方法。Oracle OLE DB 提供程序有一个可选的连接字符串属性,称为FetchSize. 该值默认为 100,可以通过 reg 键条目或修改 Oracle 连接字符串来修改。它会影响获取的行数并影响到数据库的往返行程。就我而言,我使用 XML 配置文件修改了连接字符串,并将FetchSize值设置为 5,000。增加FetchSize允许的 DFT 移动所有记录。

可以在此处找到有关 Oracle OLE DB 提供程序连接字符串属性的更多信息。


推荐阅读