O SQL não reduzirá um arquivo de log mesmo que ele tenha 99% de espaço livre, fornecendo "todos os arquivos de log lógicos em uso"

4

Eu tenho um arquivo de log que cresceu para 32gig e preencheu meu disco rígido. Então eu fiz um backup de log de transação, e agora quando eu faço "DBCC SQLPERF (LOGSPACE)", diz que 99% do meu arquivo de log é o espaço vazio, que é ótimo:

DBCC SQLPERF ( LOGSPACE )
Database Name   Log Size (MB)   Log Space Used (%)  Status
abc             32140.02        0.3069714       0

Agora eu quero encolher o arquivo (deve ser apenas um par de megas !!!), então eu faço:

DBCC SHRINKFILE ( abc_log )

Nos resultados da consulta no SSMS, recebo o seguinte:

Results tab:
DbId    FileId  CurrentSize MinimumSize UsedPages   EstimatedPages
14  2   4113923 128 4113920 128

E na guia "Mensagens", esta pequena informação:

Cannot shrink log file 2 (abc_log) because all logical log files are in use.
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

O que está acontecendo?

    
por Chris 14.12.2009 / 05:10

5 respostas

2

Aguarde um momento de silêncio e faça um backup do log de transações e, em seguida, faça o encolhimento imediatamente.

    
por 14.12.2009 / 14:27
1

Você não mencionou sua versão do SQL Server. De acordo com "SQL Server Intenals" , "(em 7.0) ... Encolhimento físico pode ocorrer somente a partir do final do log, e a parte ativa nunca é encolhível. Para remediar esta situação, você tinha que inserir algumas transações fictícias depois de truncar o log para forçar a parte ativa do log a se mover para o início do arquivo ". A versão posterior deve fazer isso por você.

O encolhimento após meia hora pode ser apenas o auto-encolhimento (você acabou de ligar essa opção?). Isso acontece a cada 30 minutos.

    
por 14.12.2009 / 07:45
1

Sou um mau administrador de SQL e, normalmente, apenas mudo o banco de dados para o modelo de recuperação simples, reduzi-lo e alterá-lo de volta para Completo. Eu acho que isso não funcionaria em uma situação onde você está confiando em Full para o espelhamento.

    
por 09.02.2010 / 01:45
0

Isso é estranho, mas talvez houvesse alguma operação de DB acontecendo na época, mesmo que não houvesse "transação" ativa? Eu não sei bem o servidor SQL. Eu duvido que tenha algo a ver com o espaço livre, de qualquer forma.

Você pode ter mais sorte com perguntas como esta no serverfault.com do que no SU.

    
por 14.12.2009 / 06:22
0

Eu tenho um procedimento no meu site que faz exatamente isso.

Sempre que eu precisar.

    
por 09.02.2010 / 00:45

Tags