Fel för SSIS-paket på SQL-servrar som har konfigurerats för att använda kryptering och paketstorlek för nätverk
Den här artikeln hjälper dig att lösa det problem som uppstår när du konfigurerar SQL Server att använda krypterade anslutningar och storleksalternativ för nätverkspaket.
Ursprunglig produktversion: SQL Server
Ursprungligt KB-nummer: 2006769
Symptom
Tänk på följande scenario för SQL Server-miljöer:
Du konfigurerar SQL Server så att den använder Aktivera krypterade anslutningar till databasmotorn för anslutningar.
Du konfigurerar SQL-servern så att den använder ett alternativ för nätverkspaketstorlek som är större än standardvärdet (4K).
I det här scenariot ser du följande:
Ett försök att antingen spara SSIS-paket i MSDB-paketarkivet misslyckas med följande felmeddelande:
Metoden SaveToSQLServer har påträffat OLE DB-felkod 0x80004005 (kommunikationslänkfel). SQL-instruktionen som utfärdades misslyckades.
Kommentar
Du får också felmeddelandet ovan när du sparar underhållsplaner som skapats i SQL Server Management Studio som SSIS-paket till MSDB-databaser eftersom den åtgärden i sig använder kryptering för anslutningar till SQL Server.
Datainsamlingsfunktionen i SQL Server som använder SSIS stöter på olika problem som anges nedan:
- Ett datainsamlingsuppsättningsjobb rapporterar följande fel i jobbhistoriken:
dcexec: Error: Internal error at Main (Reason: The system cannot find the file specified).
dcexec: Fel: Internt fel på Main (Orsak: Handtaget är ogiltigt).- När du kör en datainsamlingsuppsättning direkt från data kan följande felmeddelande visas:
Paketet "Set_{7B191952-8ECF-4E12-AEB2-EF646EF79FEF}_Master_Package_Collection" misslyckades.
Om du granskar loggarna för datainsamlaren visas ett felmeddelande som liknar följande:
SSIS-fel. Komponentnamn: TaskForCollectionItem_1, Kod: -1073602332, Underkomponent: (null), Beskrivning: Fel 0xC0014062 när paketet ska läsas in. Metoden LoadFromSQLServer har påträffat OLE DB-felkod 0x80004005 (kommunikationslänkfel). SQL-instruktionen som utfärdades misslyckades.
Problemet kan inträffa med alla åtgärder som använder antingen Application.LoadFromSqlServer(String, String, String, String, String, IDTSEvents) Method eller Application.SaveToSqlServer(Package, IDTSEvents, String, String, String, String) Method methods when both the conditions (encryption and large packet size) som beskrivs i det här avsnittet är sanna.
Orsak
Secure Socket Layer (SSL) och dess ersättning, Transport Layer Security (TLS), begränsar datafragment till 16k (16384) i storlek. Detta dokumenteras i den offentliga RFC 2246 (avsnitt 6.2.2) och den aktuella implementeringen av nätverksprotokoll och TDS-slutpunktsskiktet följer den här specifikationen. När du använder en nätverkspaketstorlek som är större än 16 000 i miljöer där kryptering är aktiverat på SQL Server stöter du på fel som beskrivs i avsnittet Symptom.
Åtgärd
Lös problemet genom att ange en nätverkspaketstorlek som är mindre än eller lika med 16 384 byte. Du kan använda följande kod för att ange konfigurationsalternativet network packet size
för den sp_configure
systemlagrade proceduren:
Kommentar
Om MARS är aktiverat lägger SMUX-providern till ett 16-byteshuvud i paketet före SSL-kryptering, vilket minskar den maximala nätverkspaketstorleken till 16368 byte.
EXEC sp_configure 'network packet size', 16368
RECONFIGURE WITH OVERRIDE
GO
Nätverkspaketstorleken kan också ändras via sidan Serveregenskaper i Object Explorer. Välj alternativet Avancerat och skriv in det nya värdet för Nätverkspaketstorlek och klicka på OK.
Kommentar
Du behöver inte starta om SQL Server för att ändringen ska vara effektiv. När den här inställningen har ändrats får alla nya anslutningar det nya värdet.
Mer information
Steg för att återskapa
sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
Kontrollera att datainsamlaren är installerad.
Ange storleken på nätverkspaket till ett värde som är större än 16 K.
Högerklicka på Datainsamling i Object Explorer (OE) och Inaktivera datainsamling.
Högerklicka på Datainsamling i OE och välj Aktivera datainsamling.
Högerklicka på Serveraktivitet i samlingsuppsättningarna och välj Starta datainsamlingsuppsättning.
Om du vill få felet högerklickar du på Serveraktivitet och väljer Samla in och ladda upp nu. (DC-loggarna visar felet i detalj).