Qual è il comando per troncare un file di registro di SQL Server?


193

Devo svuotare un file LDF prima di inviarlo a un collega. Come posso forzare SQL Server a troncare il registro?

Risposte:


130

se ricordo bene ... nell'analizzatore di query o equivalente:

BACKUP LOG  databasename  WITH TRUNCATE_ONLY

DBCC SHRINKFILE (  databasename_Log, 1)

2
Questo è decisamente meglio che impostare il modello di recupero del database su SEMPLICE (come nella risposta di Blorgbeard) perché se il modello di recupero è COMPLETO, è stato impostato in quel modo per un motivo.
Scott Whitlock,

53
truncate_only è obsoleto in SQL Server 2008, quindi è necessario passare da db a ripristino semplice msdn.microsoft.com/en-us/library/ms143729(SQL.90).aspx
Justin Moore,

10
Per SQL Server 2012 funziona, ma senza WITH TRUNCATE_ONLY.
net_prog,

4
In aggiunta a ciò che ha detto net_prog, per SQL Server 2012 ho sostituito la prima riga BACKUP LOG DatabaseNameHere TO DISK='NUL:'.
Aaron Newton,

'TRUNCATE_ONLY' non è un'opzione BACKUP riconosciuta. (SQL Server 2019 RC1)
Tomasz Gandor,

305

In management management:

  • Non farlo in un ambiente live, ma per assicurarti di ridurre il più possibile il tuo sviluppatore db:
    • Fare clic con il tasto destro del mouse sul database, selezionare Properties, quindi Options.
    • Assicurati che "Modello di recupero" sia impostato su "Semplice", non "Completo"
    • Clicca OK
  • Fare nuovamente clic con il tasto destro del mouse sul database, scegliere Tasks-> Shrink->Files
  • Cambia il tipo di file in "Log"
  • Clicca OK.

In alternativa, l'SQL per farlo:

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

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


1
La tua risposta mi ha appena salvato la giornata! Non sapevo dell'opzione "tasto destro del mouse - Attività -> Riduci". Grazie!
René,

7
Cosa fai in un ambiente dal vivo? Eseguire prima il backup dei registri?
John Bubriski

1
Non sono un DBA, ma sì, credo che il backup del registro lo
troncerà

2
@JohnBubriski Se si utilizza un modello di recupero diverso da quello semplice, i registri sono la base per il recupero dei dati o il rollback delle transazioni. Pertanto, in produzione, è necessario eseguire il backup di questi registri prima di poter ridurre i file di registro. Altrimenti, non ci sarebbe alcuna reale possibilità di recupero. Sfortunatamente, se ti trovi in ​​una situazione di recupero, dovrai ricaricare tutti i backup del registro delle transazioni per ripristinare completamente il DB. Tempi divertenti, per essere sicuri! :)
definisce il

1
in SQL Server 2012 ho dovuto use mydatabaseprima di eseguiredbcc shrinkfile
knb

62

Per SQL Server 2008, il comando è:

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

Ciò ha ridotto il mio file di registro da 14 GB fino a 1 MB.


5
Poiché la domanda è ambigua su quale versione e la risposta accettata non è applicabile a SQL Server 2008, questa risposta è ancora valida indipendentemente dall'età.
James Law,

Grazie, mi ha aiutato a ridurre un grosso file di registro che non ha reagito con DBCC SHRINKFILE
Christian Navelot,

6
Non dimenticare di cambiare il modello di recupero in PIENO quando hai finito!
Dan Bechard,

È necessario eseguire il backup prima di eseguire questa operazione (o una qualsiasi delle altre opzioni di troncamento). Se si esegue un backup completo e si seleziona "Copia solo backup" in SSMS, non è più necessario il registro. (Questo è solo un backup temporizzato).
Simon_Weaver,

37

Per SQL 2008 è possibile eseguire il backup del registro sul nuldispositivo:

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

Quindi utilizzare DBCC SHRINKFILEper troncare il file di registro.


2
Questo è l'unico che ha finito per funzionare nella mia situazione ... Ho avuto un errore durante il tentativo di utilizzare il backup con TRUNCATE_ONLY
TomXP411

Nota: questo può richiedere del tempo, anche su SSD (deve essere in grado di leggere il registro per essere in grado di scartarlo). Per un file di registro da 30 GB in una macchina virtuale di Azure con alimentazione moderata sono necessari 10 minuti per ottenere il 40%. Assicurati di passare al take "Messaggi" in SSMS per vedere la percentuale elaborata.
Simon_Weaver,

3

log log di backup con truncate_only seguito da un comando dbcc shrinkfile


0

Dal momento che la risposta per me è stata sepolta nei commenti. Per SQL Server 2012 e versioni successive, è possibile utilizzare quanto segue:

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

-5

Un'altra opzione è quella di staccare il database tramite Management Studio. Quindi eliminare semplicemente il file di registro o rinominarlo ed eliminarlo in un secondo momento.

Di nuovo in Management Studio collegare nuovamente il database. Nella finestra allegare rimuovere il file di registro dall'elenco dei file.

Il DB si allega e crea un nuovo file di registro vuoto. Dopo aver verificato che tutto sia a posto, è possibile eliminare il file di registro rinominato.

Probabilmente non dovresti usarlo per i database di produzione.


4
Non farlo mai! Nel registro possono essere presenti dati non ancora impegnati nel file di dati. Perderesti tali dati.
Paul,

Se, nella tua risposta, avverti di non provarlo in produzione, non vale la pena pubblicarlo.
Stan Shaw,

9
Non sono d'accordo con i downvoter - è un'opzione. Gli amministratori devono solo capire il loro scenario. Ad esempio: non ci saranno dati "non impegnati" se non ci sono transazioni aperte.
Gerard ONeill,

3
Questa è l'unica soluzione che ha funzionato per me. Il mio disco era pieno e non potevo fare il backup o ridursi e nient'altro sembrava funzionare. Grazie!
Brian

3
Sono d'accordo; non è una buona pratica ma è uno strumento prezioso se non hai altre opzioni come lo scenario di Brian.
ScottFoster1000,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.