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


13

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

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

  1. Я проверил диск с chkdsk /r- нет плохих секторов.
  2. Я выполнил DBCC CHECKDBбез ошибок:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
  3. Если я перезапущу SQL Server, ошибки исчезнут.

Windows 10 и SQL Server 2016 Express.

Ответы:


14

Каждый раз, когда я перезагружаю Windows, для некоторых баз данных появляется эта ошибка. (Ошибка ОС 21 - устройство не готово)

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

3.При перезапуске SQL Server ошибки исчезают

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

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

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

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

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


У меня была похожая проблема, и я добавил скрипт для перезапуска служб SQLServer / SqlLaunchPad через 5 минут, но это не работает. Когда я вручную перезагружаюсь позже, это работает нормально без проблем. Та же конфигурация в SQL Server2014 работает без проблем
Раджеш

Измените режим запуска с автоматического на задержку. Это будет гарантировать, что SQLService прибывает последним (после того, как диски смонтированы и сделают свое дело).
Джонатан

6

Я думаю, что нашел причину.

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

Быстрый запуск

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

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

Я отключил его, и проблема, кажется, решена.


Отлично. Это один из способов взглянуть на это. Настоящая причина в том, что некоторые службы SQL не были запущены к тому времени, когда вы видите эту ошибку SQL. Они не запустились из-за того, что они настроены на «запуск», особенно если вы действительно используете «Быстрый запуск» для ОС.
Чагберт

3

Это мои наблюдения и то, как я решил проблему (для тех, у кого такая же проблема)

  • Я использовал экземпляр amazon ec2 под управлением Sql-сервера.
  • У меня было устройство EBS Block, подключенное к экземпляру ec2, которое подключено к диску D :.
  • Мои данные и журналы были на диске D :.
  • Когда я останавливал экземпляр ec2 и вызывал его позже, я всегда сталкивался с ошибкой «устройство не готово», и базы данных не появлялись.
  • Я попытался настроить службу MSSQLSERVER с помощью «Отложенный запуск».
  • Однако из журналов сервера sql я обнаружил, что задержка не была учтена, и MSSQLSERVER запустился сразу после загрузки.
  • От наблюдателя событий я наблюдал, когда диск D: становится здоровым.
  • Из журналов сервера sql я отметил время, когда SQL Server запускает мою пользовательскую базу данных.
  • Я заметил, что диск D: доступен только через 6 секунд; и, очевидно, появляется ошибка «Устройство не готово».
  • Я также отметил, что «отложенный запуск» не был принят, потому что была другая служба с именем «SQL SERVER LaunchPad», которая запускает «MSSQLSERVER».
  • Мне не нужны возможности аналитики "Launchpad". Поэтому я отключил этот сервис.
  • Теперь «MSSQLSERVER» запускается с задержкой и может найти файлы диска D :.

1

Полная ошибка, которую я получил при подключении к локальному экземпляру MS SQL по умолчанию (2017) через MSSMS:

Операционная система возвратила ошибку 21 (устройство не готово) к SQL Server во время чтения со смещением 0x000000000ae000 в файле 'D: \ MSSQL \ DATA \ tempdev.mdf'. Дополнительные сообщения в журнале ошибок SQL Server и журнале ошибок операционной системы могут предоставить более подробную информацию. Это серьезная ошибка системного уровня, которая угрожает целостности базы данных и должна быть немедленно исправлена. Выполните полную проверку согласованности базы данных (DBCC CHECKDB). Эта ошибка может быть вызвана многими факторами; Дополнительные сведения см. в электронной документации по SQL Server. (Microsoft SQL Server, ошибка: 823). Для получения справки нажмите: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=823&LinkId=20476

Я начал получать это, как только я переместил свой tempdb на мой новый диск D. Выполнение запуска / остановки службы SQL устраняет ошибку. Никогда не получал эту ошибку, когда все было на C. Оба моих диска SSD и зашифрованы с помощью Bitlocker, не уверен, что это может быть проблемой, может быть, диск C разблокирован очень рано, потому что это нужно операционной системе, а диск D разблокируется позже ,

  1. Согласно ответу Макса ( https://dba.stackexchange.com/a/175115 ), отключение «Быстрого запуска» решило мою проблему. В соответствии со статьей Макс ссылается на ( https://www.howtogeek.com/243901/the-pros-and-cons-of-windows-10s-fast-startup-mode/ ), довольно трудно найти в Выберите, что делают кнопки питания », а затем« Изменение настроек, которые в данный момент недоступны ».
  2. В отличие от ответа Venvig ( https://dba.stackexchange.com/a/226115 ), установка для службы «SQL Server» типа запуска = «Автоматический (отложенный запуск)» также позволила решить мою проблему (при повторном запуске Windows'Fast включен).

0

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

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

введите описание изображения здесь

Это можно увидеть под Windows Services. SQL08 был настроен на использование «Локальной системной учетной записи», а сбой SQL17 был установлен на «NETWORK ACCOUNT» во время установки. Так что просто измените это и перезапустите службу SQL здесь (или перезапустите экземпляр в браузере SQL).

Вторая часть этой проблемы уникальна для SQL Server 2017 CTP 2.0 при использовании SQL Server Management Studio V17, и в этом случае SMO переключился на использование « sys.dm_os_enumerate_fixed_drives » вместо старого « xp_fixeddrives », чтобы получить информацию о свободном пространстве вашего локального диска. , Чтобы обойти это, перейдите к МЕНЕДЖЕРУ УСТРОЙСТВА и временно отключите указанный привод (в моем случае это был диск «G», который является просто моим приводом DVD-ROM).


0

Эта проблема меня тоже раздражала. У меня есть 5 дБ, подключенных к моему экземпляру SQL Server, 3 из которых работают нормально, но 2 из которых жалуются

Операционная система возвратила ошибку 21 (устройство не готово) к SQL Server во время чтения со смещением 0x00000000204000 в файле 'E: \ xxxxxxxx.mdf'

Вот мое решение.

  1. Включите Services.msc , найдите службу с именем SQL Server (имя экземпляра) , щелкните правой кнопкой мыши и перезапустите ее.
  2. Вернитесь к ssms, обновите свою базу данных, и все должно работать.

С другой стороны, я попробовал использовать автономный / онлайн-метод. Это не сработало в моем случае. Brute force перезапускает службу sqlserver. это может быть проблемой для тех, чья ставка на отключение всех баз данных слишком высока. Однако, если вы просто делаете локальное развитие, как я, тогда это решение должно подойти.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.