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


13

Cada vez que reinicio Windows, para algunas bases de datos me sale este error:

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

  1. Revisé el disco con chkdsk /r- sin sectores defectuosos.
  2. Ejecuté DBCC CHECKDBsin errores:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
  3. Si reinicio SQL Server, los errores desaparecen.

Windows 10 y SQL Server 2016 Express.

Respuestas:


14

Cada vez que reinicio Windows, para algunas bases de datos sale este error. (Error de sistema operativo 21 - Dispositivo no listo)

Esto se debe a que un disco está fuera de línea o no está en línea en el momento en que se inició SQL Server, o tenía estados de transición después de que SQL Server haya estado en línea.

3. Si reinicio SQL Server, los errores desaparecen

Sí, porque las bases de datos se han vuelto a montar dentro de SQL Server. También podría desconectar-> en línea la base de datos y funcionaría, suponiendo que el dispositivo de disco haya sido reparado.

Esto se puede reproducir fácilmente en un entorno de prueba colocando una base de datos en un disco, deshabilitando el disco, ejecutando una consulta de selección (para obtener el error), volviendo a poner el disco en línea y notando que la selección todavía falla con el mismo error. Será necesario volver a montar la base de datos para que funcione de nuevo y no obtenga el error de sistema operativo 21

Que deberias hacer

Pídale a alguien que haga un seguimiento de Windows para descubrir por qué no se está conectando inicialmente o por qué se está desconectando (cualquier transición de estado) o por qué se muestra listo para Windows, pero realmente no lo es (tal vez se deben cargar otros controladores para eso).

Además, verifique que los controladores de filtro de disco estén actualizados para cosas como antivirus, protecciones de intrusión de host, etc., ya que también pueden estar bloqueando el servicio / inicio / estado.


Tuve un problema similar y agregué un script para reiniciar los servicios SQLServer / SqlLaunchPad después de 5 minutos, pero eso no funciona. Cuando reinicio manualmente más tarde, funciona bien sin problemas. La misma configuración en SQL Server2014 funciona sin problemas
Rajesh

Cambie el modo de inicio de Automático a Retardo. Esto asegurará que el SQLService se active al final (después de que los discos se monten y hagan lo suyo).
Jonathan Fite el

6

Creo que he encontrado la causa.

Lo más probable es que el problema se deba a las opciones de energía de "Inicio rápido" .

Inicio rápido

Es una técnica de Windows para reducir el tiempo de arranque; Inicio rápido combina elementos de un apagado en frío y la función de hibernación .

Aquí puedes encontrar otro artículo sobre pros y contras

Lo he desactivado y el problema parece estar resuelto.


Excelente. Esta es una forma de verlo. La verdadera causa es que algunos servicios SQL no se han iniciado cuando ve este error SQL. No se han iniciado debido a cómo están configurados para "inicio", especialmente si realmente está utilizando "Inicio rápido" para el sistema operativo.
Chagbert

3

Estas son mis observaciones y cómo resolví el problema (en beneficio de otros que pueden tener el mismo problema)

  • Estaba usando la instancia amazon ec2 que ejecuta el servidor SQL.
  • Tenía un dispositivo EBS Block conectado a la instancia ec2, que se asignó a la unidad D:.
  • Mis datos y registros estaban en la unidad D:.
  • Cuando detengo la instancia de ec2 y la menciono más tarde, siempre experimenté el error de "dispositivo no listo" y las bases de datos no aparecían.
  • Intenté configurar el servicio MSSQLSERVER con "Inicio retrasado".
  • Sin embargo, en los registros del servidor sql descubrí que no se respetó el retraso y que MSSQLSERVER se inició junto con el arranque.
  • Desde el espectador del evento, observé el momento en que la unidad D: se vuelve saludable.
  • De los registros del servidor sql, noté el momento en que SQL Server está iniciando mi base de datos de usuario.
  • Observé que, D: la unidad solo está disponible después de 6 segundos; y obviamente aparece el error "Dispositivo no listo".
  • También noté que el "inicio retrasado" no fue respetado porque había otro servicio llamado "SQL SERVER LaunchPad" que inicia "MSSQLSERVER".
  • No necesito la capacidad de análisis del "Launchpad". Entonces deshabilité ese servicio.
  • Ahora "MSSQLSERVER" se inicia con un retraso y puede encontrar los archivos D: drive.

