sql >> Database >  >> RDS >> Sqlserver

Gratis methoden om corruptie van SQL Server-indexen te herstellen

Dit artikel deelt het belang van indexen in een SQL-database. Het biedt ook een kort overzicht van de geclusterde en niet-geclusterde indexen. Verder bespreekt het artikel redenen voor corruptie van de SQL Server-index, factoren om een ​​beschadigde index te identificeren en methoden om deze te repareren.

Indexen in SQL Server helpen het proces van het ophalen van rijen uit een tabel of weergave te versnellen. De juiste keuze van indexen is echter cruciaal om de queryprestaties te verbeteren. SQL Server ondersteunt geclusterde en niet-geclusterde indexen. Corruptie in een van deze indexen kan vertraging veroorzaken bij het ophalen van rijen. U kunt ook andere of verwijderde waarden krijgen tijdens het ophalen van enkele rijen. Bovendien kunnen de langstlopende zoekopdrachten defect raken door beschadigde indexen op tabellen.

Wat de situatie ook is, u moet corruptie in indexen tijdig herstellen om te voorkomen dat de workflow van de SQL Server-database wordt aangetast.

Voordat we de methoden bespreken om indexcorruptie op te lossen, laten we een kort overzicht geven van geclusterde en niet-geclusterde indexen.

Overzicht van geclusterde en niet-geclusterde indexen

Door een primaire-sleutelbeperking toe te passen op een kolom in een tabel, wordt een geclusterde index op de kolom gemaakt. Een geclusterde index sorteert de gegevens fysiek en slaat de gegevens op in een tabel op basis van de gedefinieerde indexsleutel. Aangezien we gegevens slechts in één volgorde kunnen sorteren, is het niet mogelijk om meer dan één geclusterde index te hebben.

Een niet-geclusterde index sorteert en slaat gegevens echter apart van de rijen in een tabel op. In wezen is het een kopie van kolommen met tabelgegevens met koppelingen naar de bijbehorende tabel. In tegenstelling tot geclusterde indexen, kunt u een of meer niet-geclusterde indexen hebben.

Wat veroorzaakt beschadiging van de SQL Server-index?

Indexen kunnen in de loop van de tijd sterk gefragmenteerd raken (vanwege bulkbewerkingen voor invoegen, bijwerken of verwijderen) en vereisen periodiek onderhoud. Gefragmenteerde indexen kunnen slechte queryprestaties veroorzaken en kunnen beschadigd raken. Factoren zoals het upgraden van de versie van SQL Server, bug in het SQL-programma, plotseling afsluiten van het systeem, enz. kunnen ook leiden tot corruptie van de SQL Server-index. Vooral het uitvoeren van een 'complexe UPDATE-instructie met NOLOCK-hint' op de tabel kan niet-geclusterde indexcorruptie veroorzaken.

Voordat we de methoden bespreken om corruptie in SQL Server-indexen te herstellen, laten we eens kijken hoe u beschadigde indexen kunt identificeren.

Hoe identificeer je corruptie in de index van SQL Server?

U kunt op de volgende manieren bepalen of een index beschadigd is:

  • Haal rijen met verschillende of verwijderde waarden op en voer vervolgens een 'ROWID'-opdracht uit om ontbrekende vermeldingen te identificeren. U kunt de ontbrekende vermeldingen ook traceren door het SQL-foutenlogboek te controleren.
  • Als u DBCC CHECKDB uitvoert, wordt het volgende foutbericht gerapporteerd als u een beschadigde niet-geclusterde index heeft.

Msg 2511, Niveau 16, Staat 1, Lijn 31

Tabelfout:Object-ID 613577224, index-ID 2, partitie-ID 72057594041401344,

alloc unit ID 72057594047037440 (type IN-rij data).

Toetsen niet in orde op pagina (1:264), slots 2 en 3.

  • Als u een geclusterde index heeft, ontvangt u mogelijk het volgende bericht met de foutmelding:

Server:Msg 1902, Niveau 16, Staat 3, Lijn 1

Kan niet meer dan één geclusterde index maken in tabel 'Tabelnaam'. Verwijder de bestaande geclusterde index 'Naam geclusterde index' voordat u een nieuwe maakt.

Hoe de corruptie van de SQL Server-index te herstellen?

Volg deze gratis methoden die u kunt gebruiken om beschadiging van de SQL Server-index te herstellen:

Methode 1 – Herstellen vanaf back-up

Of u nu corruptie vermoedt in een geclusterde of niet-geclusterde index, gebruik een back-up om de getroffen gegevens te herstellen voordat de corruptie optrad.

Het herstellen van een back-up werkt echter niet als de back-up de laatste updates mist. Het kan zelfs leiden tot gegevensverlies. Probeer in dat geval de volgende methode.

Methode 2 – Beschadigde index verwijderen en opnieuw maken

Opmerking: Dit werkt alleen voor niet-geclusterde indexen.

Verwijder alle of specifieke index die corruptie vertoont door deze stappen te volgen:

  • Maak verbinding met een serverinstantie in SQL Server Management Studio (SSMS) .
  • Op de 'Objectverkenner' venster, vouwt u de database uit die de tabel met de beschadigde index bevat.
  • Klik met de rechtermuisknop op de tabel, selecteer de 'Script Table as' optie, plaats de muisaanwijzer op 'DROP And CREATE To' en klik op de Nieuwe query-editor

Als het u niet lukt om beschadigde indexen opnieuw aan te maken, kunt u proberen de indexen te herstellen.

Methode 3 – De SQL-database herstellen

Voer als laatste redmiddel de opdracht DBCC CHECKDB uit met 'REPAIR_ALLOW_DATA_LOSS' voor de database die een beschadigde (geclusterde of niet-geclusterde) index op een tabel heeft. Maar dit kan leiden tot gegevensverlies. Probeer als alternatieve oplossing een SQL-reparatietool zoals Stellar Repair voor MS SQL. De tool helpt bij het repareren van databasebestanden (.mdf en .ndf) en herstelt indexen, views, opgeslagen procedures en alle andere componenten. U kunt de herstelde indexen en andere database-objecten rechtstreeks importeren in een live of nieuwe database.

Download de demoversie van SQL-databasereparatiesoftware om een ​​voorbeeld van de herstelbare indexen te bekijken voordat u het gerepareerde bestand opslaat.

Conclusie

Als u vermoedt dat een index beschadigd is, gebruikt u de factoren die in het artikel worden beschreven om te bepalen of de index beschadigd is of niet. Bekijk ook de mogelijke redenen achter corruptie van de SQL Server-index en methoden om corruptie te herstellen. De methoden omvatten het herstellen van de database vanaf een back-up, het verwijderen en opnieuw maken van de indexen, en het repareren van de database en het herstellen van al zijn componenten. U kunt ook overwegen een SQL-reparatietool te gebruiken om de beschadigde geclusterde en niet-geclusterde SQL-indexen te herstellen en ontoegankelijke database-objecten te herstellen.


  1. Hoe converteer ik een tijdstempel naar een datum/tijd in MySQL?

  2. Bind matrixparameter aan native query

  3. FOUT:toestemming geweigerd voor schema gebruiker1_gmail_com bij teken 46

  4. Krijg de grootte van een database in MariaDB