Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kostenlose Methoden zur Reparatur von SQL Server-Indexbeschädigungen

Dieser Artikel teilt die Bedeutung von Indizes in einer SQL-Datenbank. Außerdem bietet es einen kurzen Überblick über die gruppierten und nicht gruppierten Indizes. Darüber hinaus behandelt der Artikel Gründe für die Beschädigung von SQL Server-Indizes, Faktoren zum Identifizieren beschädigter Indizes und Methoden zu ihrer Behebung.

Indizes in SQL Server beschleunigen den Prozess des Abrufens von Zeilen aus einer Tabelle oder Ansicht. Die richtige Auswahl der Indizes ist jedoch entscheidend, um die Abfrageleistung zu verbessern. SQL Server unterstützt gruppierte und nicht gruppierte Indizes. Eine Beschädigung in einem dieser Indizes kann zu Verzögerungen beim Abrufen von Zeilen führen. Außerdem erhalten Sie beim Abrufen einiger Zeilen möglicherweise andere oder gelöschte Werte. Darüber hinaus können die am längsten laufenden Abfragen aufgrund beschädigter Indizes für Tabellen fehlerhaft werden.

Unabhängig von der Situation müssen Sie Beschädigungen in Indizes rechtzeitig reparieren, um zu verhindern, dass der Arbeitsablauf der SQL Server-Datenbank beeinträchtigt wird.

Bevor wir die Methoden zur Fehlerbehebung bei Indexbeschädigungen besprechen, lassen Sie uns einen kurzen Überblick über geclusterte und nicht geclusterte Indizes geben.

Übersicht über geclusterte und nicht geclusterte Indizes

Das Anwenden einer Primärschlüsseleinschränkung auf eine Spalte innerhalb einer Tabelle erstellt einen gruppierten Index für die Spalte. Ein gruppierter Index sortiert die Daten physisch und speichert die Daten basierend auf seinem definierten Indexschlüssel in einer Tabelle. Da wir Daten nur in einer Reihenfolge sortieren können, ist es nicht möglich, mehr als einen geclusterten Index zu haben.

Ein Nonclustered-Index sortiert und speichert Daten jedoch getrennt von den Zeilen in einer Tabelle. Im Wesentlichen handelt es sich um eine Kopie von Tabellendatenspalten mit Verknüpfungen zu der zugehörigen Tabelle. Im Gegensatz zu gruppierten Indizes können Sie einen oder mehrere nicht gruppierte Indizes haben.

Was verursacht eine Beschädigung des SQL Server-Index?

Indizes können im Laufe der Zeit stark fragmentiert werden (aufgrund von Masseneinfügungs-, Aktualisierungs- oder Löschvorgängen) und müssen regelmäßig gewartet werden. Fragmentierte Indizes können eine schlechte Abfrageleistung verursachen und beschädigt werden. Auch Faktoren wie das Aktualisieren der Version von SQL Server, Fehler im SQL-Programm, plötzliches Herunterfahren des Systems usw. können zu einer Beschädigung des SQL Server-Index führen. Insbesondere das Ausführen einer „komplexen UPDATE-Anweisung mit NOLOCK-Hinweis“ für eine Tabelle kann zu einer Beschädigung des nicht gruppierten Index führen.

Bevor wir die Methoden zum Reparieren von Beschädigungen in SQL Server-Indizes besprechen, sehen wir uns an, wie beschädigte Indizes identifiziert werden.

Wie erkennt man Korruption im Index von SQL Server?

Mit den folgenden Methoden können Sie feststellen, ob ein Index beschädigt ist:

  • Zeilen mit unterschiedlichen oder gelöschten Werten abrufen und dann einen „ROWID“-Befehl ausführen, um fehlende Einträge zu identifizieren. Sie können die fehlenden Einträge auch nachverfolgen, indem Sie das SQL-Fehlerprotokoll überprüfen.
  • Das Ausführen von DBCC CHECKDB meldet die folgende Fehlermeldung, wenn Sie einen beschädigten Nonclustered-Index haben.

Nachricht 2511, Ebene 16, Zustand 1, Zeile 31

