Поделиться через


Ошибка пакетов служб 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: ошибка: внутренняя ошибка в Main (причина: система не может найти указанный файл).
    dcexec: ошибка: внутренняя ошибка в Main (причина: дескриптор недопустим).

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

    Сбой пакета "Set_{7B191952-8ECF-4E12-AEB2-EF646EF79FEF}_Master_Package_Collection".

При просмотре журналов сборщика данных появится сообщение об ошибке, аналогичное следующему:

Ошибка служб SSIS. Имя компонента: TaskForCollectionItem_1, код: -1073602332, subcomponent: (null), описание: ошибка 0xC0014062 при подготовке к загрузке пакета. Метод LoadFromSQLServer обнаружил код ошибки OLE DB 0x80004005 (сбой канала связи). Ошибка запущенной инструкции SQL.

Проблема может произойти с любой операцией, которая использует методы Application.LoadFromSqlServer(String, String, String, String, String, IDTSEvents) или Application.SaveToSqlServer(Package, IDTSEvents, String, String, String) при условии (шифрование и большой размер пакета) в этом разделе верны.

Причина

Secure Socket Layer (SSL) и его замена, Transport Layer Security(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. Чтобы получить ошибку, щелкните правой кнопкой мыши действие сервера и выберите команду "Собрать и отправить сейчас". (Журналы контроллера домена подробно показывают ошибку).