Eu encontrei um problema ao configurar um SQL Server de várias instâncias ao atribuir um endereço IP específico à primeira instância.
Configuração de IP Dedicado
As etapas que executo para configurar uma única instância para um endereço IP dedicado são:
Abra o SQL Server Configuration Manager (SSCM)
Navegue para baixo na árvore para:
SQL Server Configuration Manager (local) +-- SQL Server Network Configuration +-- Protocols for <INSTANCENAME>
No painel direito, clico duas vezes em TCP/IP que abre as Propriedades de TCP/IP na guia Protocolo
Em seguida, asseguro-me de que Enabled esteja definido como yes e a opção Listen All esteja definida como No .
Eu troco as guias para os endereços IP e asseguro que
- Enabled está definido como Não para todos os endereços IPv4 e IPv6, exceto para o endereço IP que desejo atribuir a esta instância. Para este endereço IP, defino a configuração como Sim .
- As portas dinâmicas TCP estão vazias para todos os endereços IP.
- Para o endereço IP que desejo atribuir a esta instância, atribuo a porta TCP 1433 .
Em seguida, fecho todas as janelas e o SSCM exibe a mensagem padrão:
--------------------------- Warning --------------------------- Any changes made will be saved; however, they will not take effect until the service is stopped and restarted. --------------------------- OK ---------------------------
Eu reinicio a instância específica e geralmente permite conexões com minha instância por meio do endereço IP dedicado.
Eu testo se a instância está escutando no endereço IP e na porta fornecidos com:
c:\> netstat -abon
TCP 10.58.212.112:1433 0.0.0.0:0 LISTENING 2172 [sqlservr.exe]
Os resultados acima são de um servidor em funcionamento
Até agora tudo bem. Já fiz isso pela enésima vez e nunca tive problemas.
Caso
Dois dias atrás, o serviço do SQL Server para uma instância recém-configurada em um servidor de teste não iniciaria após a configuração do endereço 10.58.194.5 para a instância. Eu tentei as seguintes etapas para corrigir a instância de teste "quebrada" :
- Reparar ferramentas compartilhadas
- Reparar instância
- Desinstalar e reinstalar o SQL Server
- Execute um ProcMon para descobrir onde as coisas foram quebradas.
Mas nada ajudou até agora.
A saída relevante do arquivo ERRORLOG é a seguinte:
2021-12-17 08:00:03.76 spid17s Error: 26024, Severity: 16, State: 1. 2021-12-17 08:00:03.76 spid17s Server failed to listen on 10.58.194.5 <ipv4> 1433. Error: 0x2741. To proceed, notify your system administrator. 2021-12-17 08:00:03.76 spid17s Error: 17182, Severity: 16, State: 1. 2021-12-17 08:00:03.76 spid17s TDSSNIClient initialization failed with error 0x2741, status code 0xa. Reason: Unable to initialize the TCP/IP listener. 2021-12-17 08:00:03.76 spid17s Error: 17182, Severity: 16, State: 1. 2021-12-17 08:00:03.76 spid17s TDSSNIClient initialization failed with error 0x2741, status code 0x1. Reason: Initialization failed with an infrastructure error. Check for previous errors. 2021-12-17 08:00:03.76 spid17s Error: 17826, Severity: 18, State: 3. 2021-12-17 08:00:03.76 spid17s Could not start the network library because of an internal error in the network library. To determine the cause, review the errors immediately preceding this one in the error log. 2021-12-17 08:00:03.76 spid17s Error: 17120, Severity: 16, State: 1. 2021-12-17 08:00:03.76 spid17s SQL Server could not spawn FRunCommunicationsManager thread. Check the SQL Server error log and the operating system error log for information about possible related problems.
Esta é a primeira vez que não consigo configurar/definir uma instância do SQL Server para um endereço IP específico.
Entradas de registro de eventos
Os seguintes erros são registrados no log de eventos do aplicativo do Windows ao tentar iniciar o serviço (o mais recente primeiro):
Level | Date / Time | Source | Event ID Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17120 Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17826 Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17182 Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 17182 Error | 17.12.2021 11:00:45 | MSSQL$<INSTANCENAME> | 26024
Essas identificações de eventos se assemelham às informações do ERRORLOG.
A entrada adicional no log de eventos do sistema é:
Level | Date / Time | Source | Event ID Error | 17.12.2021 11:00:45 | Service Control Manager | 7024
Os detalhes sendo:
The service "SQL Server (<INSTANCENAME>)" has been stopped with the following error: The requested address is invalid in this context.
Os detalhes do XML são:
- <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"> - <System> <Provider Name="Service Control Manager" Guid="{555908d1-a6d7-4695-8e1e-26931d2012f4}" EventSourceName="Service Control Manager" /> <EventID Qualifiers="49152">7024</EventID> <Version>0</Version> <Level>2</Level> <Task>0</Task> <Opcode>0</Opcode> <Keywords>0x8080000000000000</Keywords> <TimeCreated SystemTime="2021-12-17T10:00:45.876740800Z" /> <EventRecordID>15418</EventRecordID> <Correlation /> <Execution ProcessID="736" ThreadID="372" /> <Channel>System</Channel> <Computer>SERVER.DOMAIN.TLD</Computer> <Security /> </System> - <EventData> <Data Name="param1">SQL Server (<INSTANCENAME>)</Data> <Data Name="param2">%%10049</Data> <Binary>4D005300530051004C00240041004C004C00470045004D00450049004E000000</Binary> </EventData> </Event>
Configuração da placa de interface de rede
Há apenas uma NIC configurada no servidor de teste . E é virtual. O nome é Ethernet0 e o tipo é Adaptador Ethernet para vmxnet3 .
A rede está configurada da seguinte forma:
IP address: 10.58.194.4 Subnet mask: 255.255.255.192 Standard gateway: 10.58.194.2
Os endereços IP adicionais que estamos usando para as instâncias do SQL Server são:
10.58.194.5 / 255.255.255.192 10.58.194.6 / 255.255.255.192 10.58.194.7 / 255.255.255.192 10.58.194.28 / 255.255.255.192 10.58.194.29 / 255.255.255.192
A única NIC está configurada para aceitar conexões para os seis endereços IP.
Pergunta
Alguém tem alguma ideia de como posso resolver este problema?
Informações Adicionais via Comentários
Se eu definir a opção Listen All como Yes na configuração TCP/IP, a instância será iniciada. Mas não é isso que procuro. Não consigo me conectar à instância usando o alias ou o endereço IP. O processo sqlserver.exe não está mais escutando na porta 1433.
Depois de contemplar minha observação de que o processo sqlserver.exe não está mais ouvindo na porta 1433 , parece que o servidor não consegue vincular o endereço IP à porta 1433 para minha primeira instância.
Depois de configurar Listen All para yes e o endereço IP para ter port 1433
, então sqlserver.exe
não escuta em nenhum endereço IP ( 0.0.0.0
) para port 1433
. É como se a configuração da caixa de entrada para o número da porta estivesse corrompida. O SQL Server ERRORLOG exibe:
2021-12-17 16:27:36.35 spid17s Error: 26058, Severity: 16, State: 1. 2021-12-17 16:27:36.35 spid17s A TCP provider is enabled, but there are no TCP listening ports configured. The server cannot accept TCP connections.`
Notas Laterais
Consegui configurar e configurar um servidor produtivo , que recebi no mesmo dia, para usar um IP específico sem problemas. A única diferença foi talvez que os seis endereços IP que recebi para o servidor produtivo , estavam em ordem sequencial assim:
10.xx.xxx.111 / 255.255.255.0 -- server 10.xx.xxx.112 / 255.255.255.0 -- instance_1 10.xx.xxx.113 / 255.255.255.0 -- instance_2 10.xx.xxx.114 / 255.255.255.0 --... 10.xx.xxx.115 / 255.255.255.0 10.xx.xxx.116 / 255.255.255.0
Estou documentando a resposta para fornecer a outras pessoas maneiras de descobrir por que um endereço IP pode estar causando um problema ao configurar um endereço IP para uma instância individual do SQL Server.
Os seguintes endereços IP foram os IPs que foram atribuídos à NIC no servidor e ao próprio servidor:
A seguir está uma seção do intervalo de IP e para que eles foram realmente usados do ponto de vista da rede:
Como você pode ver, o endereço IP do servidor corresponde ao endereço IP do Data Center de Gateway Real 1 . E o endereço IP que havia sido reservado para a primeira instância do SQL Server era o endereço IP do Actual Gateway Data Center 2 .
O que tinha acontecido?
Durante a configuração inicial do servidor os endereços IP estavam parcialmente em uso pelos técnicos de rede. Como o gateway físico atual para o servidor estava sendo executado no
10.58.194.5
servidor, ele pôde ser configurado para ser executado e iniciado no10.58.194.4
.A configuração dos endereços IP adicionais na NIC não foi um problema, porque inicialmente é apenas uma entrada no registro. O servidor foi então entregue à equipe de DBA.
Aí veio o cara DBA (eu) e tentou configurar uma nova instância do SQL Server no endereço IP do Data Center de Gateway Real 2 . Como esse endereço estava realmente em uso como o gateway atual do Windows Server, a instância do SQL Server não pôde ser iniciada.
Dica 1
A execução de um
ipconfig
mostrou os endereços IP reais que estavam ativos no servidor:Isso nos mostrou que
...194.5
não...194.6
estavam disponíveis para o servidor/instância, embora tivessem sido configurados para a NIC.Dica 2
A execução de um
tracert
para um servidor diferente em um intervalo de IP diferente teria mostrado igualmente que o endereço IP10.58.194.5
estava em uso como o gateway atual para o servidor.Solução
A solução para nosso problema foi mover o servidor para um intervalo de IP diferente e documentar que os primeiros sete endereços IP de um intervalo são reservados para os técnicos de rede.