Temos um banco de dados muito grande (~ 6 TB), cujo arquivo de log de transações foi excluído (enquanto o SQL Server foi desligado. Tentamos:
- Desanexando e reconectando o banco de dados; e
- Recuperando a exclusão do arquivo de log de transações
... mas nada funcionou até agora.
No momento, estamos executando:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... mas, considerando o tamanho do banco de dados, isso provavelmente levará alguns dias para ser concluído.
Questões
Existe uma diferença entre o comando acima e o seguinte?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Em
REPAIR_ALLOW_DATA_LOSS
vez disso, deveríamos estar executando ?
Vale a pena notar que os dados são derivados de outras fontes para que o banco de dados possa ser reconstruído, no entanto, suspeitamos que será muito mais rápido reparar o banco de dados do que reinserir todos os dados novamente.
Atualizar
Para quem mantém a pontuação: o ALTER DATABASE/REBUILD LOG
comando foi concluído após cerca de 36 horas e relatou:
Aviso: O log do banco de dados 'dbname' foi reconstruído. A consistência transacional foi perdida. A cadeia RESTORE foi interrompida e o servidor não tem mais contexto nos arquivos de log anteriores, portanto, você precisará saber o que eles eram.
Você deve executar o DBCC CHECKDB para validar a consistência física. O banco de dados foi colocado no modo somente dbo. Quando estiver pronto para disponibilizar o banco de dados para uso, você precisará redefinir as opções do banco de dados e excluir todos os arquivos de log extras.
Em seguida, executamos um DBCC CHECKDB
(demorou cerca de 13 horas) que foi bem-sucedido. Digamos que todos aprendemos a importância dos backups do banco de dados (e concedendo aos gerentes de projeto acesso ao servidor ...).