none
[Dúvida] Database Mirroring - Failover manual RRS feed

  • Pergunta

  • Prezados, boa tarde! Tenho uma dúvida...

     

    Estou implantando um Database Mirroring com SQL Server 2008 Standard, sem o Witness... Minhas duas instâncias (Principal e Espelho) estão no mesmo domínio, porém em redes diferentes. Vou impor uma situação:

     

    Meu servidor Principal cai! E preciso fazer o Failover manual, mas não consigo fazer no Espelho pois ele fica em "Restoring".... alguém sabe como faço o Failover manual?

     

    No aguardo!

    quinta-feira, 24 de fevereiro de 2011 15:12

Respostas

  • BMDamasceno

    este artigo descreve como proceder...

    http://msdn.microsoft.com/pt-br/library/ms179481.aspx

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 24 de fevereiro de 2011 18:05
  • BMDamasceno,

     

    Para realizar o FAILOVER Manual.

     

    --Servidor Principal do MIRROR

     

    USE master

    ALTER DATABASE [Database Name] SET PARTNER FAILOVER 

     

    Com esse comando você realiza o FAILOVER Manual do seu banco de dados.

     

    Segue mais algumas comandos utéis!

     

     

    --PAUSE MIRROR SESSION

    ALTER DATABASE [Database Name]

    SET PARTNER SUSPEND

     

    --START MIRROR SESSION

    ALTER DATABASE [Database Name]

    SET PARTNER RESUME

     

    Att,

     

     


    Luan.Moreno MCP || MTA ||MCTS SQL Server 2005 Blog: http://luanmorenodba.wordpress.com Twitter: @luansql Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 24 de fevereiro de 2011 19:25
  • Fabrizzio, obrigado pelo retorno...

     

    Sim, com o Witness tudo seria perfeito, mas estou impondo uma situação sem ele! Eu não consigo apontar minha aplicação para o SQL_B sem fazer o failover, pois ele fica inativo para inserção... preciso saber, sem o Witness, meu SQL_A cai e preciso fazer o failover para o SQL_B através dele proprio...

     

    Eu encontrei um modo para fazer o SQL_B, veja:

     

    ALTER DATABASE PNet4Agenda SET PARTNER FAILOVER

     

    Da o seguinte erro:

    Msg 1404, Level 16, State 10, Line 1
    
    The command failed because the database mirror is busy. Reissue the command later.

     

     

    Porém em seguida executo o comando abaixo e executa com sucesso:

     

    ALTER DATABASE BancoDeDados SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
    

     

     

    Assim o Failover manual pelo SQL_B funciona! Mas o pq desse erro?! Ele fala que está com o bando está ocupado... Talvez o processo seja esse mesmo, mas não queria esse erro...

     

    Att.

    sexta-feira, 25 de fevereiro de 2011 13:06
  • BM,

     

    É o seguinte, quando ele esta em mirroring, ele esta la esperando os logs, ele supoe que esta realmente sendo usado, esperando dados, os logs, quando voce coloca o ALLOW_DATA_LOSS é como se voce falasse ao sql: "ó, pode parar o mirroring, e pode perder dados", na verdade voce não perde dados, voce só não esta mais no mirroring, fazendo isso, não ha na verdade um failover real, entao ainda esta como: "aguardando logs"...

     

     

    olha aqui: http://msdn.microsoft.com/pt-br/library/bb522476.aspx


    ------------------------------------------------------------- Oracle OCA11g
    sexta-feira, 25 de fevereiro de 2011 13:16
    Moderador

