DBCC CheckDB El sistema operativo devolvió el error 21 (El dispositivo no está listo)

DBCC CheckDB El sistema operativo devolvió el error 21 (El dispositivo no está listo)

El sistema operativo devolvió el error 21 (El dispositivo no está listo) a SQL Server durante una lectura en el desplazamiento 0x0000000001c000 en el archivo 'E:\SQL Database\S*****d\NewAdvWorks.mdf'. Los mensajes adicionales en el registro de errores de SQL Server y en el registro de eventos del sistema pueden proporcionar más detalles. Esta es una condición de error grave a nivel del sistema que amenaza la integridad de la base de datos y debe corregirse de inmediato. Complete una verificación completa de la coherencia de la base de datos (DBCC CHECKDB). Este error puede deberse a muchos factores; Para obtener más información, consulte los Libros en pantalla de SQL Server.

Respuesta1

Lo que funcionó para mí:

alter database [database_name] set offline

...espera unos segundos...

alter database [database_name] set online 

Esto es mejor que reiniciar SQL Server, ya que reiniciar SQL Server desconecta todas las bases de datos (no solo la base de datos que es inaccesible).

Respuesta2

Encontré este mismo error hoy. Reiniciar el servicio SQL Server lo solucionó.

El registro de errores de SQL Server y el registro de eventos de Windows mostraron el mismo error:

El sistema operativo devolvió el error 21 (El dispositivo no está listo) a SQL Server durante una lectura en el desplazamiento 0x00000000026000 en el archivo 'blah.mdf'. Los mensajes adicionales en el registro de errores de SQL Server y en el registro de eventos del sistema pueden proporcionar más detalles. Esta es una condición de error grave a nivel del sistema que amenaza la integridad de la base de datos y debe corregirse de inmediato. Complete una verificación completa de la coherencia de la base de datos (DBCC CHECKDB). Este error puede deberse a muchos factores; Para obtener más información, consulte los Libros en pantalla de SQL Server.

Y:

Error: 823, Gravedad: 24, Estado: 2

Después de leer la respuesta de Robert van den Berg, intentaría desconectar la base de datos y luego conectarla primero si tiene otras bases de datos que necesita mantener en línea.

Respuesta3

Primero lea los registros que se indicaron en el mensaje de error.

Luego intente restablecer el servidor y luego ejecute DBCC CheckDBnuevamente.

Respuesta4

En mi caso pude utilizar

exec sp_detach_db [dbName];

seguido por

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

para 30 bases de datos en SQL 2017. Aunque el proceso de "separación" arrojó un error, SQL separó la base de datos.

Lo usé select db_name(database_id), * from sys.master_files antes de comenzar a desconectar, para poder programar el proceso de conexión, dado que tenía 30 bases de datos en este estado.

Encontré el catalizador en mi caso. La noche anterior había "ampliado" dos volúmenes. Disk Management había informado que no podía ampliar el volumen en ese momento. Decidí esperar hasta una ventana de mantenimiento para volver a intentarlo y aún no hubo errores.

Cinco horas después se inició una copia de seguridad que utilizaba VSS. Estoy convencido de que la combinación de un "volumen extendido" fallido y la instantánea VSS pusieron los volúmenes en un estado inusual.

información relacionada