DBCC CheckDB O sistema operacional retornou o erro 21 (O dispositivo não está pronto.)

DBCC CheckDB O sistema operacional retornou o erro 21 (O dispositivo não está pronto.)

O sistema operacional retornou o erro 21 (O dispositivo não está pronto.) ao SQL Server durante uma leitura no deslocamento 0x0000000001c000 no arquivo 'E:\SQL Database\S*****d\NewAdvWorks.mdf'. Mensagens adicionais no log de erros do SQL Server e no log de eventos do sistema podem fornecer mais detalhes. Esta é uma condição grave de erro no nível do sistema que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Este erro pode ser causado por vários fatores; para obter mais informações, consulte os Manuais Online do SQL Server.

Responder1

O que funcionou para mim:

alter database [database_name] set offline

...espere alguns segundos...

alter database [database_name] set online 

Isso é melhor do que reiniciar o SQL Server, pois reiniciar o SQL Server coloca todos os bancos de dados offline (não apenas o banco de dados que está inacessível).

Responder2

Encontrei esse mesmo erro hoje. Reiniciar o serviço SQL Server corrigiu o problema.

O log de erros do SQL Server e o log de eventos do Windows mostraram o mesmo erro:

O sistema operacional retornou o erro 21 (O dispositivo não está pronto.) ao SQL Server durante uma leitura no deslocamento 0x00000000026000 no arquivo 'blah.mdf'. Mensagens adicionais no log de erros do SQL Server e no log de eventos do sistema podem fornecer mais detalhes. Esta é uma condição grave de erro no nível do sistema que ameaça a integridade do banco de dados e deve ser corrigida imediatamente. Conclua uma verificação completa de consistência do banco de dados (DBCC CHECKDB). Este erro pode ser causado por vários fatores; para obter mais informações, consulte os Manuais Online do SQL Server.

E:

Erro: 823, Gravidade: 24, Estado: 2

Depois de ler a resposta de Robert van den Berg, eu tentaria colocar o banco de dados off-line e depois on-line primeiro, se você tiver outros bancos de dados que precise manter on-line.

Responder3

Primeiro leia os logs indicados na mensagem de erro.

Em seguida, tente redefinir o servidor e execute-o DBCC CheckDBnovamente.

Responder4

No meu caso consegui usar

exec sp_detach_db [dbName];

seguido pela

exec sp_attach_db [dbName] , @filename1 = N'U:\mdf\dbName.mdf' , @filename2 = N'G:\ldf\dbName_log.ldf';

para 30 bancos de dados no SQL 2017. Embora o processo de "desanexação" tenha gerado um erro, o SQL desanexou o banco de dados.

Usei select db_name(database_id), * from sys.master_files antes de começar a desanexar, para poder criar o script do processo de anexação, já que tinha 30 bancos de dados nesse estado.

Encontrei o catalisador no meu caso. Eu havia “estendido” dois volumes na noite anterior. O Gerenciamento de disco relatou que não foi possível estender o volume naquele momento. Decidi esperar uma janela de manutenção para tentar novamente e ainda não houve erros.

Cinco horas depois, foi iniciado um backup que usava VSS. Estou convencido de que a combinação de um "volume estendido" com falha e o instantâneo do VSS colocou os volumes em um estado incomum.

informação relacionada