配置为使用加密和网络数据包大小的 SQL 服务器上的 SSIS 包出错
本文可帮助你解决将SQL Server配置为使用加密连接和网络数据包大小选项时出现的问题。
原始产品版本:SQL Server
原始 KB 编号: 2006769
症状
对于SQL Server环境,请考虑以下方案:
将SQL Server配置为使用“启用与数据库引擎的加密连接”进行连接。
将 SQL Server 配置为使用大于默认值 (4K) 的网络数据包大小选项 。
在此方案中,你会注意到以下事项:
尝试将 SSIS 包保存到 MSDB 包存储区将失败,并显示以下错误消息:
SaveToSQLServer 方法遇到 OLE DB 错误代码0x80004005 (通信链接失败) 。发出的 SQL 语句失败。
注意
将 SQL Server Management Studio 中创建的维护计划保存为 SSIS 包保存到 MSDB 数据库时,还会遇到上述错误消息,因为该操作本质上使用加密进行连接以SQL Server。
使用 SSIS 的 SQL Server 中的数据收集器功能遇到各种问题,如下所示:
- 数据收集组作业在作业历史记录中报告以下错误:
dcexec:错误:主 (的内部错误原因:系统找不到) 指定的文件。
dcexec:错误:主 (的内部错误原因:句柄) 无效。- 直接从数据运行数据收集组时,可能会遇到以下错误消息:
包“Set_{7B191952-8ECF-4E12-AEB2-EF646EF79FEF}_Master_Package_Collection”失败。
如果查看数据收集器日志,将发现类似于以下内容的错误消息:
SSIS 错误。 组件名称:TaskForCollectionItem_1,代码:-1073602332,子组件: (null) ,说明:准备加载包时出错0xC0014062。 LoadFromSQLServer 方法遇到 OLE DB 错误代码0x80004005 (通信链接失败) 。 发出的 SQL 语句失败。
使用 Application.LoadFromSqlServer (String、String、String、String、String、IDTSEvents) 方法 或 Application.SaveToSqlServer (Package、IDTSEvents、String、String、String) 方法 的任何操作都可能发生此问题,但本节中讨论 (加密和大型数据包大小) 均为 true。
原因
安全套接字层 (SSL) 及其替代项传输层安全性 (TLS) ,将数据片段限制为 16k (16384) 。 公共 RFC 2246 (部分 6.2.2) 和网络协议的当前实现中对此进行了介绍 ,TDS 终结点 层遵循此规范。 因此,在SQL Server上启用加密的环境中使用大于 16k 的网络数据包大小时,会遇到症状部分中讨论的错误。
解决方案
若要解决此问题,请指定小于或等于 16,384 字节的网络数据包大小。 可以使用以下代码设置 network packet size
系统存储过程的配置 sp_configure
选项:
注意
如果启用了 MARS,SMUX 提供程序将在 SSL 加密之前向数据包添加一个 16 字节标头,从而将最大网络数据包大小减少到 16368 字节。
EXEC sp_configure 'network packet size', 16368
RECONFIGURE WITH OVERRIDE
GO
还可以通过 对象资源管理器 中的“服务器属性”页更改网络数据包大小。 选择“ 高级 ”选项,键入 “网络数据包大小 ”的新值,然后单击“ 确定”。
注意
无需重启SQL Server更改就会生效。 更改此设置后,所有新连接都会收到新值。
更多信息
重现步骤
sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
确保已安装数据收集器。
将 “网络数据包大小” 设置为大于 16K 的值。
在 对象资源管理器 (OE) 中右键单击“数据收集”和“禁用数据收集”。
在 OE 中右键单击“ 数据收集 ”,然后选择“ 启用数据收集”。
右键单击收集集中的 “服务器活动 ”,然后选择“ 启动数据收集组”。
若要获取错误,请右键单击“ 服务器活动 ”,然后选择“ 收集并立即上传”。 (DC 日志) 详细显示错误。