MSSQLSERVER_9001

Si applica a:SQL Server

Dettagli

Attributo Valore
Nome prodotto SQL Server
ID evento 9001
Origine evento MSSQLSERVER
Componente SQLEngine
Nome simbolico LOG_NOT_AVAIL
Testo del messaggio Il log per il database '%.*ls' non è disponibile. Controllare il registro eventi per i messaggi di errore correlati. Risolvere eventuali errori e riavviare il database.

Spiegazione

L'errore 9001 si verifica quando il file di log del database non è più disponibile. Quando il log del database passa offline significa che si è verificato un errore grave che impedisce che le transazioni si verifichino nel database. Un errore di questo tipo richiede il riavvio del database o il ripristino di un backup. L'errore mostra il risultato finale, ma non spiega cosa ha portato a questo stato. Un altro problema ha causato la mancata disponibilità del log ed è necessario analizzare il problema sottostante. Di seguito è riportato un esempio di come viene visualizzato l'errore nel log degli errori SQL

Error: 9001, Severity: 21, State: 5.
The log for database 'ContosoDb' is not available. Check the operating system error log for related error messages. Resolve any errors and restart the database.

L'errore 9001 si verifica comunemente insieme ad altri errori che forniscono spiegazioni più specifiche sulla causa radice. Gli esempi includono errori 9002, 3313, 3314, 17204 (mostra l'errore del sistema operativo durante l'accesso a un file), 17053 (mostra l'errore del sistema operativo), 823.

