%E3%80%82.png)
ファイル 'E:\SQL Database\S*****d\NewAdvWorks.mdf' のオフセット 0x0000000001c000 の読み取り中に、オペレーティング システムが SQL Server にエラー 21 (デバイスの準備ができていません) を返しました。SQL Server エラー ログおよびシステム イベント ログ内の追加メッセージに、より詳しい情報が記載されている場合があります。これは、データベースの整合性を脅かす重大なシステム レベルのエラー状態であり、すぐに修正する必要があります。完全なデータベース整合性チェック (DBCC CHECKDB) を実行してください。このエラーは、さまざまな要因によって発生する可能性があります。詳細については、SQL Server Books Online を参照してください。
答え1
私にとって効果があったもの:
alter database [database_name] set offline
...数秒お待ちください...
alter database [database_name] set online
SQL Server を再起動すると、アクセスできないデータベースだけでなく、すべてのデータベースがオフラインになるため、これは SQL Server を再起動するよりも優れています。
答え2
今日、同じエラーが発生しました。SQL Server サービスを再起動すると、問題は解決しました。
SQL Server エラー ログと Windows イベント ログに同じエラーが表示されました。
ファイル 'blah.mdf' のオフセット 0x00000000026000 の読み取り中に、オペレーティング システムが SQL Server にエラー 21 (デバイスの準備ができていません) を返しました。SQL Server エラー ログおよびシステム イベント ログ内の追加メッセージに、より詳しい情報が記載されている場合があります。これは、データベースの整合性を脅かす重大なシステム レベルのエラー状態であり、すぐに修正する必要があります。完全なデータベース整合性チェック (DBCC CHECKDB) を実行してください。このエラーは、さまざまな要因によって発生する可能性があります。詳細については、SQL Server Books Online を参照してください。
そして:
エラー: 823、重大度: 24、状態: 2
Robert van den Berg の回答を読んだ後、オンラインで維持する必要がある他のデータベースがある場合は、まずデータベースをオフラインにしてからオンラインにしてみることをお勧めします。
答え3
まず、エラー メッセージに示されているログを読んでください。
次に、サーバーをリセットして、DBCC CheckDB
再度実行してください。
答え4
私の場合は、
exec sp_detach_db [dbName];
に続く
exec sp_attach_db [dbName] , @filename1 = N'U:\mdf\dbName.mdf' , @filename2 = N'G:\ldf\dbName_log.ldf';
SQL 2017 の 30 個のデータベースの場合、「デタッチ」プロセスでエラーが発生しても、SQL はデータベースをデタッチしました。
デタッチを開始する前に使用して
select db_name(database_id), * from sys.master_files
、この状態のデータベースが 30 個あったことを前提に、アタッチ プロセスをスクリプト化できました。
私の場合、きっかけが見つかりました。前の晩に 2 つのボリュームを「拡張」しました。ディスク管理では、その時点でボリュームを拡張できないと報告されていました。メンテナンス ウィンドウを待って再試行することにしましたが、まだエラーは発生していません。
5 時間後、VSS を使用したバックアップが開始されました。失敗した「ボリュームの拡張」と VSS スナップショットの組み合わせにより、ボリュームが異常な状態になったと確信しています。