MSSQLSERVER_9004

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 9004
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico LOG_CORRUPT
Testo del messaggio Si è verificato un errore durante l'elaborazione del log del database '%.*ls'. Se possibile, ripristinarlo da un backup. Se non è disponibile un backup, potrebbe essere necessario ricompilare il log.

Spiegazione

Si è verificato un errore nell'elaborazione del log durante un'operazione di rollback, recupero o replica. Questo potrebbe indicare un errore rilevato dal sistema operativo o un errore di coerenza interno rilevato da SQL Server.
Il motore di database di SQL Server esegue controlli logici sulla coerenza del contenuto del log delle transazioni durante la lettura e l'elaborazione. Non vengono controllati tutti gli aspetti dell'intestazione, dei blocchi e dei record del log. Il numero State (Stato) offre altre informazioni sul tipo di errore:

  • State 1: l'intestazione file di log del file di log virtuale (VLF) è danneggiata. Se viene rilevata un'intestazione del file di registro danneggiata durante l'avvio del database al momento dell'avvio del servizio, è possibile che in ERRORLOG (log degli errori) sia visualizzato solo l'errore 9004. L'intestazione del file di log è la prima parte di ogni VLF all'interno di un log delle transazioni. L'intestazione del file di log non corrisponde all'intestazione del file singolo, ovvero ai primi 8 kB del file di log. Se l'intestazione di file del file di log è danneggiata, è possibile che si riceva un messaggio 5172, simile a quello originato per il danneggiamento della pagina di intestazione di un file di database.
  • State 2 e State 3: un blocco del log non era valido al momento dell'esecuzione del ripristino durante un'operazione RESTORE.
  • State da 4 a 12: questi sono i vari controlli sui blocchi di log durante l'elaborazione dei record di log. Includono la parità, il settore e altri controlli logici sulla coerenza del log delle transazioni.

Nella maggior parte dei casi questo errore si verifica solo in ERRORLOG o nel log eventi dell'applicazione di Windows con EventId = 9004, perché l'operazione che elabora il log non è basata su un comando utente diretto (ad esempio il ripristino eseguito all'avvio del motore SQL Server). In queste situazioni l'errore 9004 viene spesso visualizzato insieme all'errore 3414. Tuttavia, alcune query come ALTER DATABASE potrebbero richiedere un'elaborazione del log e pertanto visualizzeranno questi errori. Poiché la gravità dell'errore è Severity=21, la sessione utente viene disconnessa.

Causa

L'errore 9004 è un errore generale che indica che il contenuto del log delle transazioni è danneggiato. Il motivo per cui il log perde la coerenza è simile a qualsiasi problema di danneggiamento del database rilevato dal motore SQL Server. Per trovare il motivo del danneggiamento del log, è consigliabile adottare tecniche simili a quelle usate per il danneggiamento del database, inclusa l'analisi di possibili problemi a livello di hardware, file system e I/O. Si noti che l'esecuzione di DBCC CHECKDB non include il controllo del log delle transazioni e non è in grado di rilevare errori di danneggiamento del log. L'errore 9004 viene generato dal motore SQL Server stesso.

Azione utente

Per correggere l'errore, eseguire una delle operazioni seguenti:

  • Ripristino da un backup: ripristino da un backup valido noto per il ripristino da questo problema. Se la parte log di un backup del database o del log include contenuti danneggiati, è possibile che si registri un errore 9004 in RESTORE. In questa situazione, il log delle transazioni nel backup è danneggiato.

  • Ricompilare il log: se non è possibile eseguire il ripristino da un backup, è possibile portare online il database ricompilando il log delle transazioni. È importante esaminare con cura le conseguenze della ricostruzione del log delle transazioni. Una di queste è la possibile perdita di coerenza delle transazioni nel database. Per altre informazioni su come ricostruire il log delle transazioni, vedere Risoluzione degli errori in modalità di emergenza per il database.

  • Esaminare i log per individuare i problemi di sistema: controllare anche il registro eventi di sistema e i log degli errori per identificare i problemi all'interno del sistema che potrebbero aver causato il problema.