Tabellenfehler:Objekt-ID 613577224, Index-ID 2, Partitions-ID 72057594041401344,

Zuordnungseinheit ID 72057594047037440 (geben Sie IN-Zeilendaten ein).

Schlüssel auf Seite (1:264), Slots 2 und 3, nicht in der richtigen Reihenfolge.

  • Wenn Sie einen geclusterten Index haben, erhalten Sie möglicherweise die folgende Fehlermeldung mit einem Fehler:

Server:Nachricht 1902, Ebene 16, Status 3, Zeile 1

Es kann nicht mehr als ein gruppierter Index für die Tabelle „Tabellenname“ erstellt werden. Löschen Sie den vorhandenen Clustered-Index „Clustered Index Name“, bevor Sie einen neuen erstellen.

Wie repariert man eine Beschädigung des SQL Server-Index?

Befolgen Sie diese kostenlosen Methoden, die Sie verwenden können, um eine Beschädigung des SQL Server-Index zu reparieren:

Methode 1 – Aus Backup wiederherstellen

Unabhängig davon, ob Sie eine Beschädigung in einem gruppierten oder nicht gruppierten Index vermuten, verwenden Sie eine Sicherung, um die betroffenen Daten wiederherzustellen, bevor eine Beschädigung aufgetreten ist.

Die Wiederherstellung aus dem Backup funktioniert jedoch nicht, wenn dem Backup die neuesten Updates fehlen. Es kann sogar zu Datenverlust führen. Versuchen Sie in diesem Fall die nächste Methode.

Methode 2 – Beschädigten Index löschen und neu erstellen

Hinweis: Dies funktioniert nur für nicht geclusterte Indizes.

Löschen Sie alle oder bestimmte Indizes, die eine Beschädigung aufweisen, indem Sie diesen Schritten folgen:

  • Verbinden Sie sich mit einer Serverinstanz in SQL Server Management Studio (SSMS) .
  • Im Objekt-Explorer Erweitern Sie im Fenster die Datenbank, die die Tabelle mit dem beschädigten Index enthält.
  • Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie „Skripttabelle als“ aus Option, bewegen Sie den Mauszeiger über 'DROP And CREATE To' und klicken Sie auf Neuer Abfrage-Editor

Wenn Sie beschädigte Indizes nicht neu erstellen können, können Sie versuchen, die Indizes zu reparieren.

Methode 3 – Reparieren Sie die SQL-Datenbank

Führen Sie als letzten Ausweg den Befehl DBCC CHECKDB mit „REPAIR_ALLOW_DATA_LOSS“ für die Datenbank aus, die einen beschädigten (geclusterten oder nicht geclusterten) Index für eine Tabelle hat. Dies kann jedoch zu Datenverlust führen. Versuchen Sie als alternative Lösung, ein SQL-Reparaturtool wie Stellar Repair for MS SQL zu verwenden. Das Tool hilft bei der Reparatur von Datenbankdateien (.mdf und .ndf) und stellt Indizes, Ansichten, gespeicherte Prozeduren und alle anderen Komponenten wieder her. Sie können die wiederhergestellten Indizes und andere Datenbankobjekte direkt in eine aktive oder neue Datenbank importieren.

Laden Sie die Demoversion der SQL-Datenbankreparatursoftware herunter, um eine Vorschau der wiederherstellbaren Indizes anzuzeigen, bevor Sie die reparierte Datei speichern.

Schlussfolgerung

Wenn Sie eine Beschädigung in einem Index vermuten, verwenden Sie die im Artikel beschriebenen Faktoren, um festzustellen, ob der Index beschädigt ist oder nicht. Informieren Sie sich auch über die möglichen Gründe für die Beschädigung des SQL Server-Index und die Methoden zur Reparatur der Beschädigung. Die Methoden umfassen das Wiederherstellen der Datenbank aus einer Sicherung, das Löschen und Neuerstellen der Indizes sowie das Reparieren der Datenbank und das Wiederherstellen aller ihrer Komponenten. Sie können auch ein SQL-Reparaturtool verwenden, um die beschädigten geclusterten und nicht geclusterten SQL-Indizes zu reparieren und unzugängliche Datenbankobjekte wiederherzustellen.