sexta-feira, 19 de abril de 2013

SQL Server: Problema com Database Mirroring (Error 1418)

Eu estava configurando um espelhamento de um banco de dados e tomei todos os cuidados necessários:

  1. Banco com recovery model Full
  2. Restaurei o backup na instância que iria hospedar o espelhamento (Full backup + transaction log backups) e deixei o banco em recovery (WITH NORECOVERY)
  3. Como as duas máquinas estavam no mesmo domínio, apenas segui o wizard para estabelecer o espelhamento
Tudo certo e, ao final, após decidir iniciar o espelhamento (Start Mirroring), recebo a seguinte mensagem:
The server network address "TCP://servidor02.dominio.local:5022" can not be reached or does not exist. Check the network address name and that the ports for the local and remote endpoints are operational. (Microsoft SQL Server, Error: 1418)
Bom, imediatamente, chequei como estava o firewall do Windows e vi que as portas que eu estava utilizando estavam ambas liberadas nos dois servidores. E ativas! Inclusive, consegui dar um telnet nelas (telnet servidor02.dominio.local 5022). O que mais poderia ser?

A parte interessante: as duas instâncias estavam usando a conta NETWORK SERVICE para executar o serviço SQL Server, e não uma conta de domínio (ou local) exclusiva para esse fim. Como eram duas instâncias não configuradas por mim (normalmente eu crio uma conta para o serviço do SQL Server e habilito dois recursos que eu gosto muito: "Instant File Initialization" e permitir  "Lock Pages in Memory") e não tinha janela para efetuar essa alteração, iniciei o serviço "as is".

Como resolver esse problema? Criei um login com as contas de computador do domínio e dei permissão CONNECT em ambas máquinas. Veja como ficou:

Na instância principal:
CREATE LOGIN [DOMINIO\SERVIDOR02$] FROM WINDOWS
GO
GRANT CONNECT ON endpoint::[Nome-do-Mirror-Endpoint] to [DOMINIO\SERVIDOR02$]
GO
Onde,
SERVIDOR02 é o nome do servidor onde está a instância que será o espelho;
Nome-do-Mirror-Endpoint é o nome do endpoint criado quando você configurou o espelhamento; pode ser obtido pela consulta SELECT name FROM sys.database_mirroring_endpoints.


Na instância espelho:
CREATE LOGIN [DOMINIO\SERVIDOR01$] FROM WINDOWS
GO
GRANT CONNECT ON endpoint::[Nome-do-Mirror-Endpoint] to [DOMINIO\SERVIDOR01$]
GO

Onde,
SERVIDOR01 é o nome do servidor onde está a instância principal;

Após isso, iniciei o espelhamento e tudo ficou funcionando!

2 comentários:

Unknown disse...

Cara muito obrigado por compartilhar seu conhecimento, o meu só dá esse erro, estou usando duas instâncias e não dois servidores. Vou fazendo conforme o Wizard e quando vou iniciar, aparece essa mensagem de erro.
Vou tentar fazer esse procedimento que você está ensinando, acho que dessa vez vai, já não sei mais o que fazer.

Melo disse...

Espero que esse procedimento ajude.
Caso queira, compartilhe conosco se resolveu ou o que foi necessário para solucionar.
Um abraço!