%20.png)
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 CheckDB
novamente.
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.