Ошибка пакетов служб SSIS на серверах SQL Server, настроенных для использования шифрования и размера сетевых пакетов

Эта статья поможет устранить проблему, которая возникает при настройке SQL Server использования зашифрованных подключений и параметра размера сетевого пакета.

Оригинальная версия продукта: SQL Server
Исходный номер базы знаний: 2006769

Симптомы

Рассмотрим следующий сценарий для SQL Server сред:

В этом сценарии вы заметите следующее:

  • Попытка сохранить пакеты служб SSIS в хранилище пакетов MSDB завершится ошибкой со следующим сообщением об ошибке:

    Метод SaveToSQLServer обнаружил код ошибки OLE DB 0x80004005 (сбой канала связи). Сбой выданной инструкции SQL.

    Примечание.

    При сохранении планов обслуживания, созданных в SQL Server Management Studio в виде пакетов SSIS, в базах данных MSDB также возникает сообщение об ошибке, так как эта операция по своей сути использует шифрование для подключений к SQL Server.

  • Функция сборщика данных в SQL Server, использующая службы SSIS, сталкивается с различными проблемами, как указано ниже.

    • Задание набора сбора данных сообщает о следующих ошибках в журнале заданий:

    dcexec: Ошибка: внутренняя ошибка при главном (причина: система не может найти указанный файл).
    dcexec: Ошибка: внутренняя ошибка в main (причина: дескриптор недопустим).

    • При запуске набора сбора данных непосредственно из data может возникнуть следующее сообщение об ошибке:

    Сбой пакета "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, IDTSEvents) или Метода Application.SaveToSqlServer(Package, IDTSEvents, String, String, String) при выполнении обоих условий (шифрование и большой размер пакета), описанных в этом разделе.

Причина

Протокол SSL и его замена, транспортный уровень безопасности (TLS), ограничивает размер фрагментов данных до 16 кб (16384). Это описано в общедоступном документе RFC 2246 (раздел 6.2.2), а текущая реализация сетевых протоколов и уровня конечных точек TDS соответствует этой спецификации. Поэтому при использовании размера сетевого пакета, превышающего 16 кб в средах, где шифрование включено на SQL Server, вы будете столкнуться с ошибками, рассмотренными в разделе "Симптомы".

Разрешение

Чтобы устранить эту проблему, укажите размер сетевого пакета, который меньше или равен 16 384 байтам. Чтобы задать параметр конфигурации network packet size системной хранимой sp_configure процедуры, можно использовать следующий код:

Примечание.

Если параметр MARS включен, поставщик SMUX добавляет 16-байтовый заголовок в пакет перед шифрованием SSL, уменьшая максимальный размер сетевого пакета до 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. Задайте для параметра Размер сетевого пакета значение больше 16 КБ.

  3. Щелкните правой кнопкой мыши Сбор данных в обозреватель объектов (OE) и Отключить сбор данных.

  4. Щелкните правой кнопкой мыши сбор данных в OE и выберите Включить сбор данных.

  5. Щелкните правой кнопкой мыши действие сервера в наборах коллекций и выберите Начать набор сбора данных.

  6. Чтобы получить ошибку, щелкните правой кнопкой мыши действие сервера и выберите Собрать и отправить сейчас. (В журналах контроллера домена подробно отображается ошибка).