Ошибка пакетов служб SSIS на серверах SQL Server, настроенных для использования шифрования и размера сетевого пакета
Эта статья поможет устранить проблему, возникающую при настройке SQL Server для использования зашифрованных подключений и размера сетевого пакета.
Исходная версия продукта: SQL Server
Исходный номер базы знаний: 2006769
Симптомы
Рассмотрим следующий сценарий для сред SQL Server:
Вы настраиваете SQL Server для использования зашифрованных подключений к ядро СУБД для подключений.
Вы настраиваете SQL Server для использования параметра размера сетевого пакета, превышающего значение по умолчанию (4K).
В этом сценарии вы заметите следующее:
Попытка сохранить пакеты 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. После изменения этого параметра все новые подключения получают новое значение.
Дополнительная информация
Шаги для воспроизведения
sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
Убедитесь, что сборщик данных установлен.
Задайте размер сетевого пакета значением больше 16 КБ.
Щелкните правой кнопкой мыши сбор данных в обозреватель объектов (OE) и отключите сбор данных.
Щелкните правой кнопкой мыши сбор данных в OE и выберите "Включить сбор данных".
Щелкните правой кнопкой мыши действие сервера в наборах коллекций и выберите "Пуск набора данных".
Чтобы получить ошибку, щелкните правой кнопкой мыши действие сервера и выберите команду "Собрать и отправить сейчас". (Журналы контроллера домена подробно показывают ошибку).