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:
Recovery of database ‘DatabaseName’ (9) is 0% complete (approximately 95 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Recovery of database ‘DatabaseName’ (9) is 3% complete (approximately 90 seconds remain). Phase 1 of 3. This is an informational message only. No user action is required.
Na afronding van fase 1 zal SQL Server fase 2 en 3 van herstel ondergaan:
Recovery of database ‘DatabaseName’ (9) is 5% complete (approximately 85 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required…
Recovery of database ‘DatabaseName’ (9) is 95% complete (approximately 40 seconds remain). Phase 2 of 3. This is an informational message only. No user action is required.
Phase 3 of 3. This is an informational message only. No user action is required.
Zodra fase 2 en 3 zijn voltooid, ziet u iets vergelijkbaars:
3807 transactions rolled forward in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
0 transactions rolled back in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery is writing a checkpoint in database ‘DatabaseName’ (9). This is an informational message only. No user action is required.
Recovery completed for database DatabaseName (database ID 9) in 30 second(s) (analysis 1289 ms, redo 29343 ms, undo 72 ms.) This is an informational message only. No user action is required.
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