Eu tenho um banco de dados que tem um arquivo de dados de 350 MB (.mdf) e um arquivo de log de 4,9 GB (.ldf). O modelo de recuperação é definido como FULL
.
Quando tento reduzir o arquivo de log, ele não está diminuindo.
Eu sei que encolher um banco de dados não é bom e não deve ser feito. Mas ainda estou tentando fazer isso para reduzir o arquivo de log.
Quando eu corri
DBCC SQLPerf(logspace)
Descobri que o tamanho do log é de 4932 MB e o espaço de log usado é de 98,76% !
Então eu tentei este comando
USE <databasename>;
DBCC loginfo;
Agora, quase todos os VLFs são "status 2", o que significa que todos estão em uso.
Tentei fazer um backup de log e, em seguida, reduzir o arquivo de log. O encolhimento não reduziu o tamanho.
Mudei o modelo de recuperação para SIMPLE
e tentei diminuir novamente, mas isso também não ajudou.
Verifiquei se há transações abertas
DBCC opentran (database);
e descobri que nenhuma transação está aberta agora.
O que está me impedindo de reduzir o arquivo de log? Como posso resolver isso?
Aqui está a resposta à minha própria pergunta.
Execute a consulta abaixo para obter informações sobre a espera de reutilização do arquivo de log:
Obtive a seguinte saída:
Alguns objetos relacionados à replicação permaneceram no banco de dados, mesmo após a remoção da replicação.
Para remover a replicação do banco de dados,
sp_removedbreplication
pode ser usado. Mas não funcionou para nós, pois a replicação não estava ativa no momento e, na verdade, a replicação havia sido removida muito antes.A solução foi importar o conteúdo do banco de dados para outro banco de dados utilizando a opção de importação do SQL Server.
Leia Como reduzir o log do SQL Server para obter uma explicação de como a natureza circular do log pode impedir a redução após o truncamento. É possível que você registre o último ponto LSN do LSN em um VLF que esteja na cauda do LDF. Contra intuitivamente, você deve avançar o log, gerando gravações de log, para permitir que ele diminua.
As etapas para reduzir o log serão:
Faça backup do log de transações por meio de SSMS ou T-SQL e, em seguida, execute uma redução.
comandos para SSMS estão sob as tarefas se você clicar com o botão direito do mouse no nome do banco de dados.
Você provavelmente terá que fazer isso várias vezes.
Se houver uma transação ou trabalho bloqueando a ação, use o Monitor de atividade para identificar o processo e eliminá-lo ou use o monitor de atividade do trabalho do SQL Agent para encerrar o trabalho.
fonte: http://support.microsoft.com/kb/907511
Descobri que preciso realizar 2 ou 3 backups do banco de dados e do log de transações para que o log de transações realmente reduza o tamanho. Eu tenho um banco de dados que foi criado com o modelo de recuperação completa. Todas as noites ele executa backups do banco de dados e do log de transações, mas inevitavelmente o log de transações parece crescer continuamente ao longo de 2-3 semanas. Quando o espaço em disco restante chegar a 1 GB, verei que o log de transações tem cerca de 30 GB. Eu segui as etapas recomendadas pela Microsoft e, após a 4ª ou 5ª iteração de backup do banco de dados e do log de transações, o log de transações finalmente liberará seu espaço extra e diminuirá. Então eu volto e excluo os vários backups que criei.
Você precisa criar um backup primeiro, dependendo do modelo de backup configurado para o banco de dados, antes de poder reduzi-lo.
Você pode tentar executar isso:
Ou você pode fazer isso no SSMS e usar as ferramentas gráficas disponíveis (consulte aqui para obter detalhes: http://msdn.microsoft.com/en-us/library/ms187510.aspx )
Depois de fazer backup de seu banco de dados, você pode compactá-lo. No entanto, reduzir o banco de dados não é uma boa ideia, pois ocorrerá uma grande fragmentação do índice e a pesquisa de dados ficará lenta.
Espero que isto ajude.
Minha solução para a replicação que está bloqueando o arquivo de log de redução é:
No meu caso funcionou. Depois de trazer o banco de dados online, o log foi criado automaticamente e seu tamanho era de 512kb em vez de 70GB. Mas esta é apenas uma solução alternativa. O problema raiz não foi resolvido. No meu caso estamos usando replicação.