SQL Server clientes podem alterar protocolos quando os computadores cliente tentam se conectar a uma instância de SQL Server

Este artigo apresenta SQL Server clientes podem alterar protocolos quando os computadores cliente tentarem se conectar a uma instância de SQL Server.

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

Resumo

Os computadores cliente que têm o MDAC (Componentes do Microsoft Data Access) versão 2.6 ou posterior podem tentar vários protocolos ou mecanismos de IPC (Comunicação interprocessada) para estabelecer conexões com SQL Server.

Mais informações

Um aprimoramento foi feito na biblioteca de rede do lado do cliente, Dbnetlib.dll para MDAC versão 2.6 e posterior. Com o MDAC versão 2.6 e posterior, se vários protocolos estiverem disponíveis e uma tentativa de conexão com o primeiro protocolo falhar, o aplicativo cliente imediatamente tentará usar um dos outros protocolos.

Por padrão, os clientes têm tcp e pipes nomeados como protocolos disponíveis. Você pode manipular a ordenação de protocolo usando o utilitário cliente SQL Server. O aplicativo cliente usa os protocolos na ordem especificada no computador cliente. A ordem de protocolo é armazenada no seguinte local da chave do registro no valor ProtocolOrder:

HKLM\Software\Microsoft\MSSQLServer\Client\SuperSocketNetLib

Se você estiver usando SQL Server 2005, a ordem de protocolo será armazenada na entrada do registro ProtocolOrder na seguinte subchave de registro:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI<version>

Por exemplo, se um computador cliente tiver pipes TCP e Nomeados disponíveis, o pedido será:

  • TCP
  • Pipes nomeados

Quando o computador cliente tenta fazer uma conexão TCP com o servidor e a tentativa de conexão retorna um código de retorno não zero, o cliente tenta transparentemente uma conexão usando o próximo protocolo na lista, que é Pipes Nomeados. Nesse cenário, o cliente não pode fazer uma conexão TCP; no entanto, o cliente faz com êxito uma conexão Pipes Nomeada.

Observação

O cliente não recebe um erro que indica que o primeiro protocolo falhou.

Se o aplicativo cliente usar o segundo protocolo e também retornar um erro, um erro será retornado ao cliente.

Se você fizer um alias usando um dos seguintes métodos, o aplicativo cliente usará as informações de alias para estabelecer uma conexão com o servidor e não usará protocolos adicionais.

  • Usando o utilitário SQL Server Client Network
  • Usando SQL Server Configuration Manager
  • Ao criar um DSN (nome da fonte de dados do ODBC)

Se você quiser controlar o protocolo que um aplicativo cliente usa para cada tentativa de conexão e não permitir que o cliente experimente vários protocolos, você pode fazer um dos seguintes procedimentos:

  • Use o utilitário de rede cliente SQL ou SQL Server Configuration Manager para criar um alias especificando o protocolo que você preferir.

  • Especifique o protocolo em seu cadeia de conexão. Por exemplo:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBMSSOCN;Address=IP_Address,1433;UID=YourUID;PWD=YourPassword;
    

    Neste exemplo, você especifica o protocolo de rede como DBMSSOCN, o que significa que você deseja usar o protocolo TCP/IP. Se você especificar o protocolo dentro do cadeia de conexão, o Dbnetlib usará apenas o protocolo especificado e não tentará nenhum outro protocolo. Da mesma forma, somente para habilitar o protocolo Pipe Nomeado, use um cadeia de conexão semelhante a este:

    DSN=DSNName;SERVER=servername;DATABASE=YourDataBaseName;Network=DBNMPNTW;Address=\\.\pipe\sql\query;UID=YourUID;PWD=YourPassword;
    
  • Use o utilitário Client Network para remover outros protocolos.

REFERÊNCIAS

Resolvendo erros de conectividade para SQL Server