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 o arquivo de log de transações
... mas nada funcionou até agora.
Atualmente estamos executando:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... mas dado o tamanho do banco de dados, isso provavelmente levará alguns dias para ser concluído.
Perguntas
Existe alguma diferença entre o comando acima e o seguinte?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
Devemos estar executando
REPAIR_ALLOW_DATA_LOSS
em vez disso?
Vale a pena notar que os dados são derivados de outras fontes para que o banco de dados possa ser reconstruído, mas suspeitamos que será muito mais rápido reparar o banco de dados do que reinserir todos os dados novamente.
Atualizar
Para aqueles que 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 quais 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, será necessário redefinir as opções do banco de dados e excluir quaisquer arquivos de log extras.
Em seguida, executamos um DBCC CHECKDB
(levou cerca de 13 horas) que foi bem-sucedido. Vamos apenas dizer que todos nós aprendemos a importância dos backups de banco de dados (e conceder aos gerentes de projeto acesso ao servidor...).