quarta-feira, 7 de abril de 2010

The transaction log for database is full.

Erro: Ao tentar utilizar uma aplicação com a base de dados em SQL Server 2005, o usuário encontrava o seguinte erro: The transaction log for database ‘MyBase’ is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases

 

Código do erro: 9002

Severity: 17

State: 2

 

No SQL Server 7.0, no SQL Server 2000 e no SQL Server 2005, marcando a configuração de crescimento automático, arquivos de log podem crescer automaticamente. Apesar do tamanho do LOG estabilizar depois de um período inicial de crescimento, em algumas situações o log pode se tornar muito grande atingindo o espaço em disco disponível. O log pode crescer inesperadamente devido a diversas questões, entre elas:

 

·         Transações não comitadas

·         Transações estremante grandes

·         Operações como DBCC REINDEX ou CREATE INDEX

·         Restore a partir de logs de transação

 

Normalmente, você receberá a seguinte mensagem de erro quando o transaction log atingir o espaço em disco disponível e não é possível expandir mais:

 

The log file for database '%.*ls' is full.

 

Se você estiver usando o SQL Server 2005 ou 2008,  a mensagem é a mesma que mostrada no início do post.

 

Solução: Como esta base era utilizada apenas para homologação, resolvi rapidamente truncando o log com o comando BACKUP LOG ‘MyBase’ WITH TRUNCATE_ONLY

 

Apesar desta solução resolver o problema, é necessário entender que truncar o log, quebra o LOG CHAIN, portanto uma vez que isto é feito, não é mais possível efetuar backup dos logs até que se faça um full ou diif backup da base. Case um backup do log seja tentado, a seguinte mensagem poderá ocorrer:

 

Msg 4214, Level 16, State 1, Line 1

BACKUP LOG cannot be performed because there is no current database backup.

Msg 3013, Level 16, State 1, Line 1

BACKUP LOG is terminating abnormally.

 

Até a próxima!

 

Nenhum comentário:

Postar um comentário

Leave your comment here!