Arquivo de log do SQL Server está muito grande. O que fazer?
Arquivo de log do SQL Server está muito grande. O que fazer?
Todas as operações em um banco de dados são logadas no transaction log (arquivos .ldf).
Se elas nunca forem apagadas, o arquivo vai crescer até ocupar todo espaço disponível no disco.
Por isso, é necessário que, em algum momento, os registros antigos do log que não são mais necessários para uma recuperação do banco de dados sejam removidos para fazer espaço a novo log.
Este processo se chama truncar o log: truncate the log.
O SQL Server (incluindo o MSDE) trabalha em 3 modos na manutenção dos arquivos de log (recovery model):
- Simple Recovery: Neste modo, o log é truncado automaticamente a intervalos regulares. É o modo mais simples de administrar um BD, mas é o menos seguro. Se ocorrer algum problema, você terá que retornar o banco de dados ao estado em que estava no último backup.
- Full Recovery: Neste modo, tudo que é feito no BD é logado no arquivo de log (.LDF). Ocorrendo um problema nos arquivos de dados, você pode voltar o BD em determinado ponto no tempo. Como estes arquivos pode ser arquivos espelhados em discos diferentes, este modo oferece grande proteção em falhas. Mas o log deve ser truncado a cada backup geral.
- Bulk-Logged Recovery: É parecido com o Full Recovery, mas nem tudo é logado.
Como seu arquivo de log não para de crescer, você não deve estar no modo "Simple Recovery". Para verificar isto, uso o comando:
exec sp_dboption 'seuBD', 'trunc. log on chkpt.'
se estiver ON, é por quê estamos em "simple recovery". Se estiver 'off', estamos em 'full' ou 'bulk-logged' e você precisará fazer o truncate de alguma maneira.
para alterar o recovery model, use:
alter database seuDB set recovery full
ou
alter database seuDB set recovery simple
Se estiver em modo SIMPLE, o trucante ocorrerá automaticamente. Se estiver em modo FULL, use o seguinte comando para truncar o log:
backup log seuBD with truncate_only
O comando acima não faz backup, apenas trunca o log. O mais correto seria fazer um backup de LOG normal (em arquivo externo) já associado com o truncate.
Tudo isto, ainda não vai diminuir o tamanho do seu arquivo. Para fazer isto, use o comando:
DBCC SHRINKDATABASE (SeuDB)