Espelhamento - o endereço de rede do servidor não pode ser alcançado

12

Eu tenho o SQL Server 2008 R2 instalado. Ele contém três instâncias.

  1. Padrão (MSSQLServer)
  2. Primeira instância
  3. Segunda Instância

Todos esses são Logon como Serviço de Rede.

Instância padrão é servidor principal Primeira instância é espelho Segunda instância é servidor testemunha

Inicialmente, fiz o backup completo e o backup do log transacional do meu banco de dados principal. Restaurado na primeira instância, mantendo o mesmo nome de banco de dados e estado de recuperação é No-Recovery

Finalmente, iniciei o espelhamento e estou recebendo duas mensagens de erro mostradas abaixo.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

teste
fonte

Respostas:

12

Experimente alguns testes básicos de conectividade.

  1. Verifique se 5022, 5023 e 5024 estão ouvindo.
  2. Verifique se o nome do servidor que você está usando está correto.

Na linha de comando:

netstat -an

insira a descrição da imagem aqui

No meu servidor, você pode ver que 5022 está ouvindo.

Em seguida, verifique se você pode se conectar a essas portas via telnet

telnet fully-qualified-server-name 5022

Conforme mencionado na seção Nota da GUI de Propriedades de espelhamento, logo abaixo do campo testemunha, os nomes dos servidores precisam ser endereços TCP totalmente qualificados.

insira a descrição da imagem aqui

Você deve ver apenas uma tela preta. Neste exemplo, escolhi um nome que causaria uma falha na conexão. Se você vir "Não foi possível abrir a conexão", os servidores definidos como espelho, principal e testemunha não poderão ser acessados ​​ou você não está usando o nome correto.

O cliente telnet pode ser adicionado em Recursos no Windows 2008.

No Windows 2008, quando você clica com o botão direito do mouse em Computador, pode ver o nome completo do computador. Você deve poder fazer o ping também na linha de comando. ex: ping myservername

Atualizar

Por favor, execute as seguintes consultas em cada instância do SQL Server e coloque os resultados em sua pergunta. Muitas dessas dicas de solução de problemas vêm de: http://msdn.microsoft.com/en-us/library/ms189127.aspx

Mostrar pontos finais tcp

SELECT type_desc, port FROM sys.tcp_endpoints;

Exibir status dos pontos finais de espelhamento

SELECT state_desc FROM sys.database_mirroring_endpoints;

Verifique se o ROLE está correto

SELECT role FROM sys.database_mirroring_endpoints;

Exibir permissões para terminais

SELECT EP.name, SP.STATE, 
   CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) 
      AS GRANTOR, 
   SP.TYPE AS PERMISSION,
   CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) 
      AS GRANTEE 
   FROM sys.server_permissions SP , sys.endpoints EP
   WHERE SP.major_id = EP.endpoint_id
   ORDER BY Permission,grantor, grantee; 
GO

O logon para a conta de serviço da outra instância do servidor requer permissão CONNECT. Verifique se o logon do outro servidor tem permissão CONNECT. Para determinar quem tem permissão CONNECT para um terminal, em cada instância do servidor, use a seguinte instrução Transact-SQL.

Exemplo de saída:

name    STATE   GRANTOR PERMISSION  GRANTEE
TSQL Local Machine  G   sqladmin    CO      public
TSQL Named Pipes    G   sqladmin    CO      public
TSQL Default TCP    G   sqladmin    CO      public
TSQL Default VIA    G   sqladmin    CO      public
Mirroring   G   SERVERNAME\Grantor  CO      SERVERNAME\Grantee

Concedente é a conta que tem permissão de conexão (CO) atribuída, o beneficiário é a conta que tem permissão de conexão

Na linha de comando, execute ipconfig /alle observe o nome do host retornado.

Craig Efrein
fonte