Problema ao estabelecer um Mirror


Recentemente estive em um cliente para configurar o Database Mirroring em uma base de dados. Pedi a ele para fazer um backup da base de dados inicial e restaurar no mirror, para que quando eu chegasse já fizesse o mirror.

Depois de criar os endpoints, ao tentar iniciar o mirror, vinha a mensagem abaixo:

“The server network address “TCP://<FQDN>: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)”

image

Na figura acima, estou omitindo o nome do servidor por questões de privacidade. No lugar da faixa em branco viria o FQDN do servidor de um dos endpoints. A porta 5022 é padrão, mas pode ser alterada durante a configuração.

Foram feitos os seguintes testes:

a) Ping no FQDN partindo do servidor A para o servidor B e vice-versa: OK

b) Telnet na porta 5022, partindo também de um lado para o outro: OK

c) Login utilizado tem permissão CONNECT nos endpoints: OK.

Solução: o restore do banco de dados não havia sido feito com a opção “WITH NORECOVERY”. Embora a mensagem de erro nos leve a acreditar que o problema ocorre devido a uma falha de rede, esta foi a causa no nosso caso. É obrigatório que o restore da base de dados seja feito com esta opção, mas isto não foi percebido pela pessoa que fez o restore.

Apenas decidi dividir esta experiência aqui pois, pesquisando pela internet, vi pessoas discutindo em forums o mesmo sintoma, sem atingir uma solução.

Comments (3)

  1. Marcos says:

    Bom dia Pericles.

    Estou com o mesmo problema que foi postado por você, porém já havia feito o restore na instância do MIRRORDB com a opção NORECOVERY.

    Saberia dizer o que pode estar errado? ou uma outra fonte para pesquisa?

    Ambiente do Teste:

    WinXP SP2, SQL Server Standard Edition SP2.

    OBS: Estou fazendo o mirroring entre 2 instâncias na mesma máquina, sem o witness.

    Desde já agradeço:)

    []´s

  2. Fernando Forenza says:

    Boa tarde Pericles / Marcos,

    O problema do Marcos parece ser a sintaxe do FQDN com já com a instância, e isso realmente não é possível. tente fazer o seguinte.

    —  Rodar no Principal Server

    IF EXISTS (SELECT name FROM sys.database_mirroring_endpoints WHERE name=’endpoint_mirroring’)

     DROP ENDPOINT endpoint_mirroring

    GO

    CREATE ENDPOINT endpoint_mirroring

       STATE = STARTED

       AS TCP ( LISTENER_PORT = 5022 )

       FOR DATABASE_MIRRORING (ROLE=PARTNER);

    GO

    –Rodar no Mirror Server

    IF EXISTS (SELECT name FROM sys.database_mirroring_endpoints WHERE name=’endpoint_mirroring’)

     DROP ENDPOINT endpoint_mirroring

    GO

    CREATE ENDPOINT endpoint_mirroring

       STATE = STARTED

       AS TCP ( LISTENER_PORT = 5022 )

       FOR DATABASE_MIRRORING (ROLE=PARTNER);

    GO

    –Verifique se está funcionando

    SELECT role_desc, state_desc FROM sys.database_mirroring_endpoints

    –rode no mirror

    USE master

    GO

    ALTER DATABASE Pubs

    SET PARTNER = ‘TCP://SERVER.dominio:5022’

    –a instancia não importa nesse momento.. e sim a porta definida no mirror ok?

    abraços

    Fernando Forenza

  3. Roger says:

    Se você está utilizando um domínio deve iniciar o mirror estando logado com o usuário lacal da máquina ou configurar o agent e a instância para suportar o domínio, mesmo se logando com o usuário SA no sql server