Zwei beschädigte Indizes, die von DBCC CheckTable gefunden wurden

7

Ich frage mich, ob dieses Problem durch Löschen / Neuerstellen der beiden Indizes lösbar ist. Beide werden selten verwendet, nicht gruppiert, nicht PK, nicht FK-Indizes.

Hier ist die dbcc-Ausgabe:

Tabellenfehler: Tabelle 'Elemente' (ID 1954106002). Die Datenzeile enthält keine übereinstimmende Indexzeile im Index 'IX_Advertise_BrandCopy_Price_Stock' (ID 69). Mögliche fehlende oder ungültige Schlüssel für die Indexzeilenübereinstimmung:

Nachricht 8955, Ebene 16, Status 1, Zeile 1

Datenzeile (1: 11226494: 9) identifiziert durch (Id = 11078215) mit den Indexwerten 'AdvertiseFlag = 1 und BrandCopyParentId = 0 und NSFPPrice = 137.50 und NSFPQtyInStock = 0 und Id = 11078215'.

Nachricht 8951, Ebene 16, Status 1, Zeile 1

Tabellenfehler: Tabelle 'Elemente' (ID 1954106002). Die Datenzeile enthält keine übereinstimmende Indexzeile im Index 'IX_ITEMS_ADVFLAG_PARETN_PRICE_STOCK' (ID 70). Mögliche fehlende oder ungültige Schlüssel für die Indexzeilenübereinstimmung:

Nachricht 8955, Ebene 16, Status 1, Zeile 1

Datenzeile (1: 10834009: 15) identifiziert durch (Id = 8885719) mit den Indexwerten 'AdvertiseFlag = 1 und BrandCopyParentId = 0 und NSFPPrice = 9.30 und NSFPQtyInStock = 0 und Id = 8885719'.

Aushin
quelle

Antworten:

5

Nicht gruppierte Indizes können immer aus der Basistabelle neu erstellt werden. Sie müssen sie nicht fallen lassen, sondern müssen nur das m neu erstellen:

alter index IX_Advertise_BrandCopy_Price_Stock on BrandCopy rebuild;

Natürlich müssen Sie herausfinden, wie sie beschädigt wurden. Meldet Windows E / A-Fehler? Meldet Ihre Laufwerksfirmware Fehler? Sie müssen nachforschen, um herauszufinden, was die Beschädigungen verursacht, und das Problem beseitigen (wahrscheinlich fehlerhafte Hardware, Festplatte oder Speicher).

Remus Rusanu
quelle
2
In meiner (zugegebenermaßen begrenzten) Erfahrung mit Korruption musste ich immer nicht gruppierte Indizes löschen und neu erstellen, da der Wiederherstellungsplan einen Index-Scan (des beschädigten Index) verwendet, da dieser billiger ist als das Scannen der Basistabelle - die Korruption hat es immer getan blieb jedes Mal, wenn ich das versucht habe.
Jon Seigel
Ja, das Problem kehrte kurz darauf zurück. Ich habe unsere Sysops, die Diagnosen auf der (möglicherweise) fehlerhaften Hardware ausführen, Tickets, die beim E / A-Anbieter geöffnet sind, und für alle Fälle ein Ticket bei Microsoft.
Aushin
2
@ JonSeigel: Ja, du hast recht. Bei der Neuerstellung wird derselbe Index wie bei der Quelle verwendet und die Beschädigung beibehalten, da dies ein zentrales Problem ist. Aushin, versuchen Sie fallen zu lassen und zu erstellen ...
Remus Rusanu
3

Ich würde die Datenbank sichern, dann diese beschädigten Indizes löschen und neu erstellen. Führen Sie dann regelmäßig denselben dbcc aus, um das Problem zu überprüfen.


quelle
Das klingt vernünftig, aber ich würde es vorziehen, wenn Sie nicht user2154687 wären. Gibt es Risiken für das Löschen und Wiederherstellen beschädigter Indizes? Ich würde es vorziehen, keine vollständige Wiederherstellung durchführen zu müssen.
Aushin
Da sie meiner Erfahrung nach nicht gruppiert sind, dienen sie eher der Geschwindigkeit als der Integrität der Tabelle. Das einzige Problem beim Neuerstellen von nicht gruppierten Indizes ist die Geschwindigkeit Ihrer Anwendungen beim Neuerstellen. Die Größe der Tabellen bestimmt, wie lange es dauert, sie neu zu erstellen. auch, wenn Ihre Anwendung / Benutzer die Tabellen sperren (Einfügungen / Aktualisierungen), während Sie die Neuindizierung durchführen. Manchmal ist nach Stunden die beste Zeit.