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’)