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

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

原始产品版本:SQL Server
原始 KB 数: 2006769

现象

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

在此方案中,你将注意到以下内容:

  • 尝试将 SSIS 包保存到 MSDB 包存储将失败,并出现以下错误消息:

    SaveToSQLServer 方法遇到 OLE DB 错误代码0x80004005(通信链接失败)。颁发的 SQL 语句失败。

    注意

    将 SQL Server Management Studio 中创建的维护计划保存为 MSDB 数据库的 SSIS 包时,也会遇到上述错误消息,因为该操作本质上使用加密连接到 SQL Server。

  • 使用 SSIS 的 SQL Server 中的数据收集器功能遇到各种问题,如下所示:

    • 数据收集组作业在作业历史记录中报告以下错误:

    dcexec: Error: Internal error at Main (原因: 系统找不到指定的文件)。
    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, String) 方法方法方法时,本节中讨论的条件(加密和大数据包大小)都是真的。

原因

安全套接字层(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 日志详细显示错误)。