1

El error completo que recibí al conectarme a mi instancia de MS SQL local predeterminada (2017) a través de MSSMS es:

El sistema operativo devolvió el error 21 (El dispositivo no está listo) a SQL Server durante una lectura en el desplazamiento 0x000000000ae000 en el archivo 'D: \ MSSQL \ DATA \ tempdev.mdf'. Los mensajes adicionales en el registro de errores de SQL Server y el registro de errores del sistema operativo pueden proporcionar más detalles. Esta es una condición grave de error a nivel del sistema que amenaza la integridad de la base de datos y debe corregirse de inmediato. Complete una comprobación de coherencia completa de la base de datos (DBCC CHECKDB). Este error puede ser causado por muchos factores; Para obtener más información, consulte los Libros en pantalla de SQL Server. (Microsoft SQL Server, Error: 823) Para obtener ayuda, haga clic en: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476

Comencé a recibir esto una vez que moví mi tempdb a mi nuevo disco D. Hacer un inicio / parada del servicio SQL elimina el error. Nunca recibí este error cuando todo estaba en C. Ambas unidades son SSD y están encriptadas con Bitlocker, no estoy seguro si ese podría ser el problema, tal vez la unidad C se desbloquea muy temprano porque el sistema operativo lo necesita, y la unidad D se desbloquea más tarde .

  1. Según la respuesta de Max ( https://dba.stackexchange.com/a/175115 ), deshabilitar "Inicio rápido" solucionó mi problema. Según el artículo Max enlaces a ( https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ ) es bastante oscuro de encontrar, en el " Elija lo que hacen los botones de encendido "y luego" Cambiar la configuración que actualmente no está disponible ".
  2. A diferencia de la respuesta de Venvig ( https://dba.stackexchange.com/a/226115 ), configurar el servicio "SQL Server" en Tipo de inicio = "Automático (inicio retrasado)" también solucionó mi problema (con Windows'Fast Startup re habilitado).

0

Me he encontrado con el mismo problema muchas veces y pensé que debería compartir mi solución (a pesar de las respuestas ya proporcionadas):

Entonces tengo dos instancias de SQL (SQL 2008 y SQL 2017). El error no se manifiesta en mi instancia SQL08 sino en SQl17. Esto se debe a las "Credenciales de cuenta" proporcionadas durante la Instalación / configuración de cada instancia de SQL:

ingrese la descripción de la imagen aquí

Esto se puede ver en Servicios de Windows. El SQL08 se configuró para usar la "Cuenta del sistema local" mientras que el SQL17 defectuoso se configuró en "CUENTA DE RED" durante la configuración. Tan solo cambie eso y reinicie el servicio SQL aquí (o reinicie la instancia en el navegador SQL).

La segunda parte de este problema es exclusiva de SQL Server 2017 CTP 2.0 cuando se usa SQL Server Management Studio V17, en cuyo caso el SMO cambió a " sys.dm_os_enumerate_fixed_drives " en lugar de los viejos " xp_fixeddrives " para obtener información de espacio libre de su disco local . Para solucionar esto, vaya al ADMINISTRADOR DE DISPOSITIVOS y desactive temporalmente la unidad citada (en mi caso, la unidad "G", que es solo mi unidad de DVD-ROM).


0

Este problema también me ha irritado. Tengo 5 dbs conectados a mi instancia de SQL Server, 3 de los cuales funcionan bien, pero 2 de los cuales se quejan

El sistema operativo devolvió el error 21 (El dispositivo no está listo) a SQL Server durante una lectura en el desplazamiento 0x00000000204000 en el archivo 'E: \ xxxxxxxx.mdf'

Aquí está mi solución.

  1. Active Services.msc , busque el servicio llamado SQL Server (nombre de instancia) , haga clic derecho y reinícielo .
  2. Vuelva a ssms, actualice su db y las cosas deberían funcionar.

En una nota al margen, intenté tomar el método db offline / online. No funcionó en mi caso. La fuerza bruta que reinició el servicio sqlserver funcionó bien. Esto podría ser un problema para aquellos cuya apuesta por desconectar todos los dbs es demasiado alta. Sin embargo, si solo está haciendo un desarrollo local como yo, entonces esta solución debería estar bien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.