Todas as Respostas

  • BMDamasceno

    este artigo descreve como proceder...

    http://msdn.microsoft.com/pt-br/library/ms179481.aspx

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    quinta-feira, 24 de fevereiro de 2011 18:05
  • BMDamasceno,

     

    Para realizar o FAILOVER Manual.

     

    --Servidor Principal do MIRROR

     

    USE master

    ALTER DATABASE [Database Name] SET PARTNER FAILOVER 

     

    Com esse comando você realiza o FAILOVER Manual do seu banco de dados.

     

    Segue mais algumas comandos utéis!

     

     

    --PAUSE MIRROR SESSION

    ALTER DATABASE [Database Name]

    SET PARTNER SUSPEND

     

    --START MIRROR SESSION

    ALTER DATABASE [Database Name]

    SET PARTNER RESUME

     

    Att,

     

     


    Luan.Moreno MCP || MTA ||MCTS SQL Server 2005 Blog: http://luanmorenodba.wordpress.com Twitter: @luansql Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 24 de fevereiro de 2011 19:25
  • Senhores, Obrigado pelo retorno...

     

    Mas a questão é justamente o fato de eu precisar fazer o Failover no principal! Pois se faço o Mirroring é justamente para quando meu Principal dar pau! Vou explicar a minha estrutura do DB Mirroring:

     

    Meu database principal fica no meu datacenter externo (vou colocar o nome me SQL_A) e meu espelho fica no meu servidor local (SQL_B), ambos estão conectados via minha rede MPLS. Suponha que por algum motivo meu datacenter externo fica sem rede (sim, isso já aconteceu!), logo meu SQL_A fica inacessível, por consequência não vou conseguir fazer o failover nele... a lógica seria fazer no SQL_B, certo?! Depois que o SQL_A voltar eu faço o failover para ele voltar a ser o principal.

     

    Obrigado!

    sexta-feira, 25 de fevereiro de 2011 11:45
  • BM,



    Bom, vamos la, antes de tudo, se voce possui um Witness o failover é automatico, uma vez que ele não consegue se conectar com o SQL_A, o problema: Imagino eu que voce esteja rodando por meio de uma aplicação e não diretamente no banco, porem se não tem rede, eu diria que é preciso a sua aplicação estar configurada para por exemplo:
    SQL_A ip : 10.10.10.10

    SQL_B ip: 10.10.10.20

    Caso não consiga conexão com o SQL_A, ele automaticamente altere para o SQL_B.

    Algumas particularidades sobre o mirroring: Se der problema no seu SQL_A e ele perder a rede ou algo assim, lembre-se de desativar o backup de log paraq poder volta-los ao mesmo nivel depois que o seu SQL_A voltar.

    Resumo: Com a witness é possivel fazer o failover automatico caso o SQL_A fique sem rede, porem, se sua aplicação não estiver configurada para tratar este erro, seu banco SQL_B estara la esperando a conexão de uma aplicação que não ira chegar.

    Sem o witness, voce tera um passo a mais, pois caso de erro em seu SQL_A, voce deve manualmente retirar o mirroring, aplicacar os ultimos logs gerados pelo SQL_A, e colocar o banco online e multi_user, e mais uma vez, sua aplicação deve trocar o servidor....

    ------------------------------------------------------------- Oracle OCA11g
    sexta-feira, 25 de fevereiro de 2011 12:05
    Moderador
  • Fabrizzio, obrigado pelo retorno...

     

    Sim, com o Witness tudo seria perfeito, mas estou impondo uma situação sem ele! Eu não consigo apontar minha aplicação para o SQL_B sem fazer o failover, pois ele fica inativo para inserção... preciso saber, sem o Witness, meu SQL_A cai e preciso fazer o failover para o SQL_B através dele proprio...

     

    Eu encontrei um modo para fazer o SQL_B, veja:

     

    ALTER DATABASE PNet4Agenda SET PARTNER FAILOVER

     

    Da o seguinte erro:

    Msg 1404, Level 16, State 10, Line 1
    
    The command failed because the database mirror is busy. Reissue the command later.

     

     

    Porém em seguida executo o comando abaixo e executa com sucesso:

     

    ALTER DATABASE BancoDeDados SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
    

     

     

    Assim o Failover manual pelo SQL_B funciona! Mas o pq desse erro?! Ele fala que está com o bando está ocupado... Talvez o processo seja esse mesmo, mas não queria esse erro...

     

    Att.

    sexta-feira, 25 de fevereiro de 2011 13:06
  • BM,

     

    É o seguinte, quando ele esta em mirroring, ele esta la esperando os logs, ele supoe que esta realmente sendo usado, esperando dados, os logs, quando voce coloca o ALLOW_DATA_LOSS é como se voce falasse ao sql: "ó, pode parar o mirroring, e pode perder dados", na verdade voce não perde dados, voce só não esta mais no mirroring, fazendo isso, não ha na verdade um failover real, entao ainda esta como: "aguardando logs"...

     

     

    olha aqui: http://msdn.microsoft.com/pt-br/library/bb522476.aspx


    ------------------------------------------------------------- Oracle OCA11g
    sexta-feira, 25 de fevereiro de 2011 13:16
    Moderador
  • Entendi Fabrizzio,

     

    Mas não existe uma maneira de não dar esse "erro"?

     

    Valeu!

    sexta-feira, 25 de fevereiro de 2011 19:16
  • BM,

     

    Desconheco, seria interessante algo assim, se alguem puder postar algo, seria muito bom, todo caso, imagino eu que não, pois voce esta forçando ele a parar.


    ------------------------------------------------------------- Oracle OCA11g
    sexta-feira, 25 de fevereiro de 2011 22:42
    Moderador
  • Beleza Fabrizzio... de qualquer forma todos ajudaram bastante!

     

    Obrigado!

    domingo, 27 de fevereiro de 2011 14:57
  • BM, que isso, qualquer coisa pode perguntar =D, se as respostas minha e das outras pessoas lhe fui util, maruq ecomo respostan para poder ajudar pessoas com problemas semelhantes ^^
    ------------------------------------------------------------- Oracle OCA11g
    domingo, 27 de fevereiro de 2011 15:42
    Moderador