配置为使用加密和网络数据包大小的 SQL 服务器上的 SSIS 包出错

本文可帮助你解决将SQL Server配置为使用加密连接和网络数据包大小选项时出现的问题。

原始产品版本:SQL Server
原始 KB 编号: 2006769

症状

对于SQL Server环境,请考虑以下方案:

在此方案中,你会注意到以下事项:

  • 尝试将 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更改就会生效。 更改此设置后,所有新连接都会收到新值。

更多信息

TLS 与 SSL

重现步骤

sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
  1. 确保已安装数据收集器。

  2. “网络数据包大小” 设置为大于 16K 的值。

  3. 对象资源管理器 (OE) 中右键单击“数据收集”和“禁用数据收集”。

  4. 在 OE 中右键单击“ 数据收集 ”,然后选择“ 启用数据收集”。

  5. 右键单击收集集中的 “服务器活动 ”,然后选择“ 启动数据收集组”。

  6. 若要获取错误,请右键单击“ 服务器活动 ”,然后选择“ 收集并立即上传”。 (DC 日志) 详细显示错误。