オペレーティングシステムがエラー21(デバイスの準備ができていない)を返しました。

Windowsを再起動するたびに、いくつかのデータベースで、このエラーが発生します。

オペレーティングシステムがエラー21(デバイスの準備ができていません)を返しました。

1.1. chkdsk /rでディスクをチェックしましたが、不良セクタはありませんでした。 2.2.DBCC CHECKDB`を実行しましたが、エラーはありませんでした:

    *(CHECKDBはデータベースで0個のアロケーションエラーと0個の一貫性エラーを発見しました)* 3.

3.SQL Serverを再起動すると、エラーは消えます。

Windows10、SQL Server 2016 Expressです。

Windowsを再起動するたびに、いくつかのデータベースでこのエラーが出ます。(OS Error 21 - Device not ready)。

SQL Server起動時にディスクがオフライン、またはオンラインでなかった、またはSQL Serverがオンラインになった後に状態が遷移したことが原因です。

3.SQLサーバーを再起動すると、このエラーは消えます。

SQL Server内部でデータベースが再マウントされているためです。また、データベースをオフライン>オンラインにしても、ディスクデバイスが修正されていることを前提に、動作するはずです。

テスト環境では、ディスク上にデータベースを置き、ディスクを無効にし、selectクエリを実行し(エラーを取得)、ディスクをオンラインに戻し、同じエラーでselectが失敗することを確認すれば、簡単に再現することができます。OSエラー21が発生しないようにするには、データベースを再マウントする必要があります。

どうすればよいでしょうか。

誰かにWindowsのトレースをしてもらい、なぜ最初にオンラインにならないのか、なぜオフラインになるのか(どんな状態の変化でも)、なぜWindowsに準備ができていると表示されているが実際には準備ができていないのか(たぶん他のドライバーをロードする必要があるのでしょう)を調べてもらってください。

さらに、アンチウィルス、ホスト侵入保護などのディスクフィルタドライバが最新であることを確認してください。

解説 (2)

原因がわかったような気がします。

ほとんどの場合、問題は "高速起動" 電源オプション に起因しています。

高速スタートアップです。

これは起動時間を短縮するためのWindowsの技術で、高速スタートアップはコールドシャットダウンとハイバネート機能の要素を兼ね備えています。

長所と短所については、別の記事をご覧ください。

これを無効にしたところ、問題が解決したようです。

解説 (1)

私は何度も同じ問題に遭遇しており、(すでに提供されている回答はともかく)私の解決策を共有すべきだと思いました。

私は2つのSQLインスタンスを持っています(SQL 2008とSQL 2017)。エラーは、私のSQL08インスタンスではなく、SQl17で表示されます。これは、各SQLインスタンスのインストール/セットアップ時に提供された "account Credentials" に起因しています。

[ここに画像の説明を入力][1]

これは、Windowsサービスの項目で確認することができます。SQL08はローカル・システム・アカウントを使用するように設定されていますが、失敗したSQL17はセットアップ時に"NETWORK ACCOUNT"に設定されていました。 これを変更して、ここでSQLサービスを再起動します(またはSQLブラウザでインスタンスを再起動します)。

この問題の2つ目は、SQL Server 2017 CTP 2.0 で SQL Server Management Studio V17 を使用している場合に特有の問題で、この場合、SMO はローカル ディスクの空き領域情報を取得するのに、従来の "xp_fixeddrives" の代わりに "sys.dm_os_enumerate_fixed_drives" を使うように変わっています。 これを回避するには、DEVICE MANAGERに移動して、引用したドライブ(私の場合、DVD-ROMドライブであるGドライブ)を一時的に無効にします。

解説 (0)