Операционная система выдала ошибку 21 (Устройство не готово).

Каждый раз, когда я перезагружаю Windows, для некоторых баз данных я получаю эту ошибку:

Операционная система вернула ошибку 21 (Устройство не готово).

  1. Я проверил диск с помощью chkdsk /r - нет поврежденных секторов.

  2. Я выполнил DBCC CHECKDB без ошибок:

    *(CHECKDB обнаружил 0 ошибок распределения и 0 ошибок согласованности в базе данных)*.
  3. Если я перезапущу SQL Server, ошибки исчезнут.

Windows 10 и SQL Server 2016 Express.

Каждый раз, когда я перезагружаю windows, для некоторых баз данных выходит эта ошибка. (OS Error 21 - Device not ready)

Это происходит из-за того, что диск находится в автономном режиме или не находится в режиме онлайн либо во время запуска SQL Server, либо перешел в другое состояние после того, как SQL Server был в режиме онлайн.

3.Если я перезапускаю SQL Server, ошибки исчезают.

Да, потому что базы данных были перемонтированы внутри SQL Server. Вы также можете отключить >онлайн базу данных, и она будет работать, если предположить, что дисковое устройство было исправлено.

Это можно легко воспроизвести в тестовой среде, поместив базу данных на диск, отключив диск, запустив запрос select (чтобы получить ошибку), вернув диск в сеть и заметив, что select по-прежнему не работает с той же ошибкой. Чтобы база данных снова заработала и не получала OS Error 21, ее нужно перемонтировать.

Что вы должны сделать?

Попросите кого-нибудь выполнить трассировку windows, чтобы выяснить, почему диск не включается изначально, или почему он переходит в автономный режим (любой переход состояния), или почему он показывает готовность windows, но на самом деле это не так (возможно, для него нужно загрузить другие драйверы).

Дополнительно проверьте актуальность драйверов дисковых фильтров для таких вещей, как антивирус, защита от вторжения на хост и т.д., поскольку они также могут блокировать службу/запуск/состояние.

Комментарии (2)

Кажется, я нашел причину.

Скорее всего, проблема связана с "Быстрым запуском" опции питания.

Это технология Windows для сокращения времени загрузки; Fast Startup сочетает в себе элементы холодного выключения и функции гибернации.

Здесь вы можете найти еще одну статью о плюсах и минусах

Я отключил эту функцию, и проблема, похоже, решена.

Комментарии (1)

Я много раз сталкивался с одной и той же проблемой и подумал, что должен поделиться своим решением (несмотря на уже предоставленные ответы):

У меня есть два экземпляра SQL (SQL 2008 и SQL 2017). Ошибка проявляется не на моем экземпляре SQL08, а на SQl17. Это вызвано "учетными данными", предоставленными во время установки/настройки каждого экземпляра SQL:

Это можно увидеть в разделе Windows Services. SQL08 был настроен на использование "Локальной системной учетной записи", в то время как сбойный SQL17 был настроен на "СЕТЕВУЮ УЧЕТНУЮ ЗАПИСЬ" во время установки. Поэтому просто измените это значение и перезапустите службу SQL здесь (или перезапустите экземпляр в браузере SQL).

Вторая часть этой проблемы характерна только для SQL Server 2017 CTP 2.0 при использовании SQL Server Management Studio V17, в этом случае SMO переключилась на использование "sys.dm_os_enumerate_fixed_drives" вместо старого "xp_fixeddrives" для получения информации о свободном пространстве локального диска. Чтобы обойти эту проблему, зайдите в DEVICE MANAGER и временно отключите указанный диск (в моем случае это был диск "G", который является просто моим DVD-ROM приводом).

Комментарии (0)