Come posso ridurre le dimensioni di un file di registro di SQL Server


10

Non riesco a capire come ridurre le dimensioni del file ldf del database.

Il DBA dice che dovrei usare backup log dbname with truncate_only

E mentre sembra che sia stato eseguito correttamente in SQL Query Analyzer, il file ldf è ancora superiore a 2 GB.

** Chiarimento basato su alcuni commenti e alcune risposte di seguito. *** Il database specifico in questione è un database sul mio laptop e lo uso solo per i processi di sviluppo. Il file di registro stava crescendo a un punto in cui sembrava che causasse un disco intero. Non vi è alcun rischio di produzione. Comprendo che il metodo nella domanda che ho posto e la risposta che ho accettato sono rischiosi in un ambiente di produzione. *


sicuramente questa è una domanda duplicata?
JamesRyan,

Ho cercato e trovato solo uno che faceva una domanda su quando SHRINKFILE fallisce. All'epoca non aveva senso, quindi ho pubblicato questa domanda. Ho preso in considerazione l'idea di eliminare la domanda, ma poi ho pensato che ce ne fossero altri nella stessa barca. Se riesci a trovare una domanda duplicata (che in realtà pone la stessa domanda, non una simile), sarò felice di eliminarla.
Ron Tuffin,

Ci sono circa 8 risposte nella prima pagina di una ricerca che la includono ma immagino che tu debba sapere cosa stai cercando. Lo vedo così regolarmente come parte di una risposta, sono rimasto sorpreso dal fatto che non è stato chiesto in modo così diretto.
JamesRyan,

La risposta dipende molto dall'opzione di recupero del database: semplice o completa?
Richard,

1
Grazie per il chiarimento, Ron. Dal momento che è un database di sviluppo, ti consigliamo di modificare il modello di recupero in SEMPLICE oltre a ridurre il file di registro, altrimenti il ​​problema si ripresenterà.
BradC

Risposte:


11

Oh, l'orrore! Per favore, smetti di dire alle persone che dovrebbero ridurre i loro file di registro!

Se ti sei trovato in questa situazione, è estremamente probabile che uno dei seguenti casi:

  1. Il database è in modalità di recupero completo e dovrebbe essere in modalità semplice
  2. Il database è in modalità di ripristino completo e si dovrebbero eseguire backup regolari del registro
  3. Il database è in modalità di ripristino completo e i backup del registro non riescono per qualche motivo
  4. Stai eseguendo enormi transazioni che stanno espandendo il file di registro fino a dimensioni enormi

La risposta per ciascuno di questi è la seguente:

If (1), quindi passare al database in modalità semplice
If (2), quindi pianificare backup regolari del registro
If (3), quindi correggere i backup del registro pianificati
If (4), quindi non farlo :) Invece, fallo lavorare in lotti più piccoli.

Si noti che NESSUNO di questi richiede l'uso del "deprecato" "dbname di backup con truncate_only"

Invece, una volta cancellato il file di registro utilizzando una delle tecniche di cui sopra, quindi ridurre il registro (ora vuoto) con:

DBCC SHRINKFILE ('log logical name', 2000)

Specifica sempre una dimensione finale ragionevole, altrimenti si ridurrà a quasi 0, e la prossima volta che sarà necessario, ci vorrà del tempo per crescere.


è un peccato che la risposta accettata sia stata così rapida. Questa è una delle domande che utilizzo per eliminare gli amministratori SQL durante le interviste. Se tornano con il backup con truncate_only che conta come 2 colpi fuori dal pipistrello.
Jim B,

2
Sono d'accordo che è l'ultima cosa da fare assolutamente, ridurre il file. Una corretta manutenzione evita la necessità di questo. Ma una volta che è grande e lo vuoi più piccolo, devi ridurlo. Tuttavia, quando si riduce, è meglio ridurre il file il più piccolo possibile, quindi aumentare il file alla dimensione corretta con incrementi di 8 GB. Ciò ottimizzerà il numero di VLF nel file. Vedi - sqlskills.com/BLOGS/KIMBERLY/post/… .
Brian Knight,

1
Collegamento interessante, sembra che si applichi solo se il tuo registro di trans è superiore a 8 GB. Penso che il punto di BradC (o almeno il mio) sia che sì, ci sono emergenze che ti incanteranno per ridurre il tuo file di log, ma dovresti riconoscere che se esegui il famigerato backup / w trunc, seguito da shrinkfile hai appena nascosto la tua catena di backup (spero che non fosse nulla di importante) e, a parte i problemi di spazio su disco, è molto probabile che si siano verificati seri problemi con il server sql, probabilmente dal punto di vista della progettazione di un database o di uno architettonico. Senza risolvere il problema sottostante ti sei guadagnato un po 'di tempo.
Jim B,

4

dopo aver eseguito il "backup con truncate_only" dovresti emettere il seguente comando per ridurlo

dbcc SHRINKFILE (logfilename,shrink_tosize)

per esempio

dbcc SHRINKFILE (mydatabase_Log,512)

3

Lo script che hai scritto sopra contrassegnerà il contenuto del registro per il riutilizzo. Segui quello script con:

USE <database>;

DBCC SHRINKFILE (<log logical file name>)

Questo lo ridurrà per te.

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.