Como reduzo o tamanho de um arquivo de log do SQL Server

10

Não consigo descobrir como reduzir o tamanho do arquivo ldf do banco de dados.

O DBA diz que eu deveria usar backup log dbname with truncate_only

E, embora isso pareça executado corretamente no SQL Query Analyzer, o arquivo ldf ainda tem mais de 2 Gb.

** Esclarecimento com base em alguns comentários e algumas respostas abaixo. *** O banco de dados específico em questão é um banco de dados no meu laptop e eu o uso apenas para processos de desenvolvimento. O arquivo de log estava crescendo a ponto de causar um disco cheio. Não há risco de produção envolvido. Eu entendo que o método na pergunta que fiz e a resposta que aceitei são arriscados em um ambiente de produção. *

    
por Ron Tuffin 24.02.2010 / 15:01

3 respostas

11

Oh, o horror! Por favor, pare de dizer às pessoas que elas deveriam encolher seus arquivos de registro!

Se você se meteu nessa situação, um dos seguintes casos é extremamente provável:

  1. Seu banco de dados está no modo de recuperação completa e deve estar no modo simples
  2. Seu banco de dados está no modo de recuperação completa e você deve fazer backups regulares de log
  3. Seu banco de dados está no modo de recuperação total e seus backups de log estão falhando por algum motivo
  4. Você está executando imensas transações enormes que estão transformando o arquivo de log em tamanhos enormes

A resposta para cada um deles é a seguinte:

Se (1), mude o banco de dados para o modo simples | Se (2), agende backups de log regulares
Se (3), corrija seus backups de log planejados
Se (4), então não faça isso :) Em vez disso, trabalhe em lotes menores.

Note que NENHUM destes requer o uso do (obsoleto) "dbname do log de backup com truncate_only"

Em vez disso, quando você limpar o arquivo de log usando uma das técnicas acima, encolha o log (agora vazio) com:

DBCC SHRINKFILE ('log logical name', 2000)

Sempre especifique um tamanho final razoável, caso contrário, ele diminuirá para quase 0 e, na próxima vez em que for necessário, terá que aumentar o tempo para crescer.

    
por 24.02.2010 / 17:15
4

depois de fazer o "backup com truncate_only" você deve emitir o seguinte comando para encolher

dbcc SHRINKFILE (logfilename,shrink_tosize)

por exemplo

dbcc SHRINKFILE (mydatabase_Log,512)
    
por 24.02.2010 / 15:07
3

O script que você escreveu acima marcará o conteúdo do log para reutilização. Siga esse script com:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Isso vai diminuir para você.

    
por 24.02.2010 / 15:09