Existe alguma maneira de notificar o DBA proativamente quando o truncamento do log de transações foi enfileirado várias vezes, mas por algum motivo (pode ser uma transação aberta, replicação, backup completo em execução no momento) falhou ao truncar o log.
Considerando um cenário em que o aplicativo cliente inicia uma transação usando BEGIN TRAN e executa uma grande atualização, ele falha em adquirir os bloqueios necessários durante o tempo definido (pois outra transação estava bloqueando) e atinge o tempo limite (em .net commandtimeout é definido como padrão 30 segundos e nenhum tratamento de erro no aplicativo cliente) e deixar uma transação aberta no servidor SQL que, por sua vez, evita o truncamento do log. Agora, toda vez que o backup de log é executado, ele não pode truncar o log porque você tem uma transação aberta (hosed). Admito que podemos assinar o evento de crescimento de log de várias maneiras, mas gostaria de saber se há algo embutido no servidor SQL que notifica quando o truncamento de log foi enfileirado várias vezes, mas falhou em truncá-lo.
Eu abordaria isso de uma maneira diferente e monitoraria as transações de longa duração. Você pode consultar transações abertas usando os DMVs ( sys.dm_tran_active_transactions deve mostrá-lo). Aqui está uma consulta (emprestada e modificada de Gail Shaw ) que mostrará as transações em execução no momento:
A partir daqui, eu configuraria um trabalho de pesquisa contra os DMVs e me alertaria se uma transação fosse mantida aberta por mais tempo do que um período de tempo aceitável. Qual é essa quantidade de tempo dependerá do seu ambiente.
Acho que prefiro usar a notificação de crescimento automático usando o evento de notificação sempre que o log de transações aumenta para garantir que seja causado por uma transação aberta.