Операційна система повернула помилку 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.

Відповіді:


15

Кожен раз, коли я перезавантажую Windows, для деяких баз даних з’являється ця помилка. (Помилка ОС 21 - Пристрій не готовий)

Це пов’язано з тим, що диск перебуває в режимі офлайн або не є в Інтернеті ні в момент запуску SQL Server, ні в перехідних станах після того, як SQL Server був у мережі.

3. Якщо я перезавантажую SQL Server, помилки зникають

Так, оскільки бази даних були перероблені всередині SQL Server. Ви також можете в режимі офлайн-> базувати дані в Інтернеті, і вона запрацює, якщо припустити, що дисковий пристрій виправлено.

Це можна легко відтворити в тестовому середовищі, поставивши базу даних на диск, відключивши диск, запустивши запит вибору (щоб отримати помилку), повернути диск в Інтернет і помітити, що вибір все-таки не вдається з тією ж помилкою. Базу даних потрібно буде переглядати, щоб знову працювати і не отримати помилку ОС 21.

Шо тобі варто зробити?

Попросіть когось простежити вікна, щоб зрозуміти, чому він не з’являється в Інтернеті спочатку або чому він переходить у режим офлайн (будь-який перехід стану) або чому він готовий до Windows, але насправді це не так (можливо, інші драйвери потрібно завантажити це).

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


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

Змініть режим запуску з автоматичного на затримку. Це дозволить переконатися, що 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".
  • Мені не потрібні можливості Analytics "Launchpad". Тож я відключив цю послугу.
  • Тепер "MSSQLSERVER" запускається із затримкою і може знайти файли диска D:.

1

Повна помилка, яку я отримав під час підключення до локального екземпляра MS SQL за замовчуванням (2017) через MSSMS:

Операційна система повернула помилку 21 (пристрій не готовий.) До SQL Server під час зчитування при зміщенні 0x000000000ae000 у файлі 'D: \ MSSQL \ DATA \ tempdev.mdf'. Додаткові повідомлення в журналі помилок SQL Server та журналі помилок операційної системи можуть надати більш детальну інформацію. Це сувора помилка на системному рівні, яка загрожує цілісності бази даних і повинна бути негайно виправлена. Пройдіть повну перевірку узгодженості бази даних (DBCC CHECKDB). Ця помилка може бути викликана багатьма факторами; Докладніше див. у розділі Книги SQL Server Online. (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'- увімкнено).

0

Я неодноразово стикався з однією проблемою і думав, що повинен поділитися своїм рішенням (незважаючи на вже надані відповіді):

Отже, у мене є два екземпляри SQL (SQL 2008 та SQL 2017). Помилка не виявляється в моєму екземплярі SQL08, але в SQl17. Це викликано "обліковими даними облікових записів", наданими під час встановлення / налаштування кожного екземпляра SQL:

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

Це можна побачити у службі Windows. SQL08 було встановлено для використання "Локального облікового запису системи", тоді як для невдалого SQL17 під час налаштування було встановлено значення "МЕТОДНИЙ ОБЛІК". Тому просто змініть це і перезапустіть службу 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

Ця проблема роздратувала і мене. У мене на екземплярі SQL Server є 5 dbs, 3 з яких добре працюють, але 2 з них скаржаться

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

Ось моє рішення.

  1. Увімкніть Services.msc , знайдіть службу під назвою SQL Server (ім'я екземпляра) , клацніть правою кнопкою миші та перезапустіть її.
  2. Поверніться до ssms, оновіть db, і все має працювати.

З іншого боку, я намагався взяти db офлайн / онлайн метод. У моєму випадку це не спрацювало. Груба сила перезапуску служби sqlserver працювала чудово. це може бути проблемою для тих, у кого завищена передача всіх dbs в автономному режимі занадто висока. Однак якщо ви просто займаєтесь місцевим розвитком, як я, то це рішення повинно бути добре.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.