Denne artikel deler vigtigheden af indekser i en SQL-database. Det giver også en kort oversigt over de klyngede og ikke-klyngede indekser. Yderligere diskuterer artiklen årsager til SQL Server-indekskorruption, faktorer til at identificere et beskadiget indeks og metoder til at rette det.
Indekser i SQL Server hjælper med at fremskynde processen med at hente rækker fra en tabel eller visning. Det korrekte valg af indekser er dog afgørende for at forbedre forespørgselsydeevnen. SQL Server understøtter klyngede og ikke-klyngede indekser. Korruption i nogen af disse indekser kan forårsage forsinkelse i hentning af rækker. Du kan også få andre eller slettede værdier, mens du henter nogle rækker. Derudover kan de længst kørende forespørgsler blive defekte på grund af korrupte indekser på tabeller.
Uanset hvordan situationen er, skal du reparere korruption i indekser i god tid for at forhindre, at SQL Server-database-workflowet bliver påvirket.
Før vi diskuterer metoderne til fejlfinding af indekskorruption, lad os kort gennemgå klyngede og ikke-klyngede indekser.
Oversigt over grupperede og ikke-klyngede indekser
Anvendelse af en primær nøglebegrænsning på en kolonne i en tabel opretter et klynget indeks på kolonnen. Et klynget indeks sorterer dataene fysisk og gemmer dataene i en tabel baseret på dens definerede indeksnøgle. Da vi kun kan sortere data i én rækkefølge, er det ikke muligt at have mere end ét klynget indeks.
Et ikke-klynget indeks sorterer og gemmer data separat fra rækkerne i en tabel. I det væsentlige er det en kopi af kolonner med tabeldata, der har links til den tilknyttede tabel. I modsætning til klyngede indekser kan du have et eller flere ikke-klyngede indekser.
Hvad forårsager SQL Server-indekskorruption?
Indekser kan blive stærkt fragmenterede over tid (på grund af masseindsættelse, opdatering eller sletning) og kræver periodisk vedligeholdelse. Fragmenterede indekser kan forårsage dårlig forespørgselsydeevne og kan blive beskadiget. Faktorer som opgradering af SQL Server-versionen, fejl i SQL-programmet, pludselig nedlukning af systemet osv. kan også føre til korruption af SQL Server-indekset. Især kan kørsel af en 'kompleks UPDATE-sætning med NOLOCK-tip' på tabellen forårsage ikke-klyngede indekskorruption.
Før vi diskuterer metoderne til at reparere korruption i SQL Server-indekser, lad os se, hvordan man identificerer korrupte indekser.
Hvordan identificerer man korruption i SQL Server-indekset?
Du kan afgøre, om et indeks er beskadiget ved hjælp af følgende metoder:
- Hent rækker med forskellige eller slettede værdier, og kør derefter en 'ROWID'-kommando for at identificere eventuelle manglende poster. Du kan også spore de manglende poster ved at kontrollere SQL-fejlloggen.
- Hvis du kører DBCC CHECKDB, rapporteres følgende fejlmeddelelse, hvis du har et beskadiget ikke-klynget indeks.
Besked 2511, niveau 16, tilstand 1, linje 31
Tabelfejl:Objekt-ID 613577224, indeks-ID 2, partitions-ID 72057594041401344,
alloc enheds-id 72057594047037440 (indtast data i rækken).
Nøgler ude af drift på side (1:264), plads 2 og 3.
- Hvis du har et klynget indeks, kan du modtage følgende meddelelse, der viser fejl:
Server:Msg 1902, niveau 16, tilstand 3, linje 1
Kan ikke oprette mere end ét klynget indeks på tabellen 'Tabelnavn'. Slip det eksisterende klyngede indeks 'Clustered Index Name', før du opretter et andet.
Hvordan repareres SQL Server-indekskorruption?
Følg disse gratis metoder, du kan bruge til at reparere SQL Server-indekskorruption:
Metode 1 – Gendan fra sikkerhedskopi
Uanset om du har mistanke om korruption i et klynget eller ikke-klynget indeks, skal du bruge backup til at gendanne de berørte data, før korruption opstod.
Gendannelse fra backup vil dog ikke fungere, hvis sikkerhedskopien mangler de seneste opdateringer. Det kan endda føre til tab af data. I så fald kan du prøve den næste metode.
Metode 2 – Drop og genskab beskadiget indeks
Bemærk: Dette virker kun for ikke-klyngede indekser.
Slet alt eller specifikt indeks, der viser korruption ved at følge disse trin:
- Opret forbindelse til en serverinstans i SQL Server Management Studio (SSMS) .
- På 'Object Explorer' vindue, skal du udvide databasen, der indeholder tabellen med beskadiget indeks.
- Højreklik på tabellen, vælg 'Script-tabel som' valgmulighed, skal du holde markøren over 'DROP And CREATE To' og klik på Ny forespørgselseditor
Hvis du undlader at genskabe beskadigede indekser, kan du prøve at reparere indekserne.
Metode 3 – Reparer SQL-databasen
Som en sidste udvej skal du køre kommandoen DBCC CHECKDB med 'REPAIR_ALLOW_DATA_LOSS' for databasen, der har ødelagt (klynget eller ikke-klynget) indeks på en tabel. Men dette kan resultere i tab af data. Som en alternativ løsning kan du prøve at bruge et SQL-reparationsværktøj som Stellar Repair til MS SQL. Værktøjet hjælper med at reparere databasefiler (.mdf og .ndf) og gendanner indekser, visninger, lagrede procedurer og alle andre komponenter. Du kan importere de gendannede indekser og andre databaseobjekter direkte til en live eller ny database.
Download demoversionen af SQL-databasereparationssoftwaren for at få vist de gendannede indekser, før du gemmer den reparerede fil.
Konklusion
Hvis du har mistanke om korruption i et indeks, skal du bruge de faktorer, der er beskrevet i artiklen, til at afgøre, om indekset er beskadiget eller ej. Tjek også de mulige årsager bag SQL Server-indekskorruption og metoder til at reparere korruption. Metoderne omfatter gendannelse af database fra backup, droppe og genskabe indekser og reparation af databasen og gendannelse af alle dens komponenter. Du kan også overveje at bruge et SQL-reparationsværktøj til at rette de korrupte klyngede og ikke-klyngede SQL-indekser og gendanner utilgængelige databaseobjekter.