Modello di recupero SEMPLICE o COMPLETO per database?


38

Quando dovrei usare il modello di recupero completo e quando dovrei usare il modello di recupero semplice per i database?

Ho sempre usato il modello di recupero completo perché è l'impostazione predefinita, ma oggi ho riscontrato questo errore:

Provider Microsoft OLE DB per SQL Server (0x80040E14) Il registro delle transazioni per il database "DATABASE NAME" è pieno. Per scoprire perché lo spazio nel registro non può essere riutilizzato, consultare la colonna log_reuse_wait_desc in sys.d Database

Il database specifico è in realtà uno dei database più piccoli e inattivi sul mio server, quindi non ho idea di come il registro possa essere pieno su questo database e non gli altri.

Per ridurre il registro e rendere nuovamente accessibile il database, ho modificato il modello di recupero da COMPLETO a SEMPLICE e ridotto il registro del file logico, con il seguente comando

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

Mi ha aiutato, ma ora ho bisogno di capire PERCHÉ ha aiutato, COME è iniziata questa situazione e COME prevenirla in futuro?

MODIFICARE:

Ogni sera all'una, eseguiamo un backup con script di ogni database sul server. Questo viene fatto da uno script di 31 righe in cui la parte più importante è

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

Il nuovo modello di recupero e databaseshrink saranno in conflitto con questo script?

Non stiamo eseguendo alcun altro tipo di backup dei database, e quindi non dei registri delle transazioni, dovremmo?


Una cosa degna di nota ora è che in questo momento questa non è una scelta in Azure SQL: usa sempre il recupero COMPLETO. azure.microsoft.com/en-us/blog/…
jocull

Risposte:


60

Quando dovrei usare il modello di recupero completo e quando dovrei usare il modello di recupero semplice per i database?

È necessario utilizzare il modello di recupero completo quando è necessario il ripristino temporizzato del database. È necessario utilizzare un modello di recupero semplice quando non è necessario il ripristino temporizzato del database e quando l'ultimo backup completo o differenziale è sufficiente come punto di ripristino. (Nota: esiste un altro modello di recupero, registrato in blocco. Per ulteriori informazioni sul modello di recupero registrato in blocco, consultare questo riferimento )

Provider Microsoft OLE DB per SQL Server (0x80040E14) Il registro delle transazioni per il database "DATABASE NAME" è pieno. Per scoprire perché lo spazio nel registro non può essere riutilizzato, consultare la colonna log_reuse_wait_desc in sys.d Database

Il motivo per cui hai riscontrato quell'errore (molto probabilmente) è perché non hai eseguito il backup del registro delle transazioni. Quando non viene eseguito il backup, continuerà a crescere fisicamente il file di registro delle transazioni (a condizione che l'autogrowth sia abilitato e maxsize lo consenta) perché non può riutilizzare nessuna delle "porzioni" del registro delle transazioni (file di registro virtuali). Può solo contrassegnare quei VLF per il riutilizzo e consentire la natura "avvolgente" del registro delle transazioni quando si esegue un backup del registro delle transazioni (e alcuni altri requisiti, come nessuna transazione attiva, alcuni aspetti della replica, ecc.).

Per ridurre il registro e rendere nuovamente accessibile il database, ho modificato il modello di recupero da COMPLETO a SEMPLICE e ridotto il registro del file logico, con il seguente comando

......

Mi ha aiutato, ma ora ho bisogno di capire PERCHÉ ha aiutato, COME è iniziata questa situazione e COME prevenirla in futuro?

Questo ti ha aiutato perché impostando il database sul modello di recupero semplice hai detto a SQL Server che non ti interessa più il recupero temporizzato e il requisito di garantire che i file di registro virtuali non debbano più essere conservati e contrassegnati come attivi, ora un processo di checkpoint contrassegna questi VLF come inattivi.

Estratto / preventivo tratto da questo riferimento MSDN :

Nel modello di recupero semplice, a meno che alcuni fattori non ritardino il troncamento del registro, un checkpoint automatico tronca la sezione inutilizzata del registro delle transazioni. Al contrario, con i modelli di recupero completo e con registrazione di massa, una volta stabilita una catena di backup del registro, i checkpoint automatici non causano il troncamento del registro.

Quindi è stato ridotto un file di database fisico e poiché ora c'era spazio libero nel registro delle transazioni, è stato in grado di ridurre fisicamente il file NTFS.

Vale la pena leggere un po 'di tempo su:

  1. Modelli di recupero
  2. Gestione dei registri delle transazioni (Gail Shaw)
  3. Fattori che possono ritardare il troncamento del registro

MODIFICA dopo la modifica :

Il nuovo modello di recupero e databaseshrink saranno in conflitto con questo script?

Tale BACKUP DATABASEcomando funzionerà con entrambi i modelli di recupero. Per quanto riguarda la riduzione del database di routine ... NON FARLO !!!! Seriamente, ridimensiona il database di conseguenza e, se utilizzi il modello di recupero completo, assicurati di eseguire file di registro delle transazioni frequenti e di routine, non solo per tenere a bada le dimensioni del registro delle transazioni ma anche per soddisfare gli oggetti del punto di ripristino.

Non stiamo eseguendo alcun altro tipo di backup dei database, e quindi non dei registri delle transazioni, dovremmo?

Se il tuo database utilizza il modello di recupero completo, quindi sì, dovresti eseguire backup del registro delle transazioni. Se il database si trova in un semplice ripristino, non è possibile eseguire fisicamente un backup del registro delle transazioni.

Per quanto riguarda quale modello di recupero utilizzare (semplice o completo), non possiamo prendere questa decisione per te. Solo tu, il tuo team aziendale e i tuoi SLA puoi farlo.


È inoltre possibile aggiungere che se si utilizza il mirroring del database, è necessario utilizzare il modello di recupero completo poiché utilizza il file di registro per mantenere aggiornato il mirror.
Holger,

Questa è stata una risposta eccellente . L'unica parte che non capisco è "incontrare anche gli oggetti del punto di ripristino". Ti dispiacerebbe chiarire quella frase? In primo luogo ho pensato che tu avessi intenzione di scrivere "obiettivi", ma non ne sarei certo.
Anthony G - giustizia per Monica,
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.