Udostępnij za pośrednictwem


Błąd dla pakietów SSIS na serwerach SQL skonfigurowanych do używania szyfrowania i rozmiaru pakietu sieciowego

Ten artykuł ułatwia rozwiązanie problemu występującego podczas konfigurowania SQL Server do używania zaszyfrowanych połączeń i opcji rozmiaru pakietu sieciowego.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 2006769

Symptomy

Rozważmy następujący scenariusz dla środowisk SQL Server:

W tym scenariuszu zauważysz następujące elementy:

  • Próba zapisania pakietów SSIS w magazynie pakietów MSDB zakończy się niepowodzeniem z następującym komunikatem o błędzie:

    Metoda SaveToSQLServer napotkała kod błędu OLE DB 0x80004005 (błąd łącza komunikacyjnego). Wydana instrukcja SQL nie powiodła się.

    Uwaga

    Podczas zapisywania planów konserwacji utworzonych w SQL Server Management Studio jako pakietów SSIS w bazach danych MSDB występuje również komunikat o błędzie, ponieważ ta operacja z natury używa szyfrowania dla połączeń z SQL Server.

  • Funkcja modułu zbierającego dane w SQL Server, która korzysta z usługi SSIS, napotkała różne problemy, jak wspomniano poniżej:

    • Zadanie zestawu zbierania danych zgłasza następujące błędy w historii zadań:

    dcexec: Błąd: Błąd wewnętrzny w pozycji Main (Przyczyna: System nie może odnaleźć określonego pliku).
    dcexec: Błąd: Błąd wewnętrzny w main (przyczyna: dojście jest nieprawidłowe).

    • Podczas uruchamiania zestawu zbierania danych bezpośrednio z danych może wystąpić następujący komunikat o błędzie:

    Pakiet "Set_{7B191952-8ECF-4E12-AEB2-EF646EF79FEF}_Master_Package_Collection" nie powiódł się.

Jeśli przejrzysz dzienniki modułu zbierającego dane, zostanie wyświetlony komunikat o błędzie podobny do następującego:

Błąd SSIS. Nazwa składnika: TaskForCollectionItem_1, Kod: -1073602332, Podskładnik: (null), Opis: Błąd 0xC0014062 podczas przygotowywania do załadowania pakietu. Metoda LoadFromSQLServer napotkała kod błędu OLE DB 0x80004005 (błąd łącza komunikacyjnego). Wydana instrukcja SQL nie powiodła się.

Problem może wystąpić w przypadku dowolnej operacji używającej metody Application.LoadFromSqlServer(String, String, String, String, IDTSEvents) lub metody Application.SaveToSqlServer(Package, IDTSEvents, String, String, String), gdy warunki (szyfrowanie i duży rozmiar pakietu) omówione w tej sekcji są prawdziwe.

Przyczyna

Protokół Secure Socket Layer (SSL) i jego zastąpienie, Transport Layer Security(TLS), ograniczają fragmenty danych do 16 000 (16384) rozmiaru. Jest to udokumentowane w publicznej wersji RFC 2246 (sekcja 6.2.2) oraz bieżącej implementacji protokołów sieciowych, a warstwa punktów końcowych TDS jest zgodna z tą specyfikacją. Dlatego w przypadku korzystania z rozmiaru pakietu sieciowego większego niż 16 tys. w środowiskach, w których włączono szyfrowanie w SQL Server, wystąpią błędy omówione w sekcji Objawy.

Rozwiązanie

Aby rozwiązać ten problem, określ rozmiar pakietu sieciowego, który jest mniejszy lub równy 16 384 bajtów. Aby ustawić opcję network packet size konfiguracji procedury składowanej systemu, możesz użyć następującego sp_configure kodu:

Uwaga

Jeśli usługa MARS jest włączona, dostawca SMUX doda 16-bajtowy nagłówek do pakietu przed szyfrowaniem SSL, zmniejszając maksymalny rozmiar pakietu sieciowego do 16368 bajtów.

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

Rozmiar pakietu sieciowego można również zmienić za pośrednictwem strony Właściwości serwera w Eksplorator obiektów. Wybierz opcję Zaawansowane i wpisz nową wartość dla pozycji Rozmiar pakietu sieciowego i kliknij przycisk OK.

Uwaga

Aby zmiana była skuteczna, nie trzeba ponownie uruchamiać SQL Server. Po zmianie tego ustawienia wszystkie nowe połączenia otrzymają nową wartość.

Więcej informacji

Protokół TLS a protokół SSL

Kroki do odtworzenia

sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
  1. Upewnij się, że moduł zbierający dane jest zainstalowany.

  2. Ustaw rozmiar pakietu sieciowego na wartość większą niż 16K.

  3. Kliknij prawym przyciskiem myszy pozycję Zbieranie danych w Eksplorator obiektów (OE) i wyłącz zbieranie danych.

  4. Kliknij prawym przyciskiem myszy pozycję Zbieranie danych w środowisku OE i wybierz pozycję Włącz zbieranie danych.

  5. Kliknij prawym przyciskiem myszy pozycję Działanie serwera w zestawach kolekcji i wybierz pozycję Uruchom zestaw zbierania danych.

  6. Aby uzyskać błąd, kliknij prawym przyciskiem myszy pozycję Działanie serwera i wybierz pozycję Zbierz i przekaż teraz. (Dzienniki kontrolera domeny pokazują szczegółowo błąd).