In determinate situazioni SQL Server tenta di riavviare il database in fase di esecuzione ed eseguire il ripristino oppure può riavviarsi (l'intero servizio). Se un riavvio automatico del database non riesce o non si verifica, è possibile tentare di riavviare SQL Server e verificare se un ripristino del database porta il database online. In caso contrario, è necessario risolvere la causa sottostante per cui il log delle transazioni non è disponibile. Questo è un esempio di messaggio di errore 3422 che mostra un riavvio del database:

Database ContosoDb was shutdown due to error 9001 in routine 'XdesRMFull::CommitInternal'. Restart for non-snapshot databases will be attempted after all connections to the database are aborted.

Il messaggio seguente indica che si sta per eseguire un riavvio di SQL Server:

Error: 3449, Severity: 21, State: 1.
SQL Server must shut down in order to recover a database (database ID 2). The database is either a user database that could not be shut down or a system database. Restart SQL Server. If the database fails to recover after another startup, repair or restore the database.

Causa

Il log delle transazioni del database può diventare non disponibile per molti motivi. Alcuni esempi includono

  • Il file di log delle transazioni si trova in un dispositivo di archiviazione che non è riuscito o non è disponibile
  • Un file di log delle transazioni fisicamente danneggiato che porta all'impossibilità di scrivere o leggere dal file di log
  • Impossibilità di accedere al file a causa di una crittografia/decrittografia non riuscita tramite Transparent Data Encryption (TDE)
    • Il servizio Key Vault non è accessibile
    • Il modulo del provider EKM si verifica in un'eccezione, un errore o un altro problema che impedisce l'operazione riuscita
  • Un log delle transazioni completo a causa di transazioni di grandi dimensioni, spazio su disco insufficiente o limiti di dimensioni dei file imposti nel log delle transazioni. È possibile trovare l'errore 9002 nel log degli errori di SQL Server precedente a 9001. Per altre informazioni, vedere MSSQLSERVER_9002

Azione utente

Risolvere gli errori che precedono prima la versione 9001. Provare quindi a riavviare l'istanza di SQL Server per ripristinare il database, se non è già stato eseguito.

Risolvere gli errori completi del log delle transazioni

È possibile osservare l'errore 9002 prima dell'errore 9001. Ecco un esempio:

Error: 9002, Severity: 17, State: 9.
The transaction log for database 'ContosoDb' is full due to 'AVAILABILITY_REPLICA'.
Error: 3314, Severity: 21, State: 3.
During undoing of a logged operation in database 'ContosoDb' (page (1:32573799) if any), an error occurred at log record ID (7672713:36228:159). Typically, the specific failure is logged previously as an error in the operating system error log. Restore the database or file from a backup, or repair the database.
State information for database 'ContosoDb' - Hardened Lsn: '(7672713:38265:1)'    Commit LSN: '(7672712:1683087:46)'    Commit Time: 'Jul  1 2021  5:51AM'
Database ContosoDb was shutdown due to error 3314 in routine 'XdesRMReadWrite::RollbackToLsn'. Restart for non-snapshot databases will be attempted after all connections to the database are aborted.
Always On Availability Groups connection with secondary database terminated for primary database 'ContosoDb' on the availability replica 'PRDAT1ANLYSQL05' with Replica ID: {38a71ff9-f0ee-4737-9255-bb6a73e1c5d5}. This is an informational message only. No user action is required.
Error during rollback. shutting down database (location: 1).

Error: 9001, Severity: 21, State: 5.
The log for database 'ContosoDb' is not available. Check the operating system error log for related error messages. Resolve any errors and restart the database.

Recovery of database 'ContosoDb' (6) is 0% complete (approximately 60466 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.

In questi casi, concentrarsi sulla risoluzione della causa radice, ovvero un log delle transazioni completo

Per risolvere il log delle transazioni completo, vedere Risolvere i problemi relativi a un log delle transazioni completo (errore di SQL Server 9002)

  • Assicurarsi di liberare spazio nel log delle transazioni e scoprire perché non è stato liberato
  • Liberare spazio su disco in cui risiede il log delle transazioni
  • Espandere il file di log esistente o aggiungerne uno nuovo, se necessario in alcuni casi

Risolvere i problemi hardware e del sistema operativo e il ripristino da un backup, se necessario

L'errore 9001 si verifica in genere quando un file di log delle transazioni è danneggiato o a causa di problemi del dispositivo di archiviazione che rendono il file di log non disponibile. Ecco due esempi di errori che è possibile osservare:

Un esempio in cui il volume di archiviazione è diventato non disponibile e il sistema operativo ha restituito l'errore "The device is not ready". È possibile visualizzare altri errori causati dal danneggiamento dei dischi in caso di non disponibilità. Questi esempi forniscono contesto in modo da comprendere che l'errore 9001 è solo uno dei molti sintomi di un problema più grande.

Error: 823, Severity: 24, State: 2.
The operating system returned error 21(The device is not ready.) to SQL Server during a read at offset 0x000009afde6000 in file 'G:\Data\Files\ContosoDb_4.ldf'. Additional messages in the SQL Server error log and system event log may provide more detail. This is a severe system-level error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.

Error: 9001, Severity: 21, State: 3.
The log for database 'ContosoDb' is not available. Check the event log for related error messages. Resolve any errors and restart the database.

Database ContosoDb was shutdown due to error 9001 in routine 'XdesRMFull::CommitInternal'. Restart for non-snapshot databases will be attempted after all connections to the database are aborted.

Starting up database 'ContosoDb'.
Error: 17204, Severity: 16, State: 1.
FCB::Open failed: Could not open file G:\Data\Files\ContosoDb.mdf for file number 1.  OS error: 3(The system cannot find the path specified.).
Error: 5120, Severity: 16, State: 101.
Unable to open the physical file "G:\Data\Files\ContosoDb.mdf". Operating system error 3: "3(The system cannot find the path specified.)".
Error: 17207, Severity: 16, State: 1.
FileMgr::StartPrimaryDataFiles: Operating system error 2(The system cannot find the file specified.) occurred while creating or opening file 'G:\Data\Files\ContosoDb_0.ndf'. Diagnose and correct the operating system error, and retry the operation.

Ecco un altro esempio in cui il sistema operativo segnala gli errori del dispositivo che causano l'inaccessibile del log delle transazioni per più database:

Error: 17053, Severity: 16, State: 1.
SQLServerLogMgr::LogWriter: Operating system error 1117(The request could not be performed because of an I/O device error.) encountered.


Error: 9001, Severity: 21, State: 4.
The log for database 'ContosoDb' is not available. Check the event log for related error messages. Resolve any errors and restart the database.
Always On Availability Groups data movement for database 'ContosoDb' has been suspended for the following reason: "system" (Source ID 2; Source string: 'SUSPEND_FROM_REDO'). To resume data movement on the database, you will need to resume the database manually. For information about how to resume an availability database, see SQL Server Books Online.


Error: 9001, Severity: 21, State: 16.
The log for database 'tempdb' is not available. Check the event log for related error messages. Resolve any errors and restart the database.
Error: 3449, Severity: 21, State: 1.
SQL Server must shut down in order to recover a database (database ID 2). The database is either a user database that could not be shut down or a system database. Restart SQL Server. If the database fails to recover after another startup, repair or restore the database.

Allo stesso tempo, il registro eventi di sistema di Windows segnala errori del dispositivo di archiviazione:

Warning       NODEDB1 129     pvscsi     Reset to device, \Device\RaidPort2, was issued.
Warning       NODEDB1 153     Disk       The IO operation at logical block address 0xxxxxxxx for Disk 4 (PDO name: \Device\0000007f) was retried.

Per risolvere questi problemi:

  • Assicurarsi che i volumi di archiviazione in cui risiedono i file di database e di log siano online, che l'intero percorso di I/O dal computer all'archiviazione sia stabile e affidabile e che non comporti danni ai file fisici.
  • Collaborare con il produttore dell'hardware e del dispositivo per assicurarsi che l'hardware e la relativa configurazione siano adatti ai requisiti di I/O di un sistema di database. Assicurarsi che i driver di dispositivo, il firmware, il BIOS e altri componenti software di supporto nel percorso di I/O siano aggiornati.
  • Eseguire DBCC CHECKDB per verificare la coerenza del database, se può essere portato online dopo un riavvio
  • Se i file di database e di log non sono intatti e di conseguenza il database non può essere online, ripristinare l'ultimo backup valido noto del database
  • Per suggerimenti per la risoluzione dei problemi, vedere Errore 823 di MSSQLSERVER e Risolvere gli errori di coerenza del database segnalati da DBCC CHECKDB

Risolvere l'errore di crittografia o descrizione TDE

Se si usa un provider o un servizio EKM (Extensible Key Management) esterno, assicurarsi che i moduli forniti dal servizio siano stabili e aggiornati. Collaborare con il fornitore del provider EKM/HSM per risolvere eventuali problemi con i moduli che eseguono la crittografia/decrittografia dei file.

Quando si verifica questo problema, è possibile osservare i sintomi seguenti nel log degli errori SQL:

**Dump thread - spid = 0, EC = 0x0000023FDA293320
***Stack Dump being sent to F:\Data\MSSQL13.INST1\MSSQL\LOG\SQLDump0007.txt
* *******************************************************************************
*
* BEGIN STACK DUMP:
*   11/22/22 12:04:58 spid 1
*
* Crypto Exception
*

00007FFBA0C81791 Module(ntdll+0000000000051791)
Stack Signature for the dump is 0x00000000D3AC1708
External dump process return code 0x20000001.  External dump process returned no errors.

Error: 15466, Severity: 16, State: 28.
An error occurred during decryption.
Error: 9001, Severity: 21, State: 16.
The log for database 'ContosoDb' is not available. Check the event log for related error messages. Resolve any errors and restart the database.