Encolher o arquivo de log não reduz o tamanho

23

Eu tenho um banco de dados que possui um arquivo de dados de 350 MB (.mdf) e um arquivo de log de 4,9 GB (.ldf). O modelo de recuperação está definido como FULL.

Quando tento reduzir o arquivo de log, ele não está diminuindo.

Eu sei que reduzir 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 é 4932 MB e o espaço usado é 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.

Eu tentei fazer um backup de log e encolher o arquivo de log. Encolher não reduziu o tamanho.

Mudei o modelo de recuperação para SIMPLEe tentei diminuir novamente, mas isso também não ajudou.

Eu verifiquei as transações abertas

DBCC opentran (database);

e descobriu que nenhuma transação está aberta agora.

O que está me impedindo de diminuir o arquivo de log? Como posso resolver isso?

Navaneet
fonte

Respostas:

12

Aqui está a resposta para minha própria pergunta.

Execute a consulta abaixo para obter informações sobre a espera de reutilização do arquivo de log:

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = 'DBName'

Eu tenho a seguinte saída:

log_reuse_wait_desc
-------------------
REPLICATION 

Havia alguns objetos relacionados à replicação restantes no banco de dados, mesmo após a remoção da replicação.

Para remover a replicação do banco de dados, sp_removedbreplicationpode 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 usando a opção de importação do SQL Server.

Navaneet
fonte
Eu tive o mesmo problema e usei isso para ver que havia uma transação ativa no banco de dados. log_reuse_wait_descdeu ACTIVE_TRANSACTION. Assim que a transação foi concluída, o psiquiatra funcionou bem.
squillman
10

As etapas para reduzir o log serão

Faça log de transação de backup por SSMS ou T-SQL e 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

BACKUP LOG <Databasename> TO DISK N'<path\database_log.ldf';
GO

DBCC SHRINKFILE (<FileName>, <TargetSize>) WITH NO_INFOMSGS

Você provavelmente terá que fazer isso várias vezes

Se houver uma transação ou trabalho bloqueando a ação, use o Monitor de atividades para identificar e eliminá-lo, ou use o monitor de atividades do SQL Agent para finalizar o trabalho.

fonte: http://support.microsoft.com/kb/907511

Cougar9000
fonte
Mas problema que encontrei é different.Please ver minha resposta abaixo
Navaneet
Fico feliz em saber que você conseguiu descobrir, obrigado pela atualização!
precisa saber é o seguinte
Sintaxe incorreta - um sinal de igual está ausente: BACKUP LOG <Databasename> TO DISK = N '<caminho \ database_log.ldf';
Reversed Engineer
9

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 de LSN em um VLF que esteja na cauda do LDF. Contador intuitivamente, você deve avançar o log, gerando gravações de log, para permitir que ele diminua.

Remus Rusanu
fonte
0

Você precisa criar um backup primeiro, dependente do modelo de backup configurado para o banco de dados antes de poder reduzir o banco de dados.

Você pode tentar executar isso:

USE <databasename>
GO

BACKUP DATABASE <databasename> TO DISK '<absolute path goes here>\<databasename>.bak';
GO

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 do seu banco de dados, você pode compactá-lo. No entanto, diminuir o banco de dados não é uma boa ideia, pois ocorrerá uma fragmentação intensa do índice e a pesquisa de dados ficará lenta.

Espero que isto ajude.

Toni Kostelac
fonte
Eu sei como fazer backup e truncar o log e reduzir o tamanho do arquivo de log. Se você está procurando por uma solução para problemas com o banco de dados do banco de dados, por favor, entre em contato com o administrador do banco de dados do banco de dados do banco de dados do banco de dados do banco de dados do banco de dados. Então, como remover a replicação deste banco de dados que é mostrada no reuso de log wait_desc?
Navaneet
Qual versão do SQL Server você está usando?
Toni Kostelac
A replicação pode ser definida como um trabalho, portanto, abra a pasta SQL Server Agent e expanda a pasta Trabalhos, verifique se há um trabalho de replicação configurado e, se houver, desative-o clicando com o botão direito do mouse e selecionando Parar trabalho
Toni Kostelac
Se você estiver usando o SQL Server 2005 e acima, o sp_removedbreplication 'DB_NAME' removerá a replicação. Para o servidor SQL 2000 .. referem-se a blogs.msdn.com/b/repltalk/archive/2010/11/17/...
Kin Shah
Mas problema que encontrei é different.Please ver a minha resposta
Navaneet
0

Descobri que preciso executar 2 ou 3 backups do banco de dados e do log de transações para que o log de transações reduza de tamanho. Eu tenho um banco de dados que foi criado com o modelo de recuperação total. Todas as noites, ele realiza backups do banco de dados e do log de transações, mas inevitavelmente o log de transações parece crescer continuamente ao longo de duas a três semanas. Quando o espaço em disco restante chegar a 1 GB, verei que o log de transações é de aproximadamente 30 GB. Segui as etapas recomendadas pela Microsoft e após a quarta ou quinta 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á. Depois volto e apago os vários backups que criei.

SQL King
fonte
Eu acho que você está fazendo algo errado. Se você fizer o backup do log corretamente, o log não utilizado deverá ser truncado. Os comandos dados na minha pergunta podem ajudá-lo a resolver o problema.
Navaneet
-8

Minha solução para a replicação que está bloqueando o arquivo de log reduzido é:

  1. Defina o modelo de recuperação de banco de dados como simples
  2. Coloque o DB offline
  3. Crie backup do arquivo de log (apenas no caso)
  4. Excluir arquivo de log
  5. Colocar o DB online

No meu caso, funcionou. Depois de trazer o DB online, o log foi criado automaticamente e seu tamanho era de 512kb em vez de 70GB. Mas isso é apenas uma solução alternativa. O problema raiz não foi resolvido. No meu caso, estamos usando replicação.

mecool
fonte
4
Isso é terrível conselho, não excluir o log de transações, todos os tipos de problemas pode vir a partir deste como a corrupção
Tom V - Team Monica