"通信链路故障"错误消息报告 SSIS 包的 SQL 服务器配置为使用加密和大型网络数据包大小


症状


请考虑下面的方案,针对 SQL Server 2005 或 SQL Server 2008年环境:

  • 配置您要使用SSL进行连接的 SQL Server。
  • 配置您要使用网络数据包大小大于默认值 (4k) 的 SQL 服务器

在这种情况下,您会看到以下:

  • 试图将 SSIS 包保存到 MSDB 包存储将失败并显示以下错误消息:

SaveToSQLServer方法遇到了 OLE DB 错误代码 0x80004005 (通信链路故障)。未发出的 SQL 语句。

注意:还遇到了上面的错误消息时保存维护计划,SQL Server 管理在 Studio 中创建到 MSDB 数据库的 SSIS 包作为该操作之后本质上使用加密连接到 SQL Server 的连接。

  • 数据收集器使用 SSIS 的 SQL Server 2008年中的新功能运行如下所述的各种问题:
    • 数据集合设置的作业报告作业历史记录中的下列错误:

dcexec: 错误: 内部错误在主 (原因: 系统无法找到指定的文件).dcexec: 错误: 内部错误主 (原因: 该句柄无效)。

    • 直接从数据运行数据集合设置时可能会遇到下面的错误消息:

包"Set_ {7B191952-8ECF-4E12-AEB2-EF646EF79FEF} _Master_Package_Collection"失败。

如果您查看数据收集器日志,您会发现一条错误消息类似于以下。

SSIS 的错误。组件名称: TaskForCollectionItem_1,代码:-1073602332,子组件: (null),说明: 准备加载包时错误 0xC0014062。LoadFromSQLServer方法遇到了 OLE DB 错误代码 0x80004005 (通信链路故障)。 未发出的 SQL 语句。

注意: 与任何操作都使用LoadFromSqlServerSaveToSqlServer的方法,满足两个条件 (加密和较大的数据包大小) 在这一节中讨论时可能出现问题。

原因


安全套接字层 (SSL) 和传输层 Security(TLS),其更换限制数据片断的大小 16k (16384)。这将记录在公共RFC 2246 (部分 6.2.2), SQL 网络接口 (SNI)图层的当前实现符合本规范。因此,当使用 SQL Server 上启用加密的网络数据包的大小超过 16k 环境中,您会遇到症状部分所述的错误。有关详细信息请参阅下面的知识库文章:

  • 2008195Issues 更改 SQL 服务器连接的网络数据包大小的默认值时,需要考虑

解决方案


若要解决此问题,请指定网络数据包的大小小于或等于 16384 字节。可能会使用下面的代码来设置sp_configure系统存储过程的网络数据包大小配置选项:

注意:如果启用 MARS,则 SMUX 提供程序将添加一个 16 字节的标头减少为 16368 字节的最大网络包大小之前 SSL 加密数据包。

EXEC sp_configure 'network packet size', 16368
RECONFIGURE WITH OVERRIDE 
GO 

此外可以通过在对象资源管理器中的服务器属性页更改网络数据包大小。新值中选择高级的选项,然后键入网络数据包大小,请单击确定。

不需要重新启动 SQL Server 以使更改生效。更改此设置后,所有新建连接接收的新值。

更多信息


重现的步骤:
sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
  1.  请确保您的数据收集器已安装。
  2.  网络数据包大小设置为一个值大于 16k。
  3. 右键单击在对象资源管理器(OE) 和禁用数据集合中的数据集合
  4. 数据收集在 OE 上右键单击,然后选择启用数据收集
  5. 右键单击服务器的活动集合设置中,选择开始设置数据集合
  6. 若要获取错误,右键单击服务器的活动然后选择收集和立即上载。(DC 日志错误中显示详细信息)。