Compartilhar via


MSSQLSERVER_9001

Aplica-se: SQL Server

Detalhes

Atributo Valor
Nome do produto SQL Server
ID do evento 9001
Origem do Evento MSSQLSERVER
Componente SQLEngine
Nome simbólico LOG_NOT_AVAIL
Texto da mensagem O log para o banco de dados '%.*ls' não está disponível. Verifique o log de eventos para obter as mensagens de erro relacionadas. Resolva todos os erros e reinicie o banco de dados.

Explicação

O erro 9001 ocorre quando o arquivo de log do banco de dados fica indisponível. Quando o log do banco de dados fica offline, isso significa que ocorreu uma falha grave que impede que as transações ocorram no banco de dados. Essa falha requer que o banco de dados seja reiniciado ou que você restaure um backup. O erro mostra o resultado final, mas não explica o que levou a esse estado. Algum outro problema fez com que o log não estivesse disponível e você deve investigar o problema subjacente. Aqui está um exemplo de como o erro aparece no log de erros do 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.

Normalmente, o erro 9001 ocorre junto com outros erros que fornecem uma explicação mais específica sobre a causa raiz. Os exemplos incluem os erros 9002, 3313, 3314, 17204 (mostra o erro do sistema operacional ao acessar um arquivo), 17053 (mostra o erro do sistema operacional), 823.

Em determinadas situações, o SQL Server tenta reiniciar o banco de dados em tempo de execução e executar a recuperação, ou ele pode reiniciar a si mesmo (o serviço inteiro). Se uma reinicialização automática do banco de dados não for bem-sucedida ou não tiver ocorrido, você poderá tentar reiniciar o SQL Server e ver se uma recuperação do banco de dados coloca o banco de dados online com êxito. Caso contrário, você deve resolver a causa subjacente para o log de transações estar indisponível. Este é um exemplo de mensagem de erro 3422 que mostra uma reinicialização do banco de dados:

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.

A mensagem a seguir indica que uma reinicialização do SQL Server está prestes a ocorrer:

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

O log de transações do banco de dados pode ficar indisponível por vários motivos. Alguns exemplos incluem

  • O arquivo de log de transações reside em um dispositivo de armazenamento que falhou ou não está disponível
  • Um arquivo de log de transações fisicamente danificado que leva à incapacidade de gravar ou ler o arquivo de log
  • Incapacidade de acessar o arquivo devido a uma falha na criptografia/descriptografia via TDE (Transparent Data Encryption)
    • O serviço de cofre de chaves não está acessível
    • O módulo do provedor EKM encontra uma exceção, erro ou outro problema que impede a operação bem-sucedida
  • Um log de transações completo devido a transações grandes, pouco espaço em disco ou limites de tamanho de arquivo impostos ao log de transações. O erro 9002 pode ser encontrado no log de erros do SQL Server anterior ao 9001. Para obter mais informações, consulte MSSQLSERVER_9002

Ação do usuário

Resolva os erros que precedem 9001 primeiro. Em seguida, tente reiniciar a instância do SQL Server para recuperar o banco de dados, se isso ainda não tiver ocorrido.

Resolver erros completos do log de transações

Você pode observar o erro 9002 antes do erro 9001. Veja um exemplo:

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.

Nesses casos, concentre-se em resolver a causa raiz - um log de transações completo

Para resolver o log de transações completo, consulte Solucionar problemas de um log de transações completo (Erro 9002 do SQL Server)

  • Certifique-se de liberar espaço no log de transações e descubra por que ele não foi liberado
  • Liberar espaço em disco onde o log de transações reside
  • Expanda o arquivo de log existente ou adicione um novo, se necessário, em alguns casos

Resolva problemas de hardware e sistema operacional e restaure a partir de um backup, se necessário

Normalmente, o erro 9001 ocorre quando um arquivo de log de transações é danificado ou devido a problemas no dispositivo de armazenamento que tornam o arquivo de log indisponível. Aqui estão dois exemplos de erros que você pode observar:

Um exemplo em que o volume de armazenamento ficou indisponível e o sistema operacional retornou o erro "O dispositivo não está pronto". Você pode ver outros erros que resultaram de discos danificados quando indisponíveis. Esses exemplos fornecem contexto para que você possa entender que o erro 9001 é apenas um dos muitos sintomas de um problema maior.

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.

Aqui está outro exemplo em que o sistema operacional relata erros de dispositivo que levam ao log de transações de vários bancos de dados a serem inacessíveis:

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.

Ao mesmo tempo, o log de eventos do sistema Windows relata erros do dispositivo de armazenamento:

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.

Para resolver esses problemas:

  • Certifique-se de que os volumes de armazenamento em que o banco de dados e os arquivos de log residem estejam online, que todo o caminho de E/S da máquina para o armazenamento seja estável e confiável e que não leve a danos ao arquivo físico.
  • Trabalhe com o fabricante do hardware e do dispositivo para garantir que o hardware e sua configuração sejam adequados aos requisitos de E/S de um sistema de banco de dados. Certifique-se de que os drivers de dispositivo, firmware, BIOS e outros componentes de software de suporte no caminho de E/S estejam atualizados.
  • Execute DBCC CHECKDB para verificar a consistência do banco de dados, se ele puder ser colocado online após uma reinicialização
  • Se o banco de dados e os arquivos de log não estiverem intactos e, como resultado, o banco de dados não puder ficar online, restaure o último backup válido conhecido do banco de dados
  • Para obter sugestões de solução de problemas, consulte o erro 823 do MSSQLSERVER e Solucionar problemas de erros de consistência do banco de dados relatados pelo DBCC CHECKDB

Resolver falha de criptografia ou descrição de TDE

Se você estiver usando um serviço ou provedor externo de EKM (Gerenciamento Extensível de Chaves)/HSM (Módulos de Segurança de Hardware), verifique se os módulos fornecidos pelo serviço estão estáveis e atualizados. Trabalhe com o fornecedor do provedor de EKM/HSM para resolver quaisquer problemas com os módulos que executam a criptografia/descriptografia de arquivos.

Você pode observar os seguintes sintomas no log de erros do SQL quando esse problema ocorre:

**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.