Condividi tramite


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

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

Spiegazione

Un errore di rollforward, annullamento o recupero comporta l'impostazione dello stato SUSPECT per il database poiché il filegroup primario, e forse altri filegroup, sono sospetti e potrebbero essere danneggiati. Il database non è disponibile, pertanto è necessario l'intervento dell'utente per risolvere il problema.

[!NOTA]

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

Azione utente

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

[!NOTA]

Quando viene rilevata una di queste condizioni di errore, generalmente vengono generati tre file nella cartella LOG di SQL Server. 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 informazioni sulla causa di un'occorrenza specifica dell'errore 3313, 3314, 3414 o 3456, esaminare il registro eventi di Windows per cercare un errore precedente che indichi l'errore specifico. Le azioni utente appropriate variano a seconda che le informazioni disponibili nel registro eventi di Windows indichino che l'errore di SQL Server è stato causato da una condizione temporanea o da un errore permanente.

Per una condizione temporanea:

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

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

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

Per un errore permanente:

Nel log degli errori di SQL Server cercare l'errore in corso di risoluzione (3313, 3314, 3414 o 3356) e verificare i messaggi che lo precedono per stabilire se è possibile correggerlo manualmente. Se è possibile correggere gli errori precedenti, attenersi a 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, utilizzando l'istruzione RESTORE …WITH NORECOVERY Transact-SQL.

    3. Se nel database viene utilizzato 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, utilizzando RESTORE LOG … WITH NORECOVERY.

    4. Dopo aver ripristinato il database nel punto più vicino possibile all'errore, eseguirne il recupero utilizzando 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 attenendosi ai passaggi descritti precedentemente in questa sezione per un errore temporaneo.

  • Utilizzare la modalità di emergenza nel modo seguente:

    1. Eseguire la transizione del database verso lo stato EMERGENCY mediante la seguente istruzione ALTER DATABASETransact-SQL:

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

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

    4. Eseguire un controllo di consistenza sul database utilizzando l'istruzione DBCC CHECKDB per comprendere la natura e l'estensione del danno.

    5. Dopo aver 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 log degli 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.