Condividi tramite


Risoluzione dell'errore 3313, 3314, 3414 o 3456 (SQL Server)

Un errore durante un'operazione di recupero, annullamento o rollforward in un database di SQL Server determina l'impostazione del database sullo stato SUSPECT. Tali errori includono gli errori 3313 (errore di rollforward del log), 3314 (errore di annullamento del log), 3414 (errore di recupero che impedisce il riavvio del database) e 3456 (errore di rollforward in una transazione registrata).

Spiegazione

Un errore di recupero, annullamento o rollforward determina l'impostazione del database sullo stato SUSPECT perché il filegroup primario e probabilmente altri filegroup sono sospetti e potrebbero essere danneggiati. Il database non è disponibile. Per risolvere il problema, è necessario l'intervento dell'utente.

Nota

Se questo errore si verifica per tempdb, l'istanza di SQL Server viene arrestata.

Azione utente

Un errore di recupero, annullamento o rollforward può essere causato da una condizione temporanea o da un errore permanente che si verifica ogni volta che si tenta di avviare il database.

Per informazioni sulla causa di un'occorrenza specificata di un errore 3313, 3314, 3414 o 3456, esaminare il registro eventi di Windows per cercare un errore precedente che indichi l'errore specifico. Le azioni dell'utente appropriate variano a seconda che le informazioni nel Registro eventi di Windows indichino che l'errore SQL Server è stato causato da una condizione temporanea o da un errore permanente.

Nota

Quando viene rilevata una di queste condizioni di errore, generalmente in SQL Server vengono generati tre file nella cartella SQL ServerLOG. Nel file SQLDumpnnnn.txt sono contenute informazioni diagnostiche avanzate relative agli errori, inclusi i dettagli sulla transazione e la pagina in cui si è verificato il problema. In genere, tali informazioni vengono utilizzate dal team del Servizio Supporto Tecnico Clienti per analizzare il motivo dell'errore.

Per una condizione temporanea:

  1. Tentare di portare il database online eseguendo l'istruzione ALTER DATABASETransact-SQL seguente:

    ALTER DATABASE <database name> SET ONLINE;
    
  2. Per stabilire se il recupero è terminato correttamente e se il database è passato alla modalità online, controllare il registro errori di SQL Server e la vista del catalogo sys.databases.

  3. Se il database è online, eseguire l'istruzione Transact-SQL DBCC CHECKDB per verificarne la consistenza.

Per un errore permanente:

Cercare nel registro errori di SQL Server l'errore che si intende risolvere (3313, 3314, 3414 o 3356) ed esaminare i messaggi che lo precedono per stabilire se è possibile correggerlo manualmente. Se è possibile correggere gli errori precedenti, eseguire una delle procedure seguenti:

  • Ripristinare e verificare il database (procedura consigliata) nel modo seguente:

    1. Provare a eseguire un backup della parte finale del log.

    2. Ripristinare il database da un backup completo, seguito facoltativamente da un backup differenziale, specificando l'istruzione RESTORE …WITH NORECOVERY Transact-SQL.

    3. Se il database utilizza il modello di recupero con registrazione completa, applicare tutti i backup del log delle transazioni eseguiti dopo il ripristino dal backup completo o differenziale, fino al punto di errore, specificando RESTORE LOG … WITH NORECOVERY.

    4. Dopo avere ripristinato il punto di errore del database nel modo migliore possibile, eseguirne il recupero specificando RESTORE DATABASE <nome_database> WITH RECOVERY.

    5. Quando il database passa alla modalità online, eseguire l'istruzione DBCC CHECKDBTransact-SQL per verificarne la consistenza.

  • Provare a portare il database online eseguendo i passaggi descritti per un errore temporaneo precedentemente in questa sezione.

  • Utilizzare la modalità di emergenza nel modo seguente:

    1. Eseguire la transizione del database allo stato EMERGENCY mediante l'istruzione ALTER DATABASETransact-SQL seguente:

      ALTER DATABASE <database_name> SET EMERGENCY; 
      
    2. Esaminare l'output dell'istruzione ALTER DATABASE e del registro errori di SQL Server.

    3. Esaminare lo stato del database nella vista del catalogo sys.databases.

    4. Eseguire una verifica della coerenza sul database utilizzando l'istruzione DBCC CHECKDB per comprendere la natura e l'estensione del danno.

    5. Dopo avere valutato l'output di DBCC CHECKDB, è possibile scegliere di eseguire DBCC CHECKDB con l'opzione REPAIR_ALLOW_DATA_LOSS.

      Nota di attenzioneAttenzione

      Prima di utilizzare l'opzione, esaminare attentamente le informazioni sulla risoluzione degli errori nella modalità di emergenza del database nell'argomento DBCC CHECKDB (Transact-SQL) della documentazione online di SQL Server.

Nota

Per informazioni su come risolvere i problemi hardware correlati all'errore 3313, 3314, 3414 o 3356, vedere MSSQLSERVER_824.

Passaggi per evitare questo errore

Per evitare che questa situazione si ripeta, effettuare le operazioni seguenti:

  1. Esaminare il registro errori di SQL Server e i registri eventi di Windows per verificare l'eventuale presenza di problemi a livello di sistema che possono determinare l'errore.

  2. Per escludere che i problemi noti del prodotto abbiano causato questa condizione, applicare l'aggiornamento cumulativo più recente per la versione di SQL Server in uso.