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

10

Não consigo descobrir como diminuir o tamanho do arquivo ldf dos bancos de dados.

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

E enquanto isso parece ter sido executado corretamente no SQL Query Analyzer, o arquivo ldf ainda tem mais de 2 Gb.

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

Ron Tuffin
fonte
certamente esta é uma pergunta duplicada?
21410 JamesRyan
Procurei e encontrei apenas um que estava fazendo uma pergunta sobre quando o SHRINKFILE falha. Na época, não fazia sentido, então postei essa pergunta. Eu considerei excluir a pergunta, mas então imaginei que haverá outras que estão no mesmo barco. Se você encontrar uma pergunta duplicada (que realmente faz a mesma pergunta, não uma similar), será um prazer excluí-la.
Ron Tuffin
Existem cerca de 8 respostas na primeira página de uma pesquisa que a incluem, mas acho que você precisa saber o que está procurando. Eu o vejo tão regularmente como parte de uma resposta, fiquei surpreso por não ter sido solicitado de maneira tão direta.
21410 JamesRyan
A resposta depende muito da opção de recuperação do banco de dados: simples ou completa?
Richard
1
Obrigado por esclarecer, Ron. Como é um banco de dados de desenvolvimento, convém alterar o modelo de recuperação para SIMPLE, além de reduzir o arquivo de log, caso contrário, o problema será recorrente.
BradC

Respostas:

11

Oh, que horror! Pare de dizer às pessoas que elas devem reduzir seus arquivos de log!

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

  1. Seu banco de dados está no modo de recuperação total e realmente 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 completa e seus backups de log estão falhando por algum motivo
  4. Você está executando transações massivamente enormes que estão ampliando o arquivo de log em tamanhos enormes

A resposta para cada uma delas é a seguinte:

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

Observe que NENHUM deles exige o uso do "obsoleto)" log dbname de backup com truncate_only "

Em vez disso, depois de limpar o arquivo de log usando uma das técnicas acima, reduza 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, da próxima vez que for necessário, terá que levar tempo para crescer.

BradC
fonte
é uma pena que a resposta aceita seja tão rápida. Essa é uma das perguntas que eu uso para eliminar administradores de SQL durante as entrevistas. Se eles voltarem com o backup com truncate_only, isso conta como 2 golpes fora do bastão.
Jim B
2
Concordo que é a última coisa absoluta a fazer, reduza o arquivo. A manutenção correta evita a necessidade disso. Mas uma vez que seja grande e você o queira menor, será necessário reduzi-lo. No entanto, ao diminuir, é melhor reduzir o arquivo o menor possível e aumentar o tamanho do arquivo em incrementos de 8 GB. Isso otimizará o número de VLFs no arquivo. Consulte - sqlskills.com/BLOGS/KIMBERLY/post/… .
Brian Knight
1
Link interessante, parece que ele só se aplica se o seu log de transações tiver mais de 8 GB. Acho que o argumento de BradC (ou pelo menos o meu) é que sim, existem emergências que o levarão a reduzir seu arquivo de log, mas você deve reconhecer que se você executar o notório backup / w trunc, seguido pelo shrinkfile, você acabou de manejar sua cadeia de backup (espero que isso não tenha nada de importante), e além dos problemas de espaço em disco, é provável que você tenha alguns problemas sérios no servidor sql, provavelmente do ponto de vista do design do banco de dados ou do arquitetural. Sem consertar o problema subjacente, você adquiriu algum tempo na melhor das hipóteses.
Jim B
4

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

dbcc SHRINKFILE (logfilename,shrink_tosize)

por exemplo

dbcc SHRINKFILE (mydatabase_Log,512)
Mani
fonte
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ê.

Brian Knight
fonte