Qual é o comando para truncar um arquivo de log do SQL Server?


Respostas:


131

se bem me lembro ... no analisador de consultas ou equivalente:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
Definitivamente, é melhor do que definir o modelo de recuperação do banco de dados como SIMPLES (como na resposta de Blorgbeard), porque se o seu modelo de recuperação for COMPLETO, você o configurará dessa maneira por um motivo.
Scott Whitlock

52
truncate_only foi descontinuado no SQL Server 2008, portanto, é necessário alternar o banco de dados para a recuperação simples msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Justin Moore

10
Para o SQL Server 2012, isso funciona, mas sem WITH TRUNCATE_ONLY.
Net_prog

4
Adicionando o que net_prog disse, para o SQL Server 2012 substituí a primeira linha BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Aaron Newton #

'TRUNCATE_ONLY' não é uma opção reconhecida de BACKUP. (SQL Server 2019 RC1)
Tomasz Gandor

304

No estúdio de gerenciamento:

  • Não faça isso em um ambiente ativo, mas para garantir que você reduza seu banco de dados de desenvolvimento o máximo possível:
    • Clique com o botão direito do mouse no banco de dados, escolha e Properties, em seguida Options.
    • Verifique se "Modelo de recuperação" está definido como "Simples", não "Completo"
    • Clique OK
  • Clique com o botão direito do mouse no banco de dados novamente, escolha Tasks-> Shrink->Files
  • Mude o tipo de arquivo para "Log"
  • Clique OK.

Como alternativa, o SQL faz isso:

 ALTER DATABASE mydatabase SET RECOVERY SIMPLE
 DBCC SHRINKFILE (mydatabase_Log, 1)

Ref: http://msdn.microsoft.com/en-us/library/ms189493.aspx


1
Sua resposta acabou de salvar meu dia! Eu não conhecia a opção "clicar com o botão direito do mouse - Tarefas -> Diminuir". Obrigado!
René

7
O que você faz em um ambiente ao vivo? Faça backup dos logs primeiro?
John Bubriski

1
Não sou DBA, mas sim, acredito que o backup do log o
truncará

2
@JohnBubriski Se você estiver usando um modelo de recuperação que não seja simples, os logs serão a base para recuperar dados ou reverter transações. Portanto, na produção, você precisará primeiro fazer backup desses logs antes de poder reduzir os arquivos de log. Caso contrário, não haveria possibilidade de recuperação real. Infelizmente, se você estiver em uma situação de recuperação, precisará recarregar todos os backups do log de transações para recuperar totalmente o banco de dados. Tempos divertidos, com certeza! :)
define

1
no SQL Server 2012 eu tive que use mydatabaseantes de executardbcc shrinkfile
knb

62

Para o SQL Server 2008, o comando é:

ALTER DATABASE ExampleDB SET RECOVERY SIMPLE
DBCC SHRINKFILE('ExampleDB_log', 0, TRUNCATEONLY)
ALTER DATABASE ExampleDB SET RECOVERY FULL

Isso reduziu meu arquivo de log de 14 GB para 1 MB.


5
Como a pergunta é ambígua sobre qual versão e a resposta aceita não é aplicável ao SQL Server 2008, essa resposta ainda é válida independentemente da idade.
Lei James

Obrigado, ele me ajudou a reduzir um grande arquivo de log que não reagiram com DBCC SHRINKFILE
Christian Navelot

6
Não se esqueça de alterar o modelo de recuperação para COMPLETO quando terminar!
Dan Bechard

Você deve fazer backup antes de fazer isso (ou qualquer outra opção de truncamento). Se você fizer um backup completo e marcar o 'Copiar somente backup' no SSMS, não precisará mais do log. (Este é apenas um backup pontual).
Simon_Weaver

37

Para o SQL 2008, você pode fazer backup do log no nuldispositivo:

BACKUP LOG [databaseName]
TO DISK = 'nul:' WITH STATS = 10

E, em seguida, use DBCC SHRINKFILEpara truncar o arquivo de log.


2
Este é o único que acabou trabalhando na minha situação ... Eu tenho um erro ao tentar fazer backup de uso com TRUNCATE_ONLY
TomXP411

Nota: isso pode demorar um pouco, mesmo no SSD (ele precisa ler o log para poder descartá-lo). Para um arquivo de log de 30 GB em uma VM do Azure com energia moderada, são necessários 10 minutos para 40%. Certifique-se de mudar para a opção 'Mensagens' no SSMS para ver a porcentagem processada.
Simon_Weaver

3

log de backup logname com truncate_only seguido por um comando dbcc shrinkfile


0

Desde que a resposta para mim foi enterrada nos comentários. Para o SQL Server 2012 e além, você pode usar o seguinte:

BACKUP LOG Database TO DISK='NUL:'
DBCC SHRINKFILE (Database_Log, 1)

-5

Outra opção é desanexar o banco de dados via Management Studio. Em seguida, basta excluir o arquivo de log ou renomeá-lo e excluir posteriormente.

De volta ao Management Studio, anexe o banco de dados novamente. Na janela anexar, remova o arquivo de log da lista de arquivos.

O banco de dados anexa e cria um novo arquivo de log vazio. Depois de verificar se está tudo bem, você pode excluir o arquivo de log renomeado.

Você provavelmente não deve usar isso para bancos de dados de produção.


4
Nunca faça isso! Pode haver dados no log ainda não confirmados no arquivo de dados. Você perderia esses dados.
Paul

Se, em sua resposta, você avisar para não experimentar na produção, não vale a pena postar.
Stan Shaw

9
Não concordo com os que recusam - é uma opção. Os administradores precisam apenas entender seu cenário. Por exemplo - não haverá dados "não confirmados" se não houver transações abertas.
precisa

3
Esta é a única solução que funcionou para mim. Minha unidade estava cheia e eu não pude fazer backup ou encolher e nada mais parecia estar funcionando. Obrigado!
28717 Brian Brian

3
Concordo; não é uma prática recomendada, mas é uma ferramenta valiosa se você não tiver outras opções, como o cenário de Brian.
21818 ScottFoster1000
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.