Recuperação de SQL Server corrompido

Problema do aluno: Tenho um SQL Server 2000 que corrompeu. Está no modo suspect. Como faço para recuperá-lo?

Solução: Simulei o problema no SQL Server 2005 e no 2000 e vi que, geralmente, é simples.

Um database do SQL Server é formado por 2 tipos de arquivos: dados e log de transações. Geralmente o que corrompe é o arquivo de log. Mas isso tem um lado bom: ele pode ser apagado.

Para início de conversa, criamos um database (para podermos corrompê-lo):

CREATE DATABASE EX
ON
(
      NAME=‘EX_DADOS’,
      FILENAME=‘C:\BANCO\EX.MDF’
)
LOG ON
(
      NAME=‘EX_LOG’,
      FILENAME=‘C:\BANCO\EX.LDF’
)

Em seguida, desconectamos o database do servidor usando o comando:

EXEC SP_DETACH_DB EX

Usando o sistema operacional, apagamos o arquivo C:\EX.LDF. Pronto… estamos com o database corrompido.

Para corrigir essa situação, fazemos a reconexão do banco, com o comando abaixo:

EXEC SP_ATTACH_DB ‘EX’, ‘C:\BANCO\EX.MDF’

Pronto. É só acessar o database normalmente. O arquivo de log será recriado na conexão.

Podemos, também, de posse do arquivo MDF e do banco desconectado do servidor, executar o comando:

CREATE DATABASE EX
ON
(
     
NAME=‘EX_DADOS’,
      FILENAME=‘C:\BANCO\EX.MDF’
)
FOR ATTACH

Uma outra solução, ainda, é executar o comando abaixo, para reconstruir o LDF (ESSE SÓ FUNCIONA NO SQL SERVER 2000):

DBCC REBUILD_LOG(‘EX’,‘C:\BANCO\EX.LDF’)

E, em seguida, executar esse para verificar e corrigir erros de integridade:

DBCC CHECKDB(‘EX’,‘REPAIR_ALLOW_DATA_LOSS’)