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

192

Preciso esvaziar um arquivo LDF antes de enviar para um colega. Como forçar o SQL Server a truncar o log?

Aidan Ryan
fonte

Respostas:

131

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

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)
ila
fonte
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

Blorgbeard está fora
fonte
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.

Nathan R
fonte
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.

Matej
fonte
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

SQLMenace
fonte
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)
rip747
fonte
-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.

Rask
fonte
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