Partilhar via


Erro para pacotes SSIS em servidores SQL configurados para usar criptografia e tamanho do pacote de rede

Este artigo ajuda você a resolve o problema que ocorre quando você configura seu SQL Server para usar conexões criptografadas e a opção de tamanho de pacote de rede.

Versão original do produto: SQL Server
Número de KB original: 2006769

Sintomas

Considere o seguinte cenário para ambientes SQL Server:

Neste cenário, você observará o seguinte:

  • Uma tentativa de salvar pacotes SSIS no repositório de pacotes MSDB falhará com a seguinte mensagem de erro:

    O método SaveToSQLServer encontrou 0x80004005 de código de erro OLE DB (falha no link de comunicação). A instrução SQL emitida falhou.

    Observação

    Você também corre para a mensagem de erro acima ao salvar planos de manutenção criados em SQL Server Management Studio como pacotes SSIS para bancos de dados MSDB, uma vez que essa operação usa inerentemente criptografia para conexões com SQL Server.

  • O recurso de coletor de dados no SQL Server que usa o SSIS, é executado em vários problemas, conforme observado abaixo:

    • Um trabalho do Conjunto de Coleta de Dados relata os seguintes erros no Histórico de Trabalho:

    dcexec: Erro: erro interno no Main (Motivo: o sistema não pode localizar o arquivo especificado).
    dcexec: Erro: erro interno no Main (Razão: o identificador é inválido).

    • Ao executar um Conjunto de Coleta de Dados diretamente dos Dados, você pode encontrar a seguinte mensagem de erro:

    O pacote "Set_{7B191952-8ECF-4E12-AEB2-EF646EF79FEF}_Master_Package_Collection" falhou.

Se você revisar os logs do Coletor de Dados, encontrará uma mensagem de erro semelhante à seguinte:

Erro SSIS. Nome do componente: TaskForCollectionItem_1, Código: -1073602332, Subcomponente: (nulo), Descrição: Erro 0xC0014062 enquanto se prepara para carregar o pacote. O método LoadFromSQLServer encontrou o código de erro OLE DB 0x80004005 (falha no link de comunicação). A instrução SQL emitida falhou.

O problema pode acontecer com qualquer operação que use o método Application.LoadFromSqlServer(String, String, String, String, String, IDTSEvents) ou Application.SaveToSqlServer(Package, IDTSEvents, String, String, String) quando ambas as condições (criptografia e grande tamanho de pacote) discutidas nesta seção são verdadeiras.

Motivo

A SSL (Camada de Soquete Seguro) e sua substituição, TLS (Transport Layer Security), limitam fragmentos de dados a 16k (16384) de tamanho. Isso está documentado no RFC 2246 público (seção 6.2.2) e a implementação atual de Protocolos de Rede e a camada de Pontos de Extremidade do TDS adere a essa especificação. Portanto, ao usar um tamanho de pacote de rede maior que 16k em ambientes em que a criptografia está habilitada em SQL Server, você encontrará erros discutidos na seção Sintomas.

Resolução

Para resolve esse problema, especifique um tamanho de pacote de rede menor ou igual a 16.384 bytes. Você pode usar o seguinte código para definir a opção network packet size de configuração do procedimento armazenado do sp_configure sistema:

Observação

Se o MARS estiver habilitado, o provedor SMUX adicionará um cabeçalho de 16 bytes ao pacote antes da criptografia SSL, reduzindo o tamanho máximo do pacote de rede para 16368 bytes.

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

O tamanho do pacote de rede também pode ser alterado por meio da página Propriedades do Servidor em Pesquisador de Objetos. Selecione a opção Avançado e digite o novo valor para Tamanho do Pacote de Rede e clique em OK.

Observação

Você não precisa reiniciar SQL Server para que a alteração seja eficaz. Depois que essa configuração for alterada, todas as novas conexões receberão o novo valor.

Mais informações

TLS vs. SSL

Etapas para reproduzir

sp_configure 'network packet size', 16384
RECONFIGURE WITH OVERRIDE
GO
  1. Verifique se o Coletor de Dados está instalado.

  2. Defina o Tamanho do Pacote de Rede como um valor maior que 16K.

  3. Clique com o botão direito do mouse na Coleta de Dados em Pesquisador de Objetos (OE) e desabilite a coleta de dados.

  4. Clique com o botão direito do mouse na Coleta de Dados no OE e selecione Habilitar Coleta de Dados.

  5. Clique com o botão direito do mouse em Atividade do Servidor nos conjuntos de coleção e selecione Iniciar Conjunto de Coleta de Dados.

  6. Para obter o erro, clique com o botão direito do mouse em Atividade do Servidor e selecione Coletar e Carregar Agora. (Os logs de DC mostram o erro em detalhes).