quarta-feira, 11 de novembro de 2009

Recuperar banco em Suspect

Aproveitando o assunto Apagão, como o que aconteceu essa madrugada (10/11/2009) em SP e mais um monte de lugares, é até comum, quando há problemas com os NoBreaks e Geradores, ocorrer algum problema com os servidores de banco de dados e eles voltarem como Suspects.

Basicamente, se não houver problemas muito mais sérios, a receita é:


EXEC sp_resetstatus 'Nome_BancoDados';

ALTER DATABASE Nome_BancoDados SET EMERGENCY

DBCC checkdb('Nome_BancoDados')

ALTER DATABASE Nome_BancoDados SET SINGLE_USER WITH ROLLBACK IMMEDIATE

DBCC CheckDB ('Nome_BancoDados', REPAIR_ALLOW_DATA_LOSS)

ALTER DATABASE Nome_BancoDados SET MULTI_USER

35 comentários:

  1. perfeito ... muito obrigado !!!

    ResponderExcluir
  2. Show de bola.

    Salvou a minha pele.

    ResponderExcluir
  3. Muito obrigado pela ajuda. Salvou o dia!

    ResponderExcluir
  4. Você não salvou só a minha pele, foi o corpo todo.
    Faço questão de te agradecer em nome de todos aqueles que não sabem nada de SQL.

    ResponderExcluir
  5. Perfeito, funcionou perfeitamente, após uma queda de energia no cliente.
    Só queria dar uma dica extra, no caso de bancos que tenham o traço "-" como um dos caracteres no nome dele, nos comandos em que o nome do banco não estejam com aspas ou parenteses como este: ALTER DATABASE Nome_BancoDados SET EMERGENCY , é necessario incluir colchetes "[]" entre o nome do banco, exemplo:
    ALTER DATABASE [BANCO-TESTE] SET EMERGENCY

    Abraços.

    ResponderExcluir
  6. Excelente. Consegui recuperar uma base com status suspect seguindo os procedimentos acima.
    Parabéns pelo artigo.

    ResponderExcluir
  7. Muito obrigado, deu certo aqui.

    ResponderExcluir
  8. muito bom heim, muito obrigado pela ajuda!

    ResponderExcluir
  9. Perfeito...ja conhecia alguns dos comandos, mas com esta sequencia nem precisei do suporte. Obrigada!

    ResponderExcluir
  10. Bom dia, deu certo numa base de um cliente que estava parada a dois dias. Obrigado pela dica

    ResponderExcluir
  11. Muito bom mesmo! parabéns, simples e eficiente, me ajudou muito. Obrigado!

    ResponderExcluir
  12. o programa funcionou , mas o arquivo mdf não pode ser copiado ( erro ciclico de redundancia ) , O que pode ser ?

    ResponderExcluir
  13. Obrigado, comando funcionou perfeitamente, entretanto tive que executar duas vezes, pois na primeira vez o banco ficou como Usuário Único, apos a segunda tentativa voltou ao normal!

    ResponderExcluir
  14. Perfeito!!! Perfeito!!! Deem um Óscar para esse cara!!!

    ResponderExcluir
  15. o meu sempre dar
    Server: Msg 102, Level 15, State 6, Line 1
    Sintaxe incorreta próxima a 'EMERGENCY'.

    Alguem pode me ajudar ???

    ResponderExcluir
  16. Este comentário foi removido pelo autor.

    ResponderExcluir
  17. FUNCIONOU TAMBÉM, MUITO EMBORA HÁ PERDAS DE DADOS NÉ?

    ResponderExcluir
  18. Segue passo a passo para recuperar o banco do suspect

    --1

    EXEC sp_resetstatus 'Seu Banco'

    --2

    DBCC DBRECOVER (SGV, ignoreerrors)

    --3

    EXEC sp_configure 'allow updates', 1

    RECONFIGURE WITH OVERRIDE

    GO

    --4

    BEGIN TRANSACTION

    UPDATE sysdatabases SET status = 32768 WHERE name='Seu Banco'

    COMMIT TRANSACTION

    GO

    /*5 Nesse Passo deve ser parado o banco da loja e startado novamente,
    e em seguida continuar com os passos a baixo*/

    EXEC sp_configure 'allow updates', 1

    RECONFIGURE WITH OVERRIDE

    GO

    DBCC REBUILD_LOG('Seu Banco','o caminho log')

    --6

    DBCC CHECKDB('Seu Banco')



    --7

    EXEC sp_dboption 'Seu Banco', 'dbo use only', false

    GO

    EXEC sp_dboption 'Seu Banco','single user', false

    ResponderExcluir
  19. Perfeito. Um post de 2009 que continua ajudando muito. Obrigado.

    ResponderExcluir
  20. deu certo, muito obrigado por compartilhar o conhecimento.

    ResponderExcluir
  21. Obrigado por compartilhar seu conhecimento dessa forma simples e eficiente.

    ResponderExcluir
  22. Camarada, muito obrigado mesmo! Funcionou perfeitamente, me salvou.

    ResponderExcluir