Zusammenfassung: Das Problem der Unzugänglichkeit der SQL-Datenbank ist das häufigste Problem, mit dem Datenbankbenutzer konfrontiert sind. In diesem Problemlösungsblog wird also SQL Server Detected A Logical Consistency-Based I/O Error behandelt. Wir werden den Grund für diesen Fehler und die bestmöglichen Möglichkeiten zur Lösung dieses Problems besprechen. Um auf die unzugängliche SQL-Datenbank zuzugreifen und sie wiederherzustellen, kann der Benutzer die Hilfe des Recover SQL Server Database Tools in Anspruch nehmen.
Gründe hinter dem E/A-Fehler, der auf der logischen Konsistenz der Datenbank basiert:
- Plötzliches Herunterfahren/Absturz des Systems oder erzwungenes Herunterfahren
- SQL-Administrator versucht, SQL-Daten abzufragen oder zu ändern
An dem Punkt, an dem eine SQL Server-Datenbank auf einen logischen konsistenzbasierten Fehler stößt, besteht der erste Schritt darin, den Fehler zu erkennen.
Die begleitenden Strategien können beim Auffinden des Fehlers helfen:
- Verwenden Sie das Best Practice Analyzer (BPA)-Tool – das BPA-Tool hilft bei der Identifizierung grundlegender Konsistenzfehler. Dieses Tool ist explizit für die SQL-Variante, was bedeutet, dass BPA 2008 mit SQL 2008 usw. zugänglich ist.
- Überprüfen Sie das Windows-System auf Framework-Ebene des Ereignisprotokolls, treiber- oder festplattenbezogene Fehler
- Überprüfen Sie die Seriosität des Datei-Frameworks, indem Sie chkdsk order ausführen
- Führen Sie die von Hardwareherstellern empfohlene Diagnose für das Framework oder die Festplatte aus
- Führen Sie für SQL Server 2008 das Dienstprogramm SQLIOSim auf dem Laufwerk der Datenbank aus, das einen E/A-Fehler gemeldet hat.
- Wenden Sie sich an den Hardwareverkäufer oder Gerätehersteller, um zu überprüfen, ob die Hardwarevoraussetzungen mit den E/A-Anforderungen des SQL-Servers übereinstimmen.
Manuelle Maßnahmen zur Behebung von SQL Server hat einen auf logischer Konsistenz basierenden E/A-Fehler erkannt
Technik 1 – Überprüfen Sie die Hardware und das Anwendungsnetzwerk
Datenbankunregelmäßigkeitsfehler können behoben werden, indem ein geeignetes Netzwerk zwischen der Datenbank und der SQL-Anwendung aufgebaut wird.
Technik 2 – Wiederherstellung aus SQL-Sicherung
Die am besten erreichbare Lösung besteht darin, ein Backup für die Wiederherstellung der SQL-Datenbank zu verwenden. Stellen Sie vor der Wiederherstellung aus der Sicherung Folgendes sicher:
- Sie haben eine laufende vollständige Sicherung
- Die Sicherung wird nur vor der Beschädigung aktualisiert und ist nicht sehr alt, um einen strategischen Abstand zum grundlegenden Datenverlust zu wahren.
- Korruption findet auf Seitenebene statt, da Korruptionsprobleme auf Seitenebene mithilfe der Wiederherstellung auf Seitenebene behoben werden können.
Schritt 1: Verwenden Sie den beiliegenden Auftrag zur Wiederherstellung der SQL-Datenbank aus einer vollständigen Sicherung
Sichern Sie das Transaktionsprotokoll
Backup LOG PageLevelRestores TO
Plate =‘g:PageLevelRestores_LOG1.bak’
MIT INIT
LOS
Schritt 2: Führen Sie die Wiederherstellungsänderung durch, um die Fortschritte online zu spiegeln.
Das Ende des Protokolls sichern…
Backup LOG PageLevelRestores TO
Circle =‘g:PageLevelRestores_LOG_TAIL.bak’
MIT INIT
LOS
Hinweis:Es gibt keinen zwingenden Grund, die vollständige SQL Server-Datenbank wiederherzustellen, wenn die Beschädigung an eine einzelne Seite gebunden ist. Sie können die Datenbank aus dem zugänglichen Backup für die unterminierte Seite wiederherstellen. Die Durchführung von Begleitaufträgen hilft bei der Wiederherstellung der Sicherung für eine einzelne Seite:
Stellen Sie alle zugänglichen Protokollsicherungen in der richtigen Anfrage wieder her
Restore LOG PageLevelRestores FROM
Circle =‘g:PageLevelRestores_LOG1.bak’
MIT NORECOVERY
LOS
Stellen Sie abschließend die Tail-Log-Sicherung wieder her
Restore LOG PageLevelRestores FROM
Circle =‘g:PageLevelRestores_LOG_TAIL.bak’
MIT NORECOVERY
LOS
Abschließend fertig mit der Wiederherstellungssequenz
DATENBANK PageLevelRestores MIT WIEDERHERSTELLUNG wiederherstellen
LOS
Wenn die Datenbanksicherung die SQL-Datenbank wiederhergestellt hat, führen Sie die Abfrage DBCC CHECKDB erneut aus, um zu sehen, ob die Select-Proklamation ohne auf der logischen Konsistenz basierenden E/A-Fehler der SQL-Datenbank vorherrscht. Dieser Auftrag achtet zusätzlich darauf, dass in dieser Tabelle kein Datenverlust auftritt.
Einschränkungen der SQL-Datenbanksicherung:
- Es ist absurd zu erwarten, dass eine Wiederherstellung aus einer SQL-Datenbanksicherung durchgeführt wird, wenn die verfügbare Sicherung veraltet ist.
- Für den unwahrscheinlichen Fall, dass ein auf logischer Konsistenz basierender E/A-Fehler über die SQL Server-Datenbank verteilt wird, ist diese Strategie an diesem Punkt nicht legitim.
- In Situationen, in denen die fehlerhafte Seite in einem nicht geclusterten Index vorhanden ist, kann die SQL-Datenbank repariert werden, indem der Index der SQL-Datenbank gelöscht und neu erstellt wird.
Technik 3:Beschädigte SQL-Datenbank mit REPAIR_ALLOW_DATA_LOSS reparieren
REPAIR_ALLOW_DATA_LOSS ist die feste Basisstufe für die analysierten Fehler.
Hinweise:Führen Sie vor der Verwendung von REPAIR_ALLOW_DATA_LOSS die folgenden Schritte aus:
Erstellen Sie eine Sicherungskopie der SQL Server-Datenbank und speichern Sie sie unter einem anderen Namen
Versetzen Sie die SQL-Datenbank in den Einzelbenutzermodus
Holen Sie sich die Anzahl aller Tabellendatensätze, indem Sie die begleitenden Befehle verwenden
Proklamiere @COUNT INT
Proklamieren Sie @SQL VARCHAR(2000)
Erstellen Sie TABLE #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)
Proclaim TINFO_CUR CURSOR FOR
TABELLENNAME AUS INFORMATION_SCHEMA.TABLES AUSWÄHLEN
WHERE TABLE_TYPE=’BASE TABLE’
OPEN TINFO_CUR
Weiter von TINFO_CUR IN @T_Name
WÄHREND @@FETCH_STATUS =0
Starten
SET @SQL=’INSERT INTO #T_Info(T_Name,D_Count) SELECT ”’[email protected]_Name+”’,COUNT(*) FROM ‘[email protected]_Name+”
AUSFÜHREN (@SQL)
Weiter von TINFO_CUR IN @T_Name
ENDE
TINFO_CUR SCHLIESSEN
DEALLOCATE TINFO_CUR
SELECT * FROM #T_Info ORDER BY T_NAME
Die begleitenden Fortschritte helfen dabei, die SQL-Datenbank zu reparieren und kohärente konsistente E/A-Fehler zu beheben:
Führen Sie den Befehl aus:
DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)
Sobald die SQL-Datenbank repariert ist, wiederholen Sie das Verfahren von „Table Record Count“ und stellen Sie es der alten Datensatzanzahl gegenüber.
Es darf kein Unterschied zwischen der anfänglichen und der letzten Tabellendatensatzzählung bestehen.
Einschränkungen :
REPAIR_ALLOW_DATA_LOSS kann den auf der logischen Konsistenz der Datenbank basierenden E/A-Fehler beheben, es gibt jedoch ein erhebliches Problem des Datenverlusts, bei dem eine Verbindung zum Verlust grundlegender Daten führen kann.
Wahllösung
Wenn die oben genannten Techniken nicht funktionieren, versuchen Sie es an diesem Punkt mit einem SysTools SQL-Dateireparatur-Tool . Dieses Tool repariert beschädigte MDF- und NDF-Dateien und stellt alle Datenbankobjekte wieder her. Darüber hinaus hilft dieses Tool dabei, alle Datenbankobjekte wie Tabellen, Trigger, Indizes, Schlüssel, Regeln, gelöschte Dateien und gespeicherte Prozeduren wiederherzustellen. Es ist eine unglaubliche Hilfe mitten in einem Notfall, da das Produkt eine unverwechselbare Reparaturlösung bietet und alle SQL-Datenbankversionen unterstützt.
Schlussfolgerung
Lesen Sie auch: So überprüfen Sie, ob die SQL-Datenbank beschädigt ist
In diesem Beitrag haben wir den Grund für SQL Server Detected A Logical Consistency-Based I/O Error und die Techniken zur Behebung dieses Problems beschrieben.
Angesichts des Fehlers haben wir versucht, die richtige Technik zu finden. Für den Fall, dass Hardware oder Framework für den Fehler verantwortlich sind, ist es vorgeschrieben, die hardwarebezogenen Probleme zu ermitteln, und falls DBCC CHECKDB einen Konsistenzfehler meldet, versuchen Sie zu diesem Zeitpunkt, die SQL-Datenbank mithilfe einer aktualisierten Sicherung wiederherzustellen.
Wenn das Problem nicht mit Hardware und Sicherung behoben wird, versuchen Sie an diesem Punkt, die Datenbank mit Hilfe von REPAIR_ALLOW_DATA_LOSS zu reparieren. Dies ist der grundlegende Grad der Behebung, um alle Fehler von CHECKDB zu ermitteln, aber dies bedeutet nicht, dass der Fehler wirklich behoben wird. Außerdem kann es zu Datenverlust kommen.