sql-server - 从 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
(一些类似的问题已经成功地做到了这一点)。到目前为止,还没有解决这个问题。
有没有其他人遇到过这个问题并找到了解决方案以及根本问题是什么?
解决方案
我设法找到了解决问题的方法。Oracle OLE DB 提供程序有一个可选的连接字符串属性,称为FetchSize
. 该值默认为 100,可以通过 reg 键条目或修改 Oracle 连接字符串来修改。它会影响获取的行数并影响到数据库的往返行程。就我而言,我使用 XML 配置文件修改了连接字符串,并将FetchSize
值设置为 5,000。增加FetchSize
允许的 DFT 移动所有记录。
推荐阅读
- pixi.js - Pixi.js 与 Pixi.min.js 的区别?
- java - 如何在java中初始化另一个类的变量?
- google-analytics - 如何在 Google Analytics/Data Studio 中过滤具有特定主机名的上一页路径
- apache-kafka - kafka客户端可以选择特定分区消费吗?
- javascript - Javascript - 排除特定表单标签之外的所有内容
- html - 如何设置数据错误的字体系列
- eclipse - Java(Mac OS):从文件中重新读取对象时,将我的对象写入文件会导致测试出现乱码
- asp.net-mvc - 将一个文件夹移回服务器 MVC
- wordpress - 如何仅在索引页面上显示弹出窗口 Wordpress
- jquery - 如何获取选择器之外的选项卡列表类。我正在使用作为我的这个元素