Solucionando problemas de erros de protocolo durante a inicialização do Mecanismo de Banco de Dados

Quando o Mecanismo de banco de dados do SQL Server encontra um erro relacionado a protocolo durante a inicialização, uma mensagem de erro é gravada no log de erros do SQL Server e no Log de Eventos do Windows, da seguinte maneira:

"Erro: 17182, Severidade: 16, Estado: 1."

"Falha de inicialização de TDSSNIClient com erro <x>, código de status <y>."

Nesta mensagem, <x> é o código de erro subjacente retornado pelo subsistema de comunicação ou segurança e <y>, um estado interno de erro de protocolo do SQL Server.

ObservaçãoObservação

O protocolo de memória compartilhada e protocolo de pipes nomeados compartilham alguns aspectos de suas implementações. Se um protocolo falhar, isso pode fazer com que o outro também falhe. Se o protocolo declarado na mensagem de erro estiver desabilitado, mas o erro persistir, experimente reinicializar com ambos (memória compartilhada e pipes nomeados) desabilitados.

Interpretando o código de erro

O código de erro subjacente, <x>, é, normalmente, aquele retornado pela camada de rede do Windows ou por uma chamada de interface SSPI (Security Support Provider Interface). No caso de códigos de erro de rede do Windows, executar o comando net helpmsg pode ajudar a interpretar o código. Códigos de erro de SSPI não tão fáceis de decifrar. Talvez seja preciso pesquisar a Base de Dados de Conhecimento da Microsoft ou, se o SDK do sistema operacional estiver instalado, examinar o arquivo WinError.h.

Interpretando o código de status do erro de protocolo

Os estados de erro de protocolo do SQL Server são listados na tabela a seguir. Observe que a maioria dos estados de erro indica uma condição de erro interno, mas o valor específico informa mais especificamente a área de protocolo em particular em que recai o erro. Por exemplo, se o valor estiver entre 7 e 30 (0x0A e 0x1 E), o erro se origina de processamento de TCP/IP. Os códigos de status na mensagem de erro são apresentados em formato hexadecimal. A tabela a seguir fornece o equivalente decimal, a título de esclarecimento.

Intervalo de códigos de status em formato hexadecimal

Intervalo de códigos de status em formato decimal

Área de protocolo

0x03

3

Memória compartilhada

0x07-0x1E

7-30

TCP/IP

0x1F-0x23

31-35

Conexão de administrador dedicada (DAC)

0x35

53

Pipes nomeados

0x36

54

Adaptador de interface virtual (VIA)

0x38

56

SSL (Secure Sockets Layer)

0x40-0x4F

64-79

Memória compartilhada

0x50-0x5F

80-95

Pipes nomeados

0x60-0x6F

96-111

VIA

0x70-0x7F

112-127

HTTP

0x80-0x8F

128-143

SSL

0x90-0x9F

144-159

Geral

A tabela a seguir lista alguns códigos de erro comuns.

Código de status

Descrição

0x03

Erro ao iniciar suporte à memória compartilhada

0x04

Todos os protocolos desabilitados

0x0A

Impossível inicializar o ouvinte de TCP/IP

0x1C

Servidor configurado para escutar em um endereço de IP específico em um ambiente de cluster

0x1E

Endereço de IP duplicado detectado na rede

0x35

Erro ao iniciar suporte a pipe nomeado

0x36

Erro ao iniciar suporte a VIA

0x38

Erro ao obter ou usar o certificado para SSL

0x3A

Impossível inicializar os ouvintes de comunicação

0x40

Impossível inicializar o ouvinte de Memória Compartilhada

0x50

Impossível inicializar o ouvinte de Pipe Nomeado

0x60

Impossível inicializar o ouvinte de VIA

0x70

Impossível inicializar o ouvinte de HTTP

0x80

Impossível inicializar o suporte a SSL

Exemplos

Segue um exemplo de um erro típico que ocorre durante a inicialização: "Falha de inicialização de TDSSNIClient com erro 0x80092004, código de status 0x38".

O valor 0x80092004 é um código de erro de SSPI que converte para CRYPT_E_NOT_FOUND. 0x38 é um código de erro interno que significa que a camada de comunicações do SQL Server não conseguiu inicializar o ouvinte. Este erro foi gerado pelo SSL porque ele não conseguiu localizar o certificado.

Erros retornados quando todos os protocolos estão desabilitados

Podem ocorrer os seguintes erros quando todos os protocolos estiverem desabilitados:

  • "Erro: 17182, Severidade: 16, Estado: 1."

    "Falha de inicialização de TDSSNIClient com erro 0xd, código de status 0x4."

  • "Erro: 17182, Severidade: 16, Estado: 1."

    "Falha de inicialização de TDSSNIClient com erro 0xd, código de status 0x1."

  • "Erro: 17826, Severidade: 18, Estado: 3."

    "Impossível iniciar a biblioteca de rede devido a um erro interno na biblioteca. Para determinar a causa, consulte os erros imediatamente anteriores a esse no log de erros."

  • "Erro: 17120, Severidade: 16, Estado: 1."

    "O SQL Server não conseguiu gerar o thread FRunCM. Verifique o log de erros do SQL Server e os logs de eventos do Windows para obter informações sobre possíveis problemas relacionados."