Transaction Log cheio? E agora?

Pessoal,

Um problema que aconteceu comigo esses dias e gostaria de compartilhar com vocês. Em uma manha recebi a seguinte mensagem:
Msg 9002, Level 17, State 2, Line 3
The transaction log for database ‘MCITP’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

Como o próprio erro diz:  O Log de transações da base de dados MCITP esta cheio e não poderá ser reutilizado.
A causa do problema pode ser:

1)  O arquivo de log foi configurado com um tamanho maximo e com isso o arquivo chegou em seu limite maximo e nao conseguiu mais crescer.

2) O arquivo de log nao tem um tamanho maximo, porem nao existe mais espaço em disco.

Como podemos resolver esse problema.

1) Onde esta o arquivo do log e qual seu tamanho maximo, qual o tamanho atual e a proporção de crescimento?
R: select msf.name,physical_name, db.recovery_model_desc,(max_size * 8 /1024) as MaxSizeMB,
(size * 8 /1024) as SizeMB, growth
from sys.master_files as msf
join sys.databases as db
on msf.database_id = db.database_id
where msf.name = ‘MCITP_LOG’


Temos o caminho.

2) Vamos analisar o espaço em disco?
R: exec master..xp_fixeddrives

C	5064
D	6060

Ai ja conseguimos ver qual é o problema. No nosso caso aqui temos um problema é o arquivo de log configurado um tamanho maximo, como o fator de crescimento esta para 20%, o proximo tamanho que o arquivo de log teria seria de 258MB o que ultrapassaria o tamanho maximo de 220MB, por isso o SQL Server nao conseguiu mais crescer o arquivo de log.

Solução.

Aqui temos algumas alternativas.

1) Realizar um backup desse log, e sempre cuidar para manter o backup do log sendo realizado periodicamente.

2) Caso a base de dados nao for importante, realize primeiro um backup desse log e depois passe o modo de recovery para SIMPLE, assim periodicamente o SQL Server se encarrega de manter esse arquivo pequeno, ja que pouquissimas informações serão logadas.

3) Isso nao seria uma alternativa viavel, mas poderiamos ainda realizar um shrink no log, mas eu nao recomendo isso de maneira nenhuma. Se você chega ao ponto de truncar o log, o modo de recovery FULL com certeza não é necessario para você.

4) Você pode verificar também se sua base de dados realmente está no Full Recovery Model e garantir que o transaction log irá se comportar corretamente.

Bom pessoal por hoje é isso, espero que isso seja util para vocês.

Marcos Freccia
MCTS SQL Server 2008
@SQLFreccia

Sobre Marcos Freccia

MVP em SQL Server (Data Plataform) , especialista em SQL Server, e atualmente trabalhando com Microsoft Azure!

Publicado em junho 13, 2011, em Administração, VirtualPass e marcado como , , , , , , . Adicione o link aos favoritos. 3 Comentários.

  1. Marcos,

    Comigo esta acontecendo algo semelhante, porem tenho espaço em disco meu arquivo de log esta vazio também, porem continua apresentando a mensagem:

    Msg 9002, Level 17, State 4, Line 1
    The transaction log for database ‘tempdb’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

    Sempre que rodo uma query, query esta que rodava ate hoje de manha.

    existe algo que eu possa fazer?

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: