Truncando arquivos de log do SQL Server
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)
