Partilhar via


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

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

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

Sintomas

Considere o seguinte cenário para ambientes SQL Server:

Nesse 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 o código de erro OLE DB 0x80004005 (falha no link de comunicação). A instrução SQL emitida falhou.

    Observação

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

  • O recurso de coletor de dados no SQL Server que usa 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 Trabalhos:

    dcexec: Erro: Erro interno em Main (Motivo: O sistema não consegue encontrar o arquivo especificado).
    dcexec: Erro: Erro interno em Main (Motivo: O identificador é inválido).

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

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

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 ao preparar o carregamento do pacote. O método LoadFromSQLServer encontrou o código de erro OLE DB 0x80004005 (falha no link de comunicação). Houve falha na instrução SQL emitida.

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

Causa

O Secure Socket Layer (SSL) e seu substituto, Transport Layer Security (TLS), limitam os 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 endpoints 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 no SQL Server, você encontrará erros discutidos na seção Sintomas.

Solução

Para resolver 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 network packet size opção 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 no 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 o SQL Server para que a alteração entre em vigor. 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. Certifique-se de que o coletor de dados esteja instalado.

  2. Defina o Tamanho do pacote de rede para um valor maior que 16K.

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

  4. Clique com o botão direito do mouse em Coleta de dados no OE e selecione Ativar coleta de dados.

  5. Clique com o botão direito do mouse em Atividade do Servidor nos conjuntos de coleta 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 do DC mostram o erro em detalhes).