I database di SQL Server occasionalmente entrano in modalità “In Recovery”, il che può spesso cogliere di sorpresa gli amministratori di database. Questo stato si verifica durante un riavvio, un ripristino del database o uno spegnimento inaspettato, poiché SQL Server riproduce o annulla le transazioni incomplete per mantenere l’integrità dei dati. Anche se questo processo è tipicamente automatico, a volte può richiedere più tempo del previsto — o sembrare addirittura bloccato — lasciando gli amministratori incerti su come procedere.
Se hai riscontrato questo problema, non preoccuparti. Questo articolo ti aiuterà a capire cosa succede dietro le quinte e ti insegnerà come rispondere. Ecco cosa imparerai in breve:
- Cosa Significa la Modalità “In Recovery” — Perché il tuo database entra in questo stato e cosa fa SQL Server sullo sfondo.
- Le 3 Fasi del Recupero — Una chiara suddivisione delle fasi di Analisi, Redo e Undo che SQL Server segue durante il recupero.
- Cause Comuni dei Ritardi — Dai grandi log delle transazioni ai file di log virtuali eccessivi (VLF), scopri cosa potrebbe rallentare il processo.
- Come Tornare Online — Impara i passaggi pratici per ripristinare il tuo database a uno stato consistente, dall’attesa all’uso di strumenti di riparazione di SQL.
- Quando Ricorrere all’Aiuto Avanzato — Cosa fare se il processo di recupero sembra bloccato e non si registra alcun progresso.
Alla fine di questa guida, avrai una solida comprensione del processo di recupero di SQL Server e degli strumenti che puoi utilizzare per riportare il tuo database online il prima possibile.
Comprendere la Modalità “In Recovery” in SQL Server
Quando SQL Server si riavvia o un database viene ripristinato da un backup, entra in modalità ‘In Recupero’ per mantenere l’integrità dei dati. Durante questa fase, SQL Server riproduce o annulla le transazioni incomplete per evitare la corruzione dei dati e garantire la coerenza transazionale.
Dopo il riavvio di SQL Server, il database passa alla modalità “In Recupero”. È possibile che il database di SQL Server si trovi nello stato di recupero durante l’avvio o quando viene ripristinato da un backup.
Figura 1- Modalità “In Recupero” del Database SQL
Lo stato di “recupero” del database significa che il database sta eseguendo un processo di recupero e verrà automaticamente reso disponibile una volta completato il processo. Tuttavia, potresti riscontrare che il recupero è lento e il database è bloccato in uno stato di recupero. Il tuo database potrebbe ancora essere in stato di recupero, poiché i database SQL attraversano tre fasi di recupero, che possono richiedere tempo a seconda delle dimensioni dei file del database.
Le 3 Fasi del Recupero del Database SQL
Di solito, quando il database non viene chiuso correttamente al riavvio di SQL Server, subisce un recupero dopo crash, garantendo che il DB rimanga consistente. Ci sono tre fasi di recupero che un DB SQL deve attraversare:
Fase 1: Analisi
Questa fase inizia dall’ “ultimo checkpoint fino alla fine del registro delle transazioni”. Viene creato un tavolo ‘Dirty Page Table’ (DPT) che aiuta a determinare tutte le pagine sporche al momento del crash. Inoltre, viene creato un tavolo ‘Active Transaction Table’ (ATT) per identificare le transazioni non ancora confermate quando il server SQL si è fermato.
Fase 2: Redo
In questa fase, SQL Server fa avanzare tutte le modifiche che sono avvenute dopo il checkpoint e prima del crash. Fondamentalmente, nella fase di redo, tutte le transazioni che sono state confermate ma non ancora scritte nel file dati SQL (.mdf/.ldf) tramite checkpoint devono essere fatte avanzare.
Fase 3: Undo
Se ci sono state transazioni non confermate al momento del ripristino del database, devono essere annullate nella fase di undo per portare il database a uno stato consistente.
Cosa fare se il tuo database è bloccato in modalità di ripristino?
Controlla il Log degli errori di SQL Server per vedere il primo messaggio nel database che potrebbe assomigliare a:
Starting up database 'NomeDatabase'
Questo significa che i file del database sono aperti e il processo di ripristino è iniziato. In seguito, dovresti vedere SQL Server sottoporsi alle 3 fasi di ripristino. Se stai cercando indicazioni su come eseguire il backup e il ripristino del tuo database, consulta questa guida su backup e ripristino di database SQL di Azure.
Di seguito è mostrata la Fase 1 del ripristino del database:
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.
Dopo il completamento della fase 1, SQL Server verrà sottoposto alle fasi 2 e 3 di ripristino:
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.
Una volta completate le Fasi 2 e 3, vedrai qualcosa di simile a:
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.
Nel registro degli errori, presta attenzione al messaggio ‘non è richiesta alcuna azione da parte dell’utente’. Questo indica che il database è in stato di ripristino. Tuttavia, il ripristino potrebbe richiedere più tempo del previsto e il database rimarrà bloccato in modalità di ripristino.
Motivi per cui il Database SQL Rimane Bloccato in Modalità “In Ripristino”
Ecco i motivi che possono causare un database SQL bloccato in modalità di ripristino:
- Un’operazione di lunga durata sta facendo il rollback
- Il file di log delle transazioni è di dimensioni enormi
- Troppi file di log virtuali (VLF) sono presenti nel log delle transazioni del DB
- C’era un bug nel SQL Server, che ora è stato risolto.
Cosa Puoi Fare per Riportare il Database a uno Stato Coerente?
Soluzione Temporanea 1: Attendere il Completamento del Ripristino del Database
La soluzione più ovvia per riportare il database online è essere pazienti e attendere il completamento del processo di ripristino; potrebbe richiedere ore o giorni. Se il ripristino sta impiegando troppo tempo rispetto a quanto previsto per un DB in un SQL Server 2008 o 2008 R2, l’applicazione di correzioni di Microsoft potrebbe aiutare.
Nota: Evitare di eseguire il comando RESTORE per riportare il DB online in uno stato consistente, poiché SQL Server sta già tentando di eseguire la stessa operazione. Inoltre, eseguire ‘RESTORE with..Recovery’ significa far attraversare al DB gli stessi passaggi di nuovo.
Soluzione alternativa 2: Utilizzare uno strumento professionale di riparazione del database SQL
Se il recupero viene completato ma non riesce a riportare il database in uno stato consistente, utilizzare uno strumento di riparazione SQL specializzato può aiutare a ripristinare il DB al suo stato originale.
- Stellar Repair for MS SQL — Uno strumento specializzato che aiuta a ripristinare i database SQL al loro stato originale dopo una corruzione o un guasto.
- ApexSQL Recover — Questo strumento aiuta a recuperare dati di database di SQL Server eliminati, troncati o corrotti.
- dbForge SQL Complete — Sebbene sia principalmente un’estensione IDE, offre utili funzioni di gestione degli errori e risoluzione dei problemi.
- Redgate SQL Data Recovery — Redgate fornisce una gamma di strumenti per SQL Server, inclusi i servizi di recupero dei dati.
- SysTools SQL Recovery Tool — Conosciuto per il recupero di file di database SQL corrotti o danneggiati (.MDF e .NDF) e per riportarli a uno stato utilizzabile.
- Kernel for SQL Database Recovery — Questo strumento può recuperare e ripristinare i database SQL Server sia da corruzione che da spegnimenti inaspettati.
- Aryson SQL Database Recovery — Un altro strumento che può riparare e ripristinare file MDF e NDF in SQL Server.
Conclusione
In questo articolo abbiamo affrontato cosa significa quando un database SQL è bloccato in modalità ‘In Recovery’, le tre fasi cruciali di ripristino (Analisi, Redo e Undo) e cosa puoi fare per riportare il database online. Abbiamo anche discusso delle possibili cause, dai grandi log delle transazioni a troppi file di log virtuali (VLF).
Se il tuo database SQL è ancora bloccato in modalità di ripristino, ricorda che la pazienza è fondamentale. Evita di eseguire un comando RESTORE, poiché questo riavvia il processo di ripristino. Per problemi gravi in cui l’intervento manuale fallisce, considera l’utilizzo di uno strumento professionale di riparazione del database SQL per ripristinare i tuoi dati.
Se hai trovato questa guida utile, condividila con il tuo team o lascia un commento con le tue esperienze di ripristino di SQL.
Source:
https://dzone.com/articles/resolving-sql-database-stuck-in-recovery-mode