2012-11-16 25 views
22

Il log delle transazioni per il database '' è pieno. Per scoprire perché lo spazio nel registro non può essere riutilizzato, consultare la colonna log_reuse_wait_desc in sys.databases. Per favore aiutami a risolvere questo problema. Grazie in anticipo.Il log delle transazioni per il database 'database' è pieno.

+4

Hai seguito il consiglio nel messaggio di errore? Cosa hai trovato lì? Che ricerca hai fatto a questo punto? –

+0

Non esiste effettivamente alcun nome di database nel messaggio? – egrunin

+1

Prova MSDN: [Un log delle transazioni cresce in modo imprevisto o diventa pieno in SQL Server] (http://support.microsoft.com/kb/317375) Ha una spiegazione abbastanza completa del problema. – egrunin

risposta

16

La risposta più probabile è che dovete eseguire backup del log o v'è un aperta transazione.

Ecco un po 'di più per aiutarvi ...

eseguire questo script sul server:

-- last FULL backup 
;with FULLBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last FULL Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where b.type = 'D' 
    group by d.name 
), 

-- last LOG backup for FULL and BULK_LOGGED databases 
LOGBUs 
as (
    select d.name, max(b.backup_finish_date) as 'Last LOG Backup' 
    from sys.databases d 
     join msdb.dbo.backupset b 
      on d.name = b.database_name 
    where d.recovery_model_desc <> 'SIMPLE' 
     and b.type = 'L' 
    group by d.name 
) 

-- general overview of databases, recovery model, and what is filling the log, last FULL, last LOG 
select d.name, d.state_desc, d.recovery_model_desc, d.log_reuse_wait_desc, f.[Last FULL Backup], l.[Last LOG Backup] 
from sys.databases d 
    left outer join FULLBUs f 
     on d.name = f.name 
    left outer join LOGBUs l 
     on d.name = l.name 
where d.name not in ('model', 'TempDB') 
order by d.name 

Questa query vi darà un quadro di massima dei database, quale modello di recupero che sono utilizzando, perché il registro è pieno e quando sono stati eseguiti gli ultimi backup FULL e LOG.

Guarda la colonna contrassegnata con log_reuse_wait_description. Molto probabilmente dice BACKUP. La causa più probabile successiva è TRANSACTION.

Se è BACKUP Ecco alcune informazioni:

In sostanza, per i database SEMPLICI, eseguire un backup completo ogni giorno. Per i database FULL, esegui un backup COMPLETO ogni giorno e un backup LOG ogni ora. Regola la frequenza dei tuoi database LOG in modo che corrispondano alla tua capacità di perdere dati mantenendo il tuo lavoro.

Il modo più semplice per gestire i backup è utilizzare Ola Hallengren's maintenance scripts. Visita il suo sito Web e prova a utilizzarli.

Se vedete TRANSAZIONE come la ragione, provare a eseguire:

dbcc opentran 

E rintracciare chi è ha le transazioni aperte.

+1

Molto utile, grazie! –

+0

Tutti i miei dicono "NOTHING" o "CHECKPOINT" nella colonna log_reuse_wait_description. –

44

Indubbiamente, si sta eseguendo il database in Full Recovery Mode e non è stato possibile eseguire i backup del Registro transazioni.

Fare clic con il pulsante destro del mouse in SQL Server Manager e selezionare la pagina Opzioni. Cambiare modello di recupero da Full a Simple quindi fare nuovamente clic con il tasto destro del mouse sul database. Selezionare TasksShrink, Files. Riduci il file di registro a una dimensione appropriata (in genere mi limito al 20-25% della dimensione dei file di dati).

Tornare a Full Recovery Model e richiedere immediatamente un backup completo del database.

Ora è necessario capire se è necessario ripristinare il database in un momento specifico. In tal caso, pianificare il log delle transazioni regolari e, eventualmente, i backup differenziali in base ai requisiti della tua azienda.

Nel caso in cui l'azienda può vivere con una certa quantità di perdita di dati, pianificare backup completi e passare alla modalità Simple.

+2

Tra questa risposta e la risposta di @ Steven, alcune fantastiche informazioni! –

0

Fare clic con il tasto destro del mouse sul database \ Proprietà \ File.

Si disporrà di una tabella con i file di database, tra cui un file di registro. Basta espandere la dimensione iniziale a un importo ragionevole.

0

Fare questo Fare clic con il pulsante destro del mouse sul nodo database -> Attività-> Backup -> Generale (in scheda) -> impostare "Tipo di backup" su "Registro transazioni" -> OK.

1

Se il modello di recupero del database è pieno e non si dispone di un piano di manutenzione del backup del log, si riceverà questo errore perché il log delle transazioni diventa pieno a causa di LOG_BACKUP.

ciò impedirà l'esecuzione di qualsiasi azione su questo database come una riduzione e il Motore di database di SQL Server genererà un errore 9002.

Per ovviare a questo comportamento, ti consiglio di controllare questo The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP che mostra i passaggi dettagliati per risolvere questo problema come il piano di manutenzione del backup del log.

+2

Piuttosto che postare dove trovare la risposta (nel link), si dovrebbe distillare tali informazioni per soddisfare questa domanda. Per favore vedi [Come scrivere una buona risposta?] (/ Help/how-to-answer) e [Come fare riferimento al materiale scritto da altri] (/ help/referencing) per alcune linee guida. Le risposte di solo collegamento sono considerate risposte di bassa qualità su StackOverflow e sono soggette a cancellazione. –

Problemi correlati