Tenho um processo demorado que mantém uma transação aberta por toda a duração.
Não tenho controle sobre a maneira como isso é executado.
Como uma transação é mantida aberta por toda a duração, quando o log de transações é preenchido, o SQL Server não pode aumentar o tamanho do arquivo de log.
Portanto, o processo falha com o erro "The transaction log for database 'xxx' is full"
.
Tentei evitar isso aumentando o tamanho do arquivo de log de transações nas propriedades do banco de dados, mas recebo o mesmo erro.
Não tenho certeza do que devo tentar a seguir. O processo dura várias horas, por isso não é fácil jogar por tentativa e erro.
Alguma ideia?
Se alguém estiver interessado, o processo é uma importação de organização em Microsoft Dynamics CRM 4.0.
Há bastante espaço em disco, temos o log no modo de registro simples e fizemos o backup do log antes de iniciar o processo.
- = - = - = - = - ATUALIZAÇÃO - = - = - = - = -
Obrigado a todos pelos comentários até agora. O seguinte é o que me levou a acreditar que o log não cresceria devido à transação aberta:
Eu estou recebendo o seguinte erro...
Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
Seguindo esse conselho, fui para " log_reuse_wait_desc column in sys.databases
" e ele continha o valor " ACTIVE_TRANSACTION
".
De acordo com a Microsoft: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
Isso significa o seguinte:
Uma transação está ativa (todos os modelos de recuperação). • Uma transação de longa duração pode existir no início do backup de log. Nesse caso, a liberação de espaço pode exigir outro backup de log. Para obter mais informações, consulte "Transações ativas de longa duração", posteriormente neste tópico.
• Uma transação é adiada (SQL Server 2005 Enterprise Edition e versões posteriores apenas). Uma transação adiada é efetivamente uma transação ativa cujo rollback está bloqueado devido a algum recurso indisponível. Para obter informações sobre as causas das transações adiadas e como retirá-las do estado adiado, consulte Transações adiadas.
Eu não entendi alguma coisa?
- = - = - = - ATUALIZAÇÃO 2 - = - = - = -
Acabei de iniciar o processo com o tamanho do arquivo de log inicial definido para 30 GB. Isso levará algumas horas para ser concluído.
- = - = - = - ATUALIZAÇÃO Final - = - = - = -
O problema era realmente causado pelo arquivo de log consumindo todo o espaço disponível em disco. Na última tentativa, liberei 120 GB e ainda usei tudo e acabou falhando.
Não percebi que isso estava acontecendo antes porque, quando o processo estava em execução durante a noite, ele voltava em caso de falha. Desta vez, consegui verificar o tamanho do arquivo de log antes do rollback.
Obrigado a todos por sua contribuição.