Hoe een SQL-database in herstelmodus oplossen

SQL Server-databases komen af en toe in “Herstelmodus”, wat databasebeheerders soms verrast. Deze status treedt op tijdens een herstart, databaseherstel of onverwachte afsluiting, omdat SQL Server onvoltooide transacties opnieuw afspeelt of ongedaan maakt om de gegevensintegriteit te behouden. Hoewel dit proces meestal automatisch verloopt, kan het soms langer duren dan verwacht – of zelfs lijken vast te lopen – waardoor beheerders niet zeker weten hoe ze verder moeten gaan.

Als u dit probleem tegenkomt, maak u dan geen zorgen. Dit artikel helpt u te begrijpen wat er achter de schermen gebeurt en leert u hoe u kunt reageren. Hier is een kort overzicht van wat u zult leren:

  • Wat “Herstelmodus” betekent – Waarom uw database in deze toestand komt en wat SQL Server op de achtergrond doet.
  • De 3 fasen van herstel – Een duidelijke uiteenzetting van de fasen Analyse, Redo en Undo die SQL Server volgt tijdens het herstel.
  • Veelvoorkomende oorzaken van vertragingen – Van grote transactie-logs tot overmatige virtuele logbestanden (VLF’s), bekijk wat het proces kan vertragen.
  • Hoe weer online te gaan – Leer praktische stappen om uw database te herstellen naar een consistente toestand, van geduld hebben tot het gebruik van SQL-reparatietools.
  • Wanneer u geavanceerde hulp moet zoeken – Wat te doen als het herstelproces lijkt vast te zitten en er geen voortgang wordt geboekt.

Aan het einde van deze gids heeft u een goed begrip van het herstelproces van SQL Server en de tools die u kunt gebruiken om uw database zo snel mogelijk weer online te krijgen.

Begrip van de “Herstelmodus” in SQL Server

Wanneer SQL Server opnieuw wordt opgestart of een database wordt hersteld van een back-up, gaat het in de ‘In herstel’ modus om de gegevensintegriteit te behouden. Tijdens deze fase speelt SQL Server onvolledige transacties af of maakt ze ongedaan om gegevenscorruptie te voorkomen en transactionele consistentie te waarborgen.

Na het opnieuw opstarten van SQL Server gaat de database naar de “In herstel” modus. Je kunt de SQL Server-database ook in de herstelstaat zien bij het opstarten of bij het herstellen van een back-up.

Figuur 1- SQL Database “In Herstel” Modus

De database in de “herstel” status betekent dat de database een herstelproces uitvoert en automatisch online gaat zodra het proces is voltooid. Je kunt echter ervaren dat het herstel langzaam verloopt en de database vastzit in een herstelstaat. Jouw database kan nog steeds in de herstelstaat zijn, aangezien SQL-databases drie fasen van herstel doorlopen, wat tijd kan kosten afhankelijk van de grootte van je databasebestanden.

De 3 Fasen van SQL Database Herstel

Meestal, wanneer de database niet correct wordt afgesloten bij het opnieuw opstarten van SQL Server, ondergaat deze crashherstel om ervoor te zorgen dat de DB consistent blijft. Er zijn drie herstelfasen die een SQL DB moet doorlopen:

Fase 1: Analyse

Deze fase begint vanaf het “laatste controlepunt tot het einde van het transactielogboek.” Het maakt een ‘Dirty Page Table’ (DPT) tabel aan die helpt bij het bepalen van alle vuile pagina’s op het moment van de crash. Ook maakt het een ‘Active Transaction Table’ (ATT) tabel aan om niet-gecommitteerde transacties te identificeren toen de SQL Server stopte.

Fase 2: Redo

In deze fase voert SQL Server alle wijzigingen uit die zijn opgetreden na het controlepunt en voor de crash. In wezen moeten in de redo-fase alle transacties die zijn geïnitieerd maar nog niet geschreven naar het SQL-gegevensbestand (.mdf/.ldf) via het controlepunt worden doorgestreept.

Fase 3: Undo

Als er nog niet-gecommitteerde transacties waren op het moment van het herstel van de database, moeten deze in de undo-fase worden teruggedraaid om de database naar een consistente toestand te brengen.

Wat te doen als je database vastzit in de herstelmodus?

Controleer het SQL Server foutenlogboek om het allereerste bericht in de database te zien dat er ongeveer zo uitziet:

Database 'DatabaseNaam' wordt gestart

