DBCC CheckDB Das Betriebssystem hat den Fehler 21 zurückgegeben (Das Gerät ist nicht bereit.)

DBCC CheckDB Das Betriebssystem hat den Fehler 21 zurückgegeben (Das Gerät ist nicht bereit.)

Das Betriebssystem hat während eines Lesevorgangs am Offset 0x0000000001c000 in der Datei „E:\SQL Database\S*****d\NewAdvWorks.mdf“ den Fehler 21 (Das Gerät ist nicht bereit) an SQL Server zurückgegeben. Weitere Nachrichten im SQL Server-Fehlerprotokoll und im Systemereignisprotokoll können weitere Einzelheiten liefern. Dies ist ein schwerwiegender Fehler auf Systemebene, der die Datenbankintegrität gefährdet und sofort behoben werden muss. Führen Sie eine vollständige Datenbankkonsistenzprüfung durch (DBCC CHECKDB). Dieser Fehler kann viele Ursachen haben. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

Antwort1

Was bei mir funktioniert hat:

alter database [database_name] set offline

...warte ein paar Sekunden...

alter database [database_name] set online 

Dies ist besser als ein Neustart von SQL Server, da durch einen Neustart von SQL Server alle Datenbanken offline genommen werden (nicht nur die Datenbank, auf die nicht zugegriffen werden kann).

Antwort2

Heute ist mir derselbe Fehler begegnet. Das Problem wurde durch einen Neustart des SQL Server-Dienstes behoben.

Das SQL Server-Fehlerprotokoll und das Windows-Ereignisprotokoll zeigten den gleichen Fehler:

Das Betriebssystem hat während eines Lesevorgangs am Offset 0x00000000026000 in der Datei „blah.mdf“ den Fehler 21 (Das Gerät ist nicht bereit.) an SQL Server zurückgegeben. Weitere Nachrichten im SQL Server-Fehlerprotokoll und im Systemereignisprotokoll können weitere Einzelheiten liefern. Dies ist ein schwerwiegender Fehler auf Systemebene, der die Datenbankintegrität gefährdet und sofort behoben werden muss. Führen Sie eine vollständige Datenbankkonsistenzprüfung durch (DBCC CHECKDB). Dieser Fehler kann viele Ursachen haben. Weitere Informationen finden Sie in der SQL Server-Onlinedokumentation.

Und:

Fehler: 823, Schweregrad: 24, Status: 2

Nachdem ich die Antwort von Robert van den Berg gelesen habe, würde ich versuchen, die Datenbank zuerst offline und dann online zu nehmen, wenn Sie andere Datenbanken haben, die Sie online halten müssen.

Antwort3

Lesen Sie zunächst die Protokolle, die in der Fehlermeldung angegeben wurden.

Versuchen Sie dann, den Server zurückzusetzen, und führen Sie es dann DBCC CheckDBerneut aus.

Antwort4

In meinem Fall konnte ich verwenden

exec sp_detach_db [dbName];

gefolgt von

exec sp_attach_db [dbName] , @filename1 = N'U:\mdf\dbName.mdf' , @filename2 = N'G:\ldf\dbName_log.ldf';

für 30 Datenbanken unter SQL 2017. Obwohl der „Trennen“-Prozess einen Fehler auslöste, hat SQL die Datenbank getrennt.

Ich habe es verwendet, select db_name(database_id), * from sys.master_files bevor ich mit der Trennung begonnen habe, sodass ich den Anfügevorgang ausschreiben konnte, da ich 30 Datenbanken in diesem Zustand hatte.

In meinem Fall habe ich den Auslöser gefunden. Ich hatte am Abend zuvor zwei Volumes „erweitert“. Die Datenträgerverwaltung hatte gemeldet, dass das Volume zu diesem Zeitpunkt nicht erweitert werden konnte. Ich hatte beschlossen, auf ein Wartungsfenster zu warten, um es erneut zu versuchen, und es gab noch keine Fehler.

Fünf Stunden später wurde ein Backup gestartet, das VSS verwendete. Ich bin davon überzeugt, dass die Kombination aus einem fehlgeschlagenen „Volume erweitern“ und dem VSS-Snapshot die Volumes in einen ungewöhnlichen Zustand versetzt hat.

verwandte Informationen