Dit betekent dat de DB-bestanden geopend zijn en het herstelproces is gestart. Enige tijd later zou je SQL Server 3 herstelfasen moeten doorlopen. Als je op zoek bent naar begeleiding over hoe je een back-up maakt en je database herstelt, bekijk dan deze handleiding over het maken van back-ups en het herstellen van Azure SQL-databases.

Fase 1 van het herstel van de database wordt hieronder getoond:

Plain Text

 

Na afronding van fase 1 zal SQL Server fase 2 en 3 van herstel ondergaan:

Plain Text

 

Zodra fase 2 en 3 zijn voltooid, ziet u iets vergelijkbaars:

Plain Text

 

In het foutenlogboek moet u letten op de melding ‘geen gebruikersactie vereist’. Dit geeft aan dat de database in herstelmodus is. Het herstel kan echter langer duren dan verwacht, en de database zal vastlopen in herstelmodus.

Redenen waarom SQL-database vastloopt in “In herstel” modus

De volgende zijn redenen die een SQL-database kunnen laten vastlopen in herstelmodus:

  • Een langlopende transactie wordt teruggedraaid
  • De transactielogboekbestandsgrootte is enorm
  • Te veel virtuele logbestanden (VLF’s) bevinden zich in het transactielogboek van de database
  • Er was een bug in de SQL Server, die nu is opgelost.

Wat kunt u doen om de database terug te brengen naar een consistente staat?

Workaround 1: Wacht tot het databaseherstel is voltooid

De meest voor de hand liggende oplossing om de database weer online te krijgen is geduldig te zijn en te wachten tot het herstelproces is voltooid; dit kan uren of dagen duren. Als het herstel langer duurt dan verwacht voor een DB in een SQL Server 2008 of 2008 R2, kan het toepassen van Microsoft-fixes helpen.

Let op: Vermijd het uitvoeren van het RESTORE-commando om de database online te brengen in een consistente staat, aangezien SQL Server al probeert dezelfde taak uit te voeren. En het uitvoeren van ‘RESTORE with..Recovery’ betekent dat de database dezelfde stappen opnieuw moet doorlopen. 

Workaround 2: Gebruik een Professioneel SQL Database Reparatiegereedschap

Als het herstel is voltooid maar er niet in slaagt de database in een consistente staat te brengen, kan het gebruik van een gespecialiseerd SQL-reparatiegereedschap helpen om de database naar zijn oorspronkelijke staat te herstellen.

  • Stellar Repair voor MS SQL — Een gespecialiseerd gereedschap dat helpt bij het herstellen van SQL-databases naar hun oorspronkelijke staat na corruptie of storing.
  • ApexSQL Recover — Dit gereedschap helpt bij het herstellen van verwijderde, afgeknotte of beschadigde gegevens van SQL Server-databases.
  • dbForge SQL Complete — Hoewel primair een IDE-uitbreiding, biedt het handige functies voor foutafhandeling en probleemoplossing.
  • Redgate SQL Data Recovery — Redgate biedt een reeks SQL Server-tools, inclusief gegevensherstelfuncties.
  • SysTools SQL Recovery Tool — Bekend om het herstellen van beschadigde of beschadigde SQL-databasebestanden (.MDF en .NDF) en deze weer bruikbaar te maken.
  • Kernel voor SQL Database Recovery — Dit gereedschap kan SQL Server-databases herstellen en herstellen van zowel corruptie als onverwachte afsluitingen.
  • Aryson SQL Database Recovery — Een ander gereedschap dat MDF- en NDF-bestanden in SQL Server kan repareren en herstellen.

Conclusie

In dit artikel hebben we besproken wat het betekent wanneer een SQL-database vastzit in de ‘In Recovery’ modus, de drie kritieke fasen van herstel (Analyse, Redo en Undo), en wat je kunt doen om de database weer online te krijgen. We hebben ook mogelijke oorzaken besproken, van grote transactie-logboeken tot te veel virtuele logbestanden (VLF’s).

Als je SQL-database nog steeds vastzit in de herstelmodus, onthoud dan dat geduld essentieel is. Vermijd het uitvoeren van een RESTORE-opdracht, omdat dit het herstelproces opnieuw start. Voor ernstige problemen waarbij handmatige tussenkomst faalt, overweeg het gebruik van een professioneel SQL-databaseherstelsysteem om je gegevens te herstellen.

Als je deze gids nuttig vond, deel hem dan met je team of laat een reactie achter met je ervaringen met SQL-herstel.

Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode