Summary: questo post illustra i motivi per cui un database (db) viene contrassegnato come in attesa di recupero. Inoltre, descriverà i metodi per risolvere il problema "SQL server in stato di recovery pending". È possibile risolvere il problema eseguendo query in SQL Server Management Studio (SSMS) o utilizzando il software Stellar Repair for MS SQL.
Stati di SQL Server
Un database SQL è considerato danneggiato se uno o più dei suoi file principali si trovano in uno stato incoerente. A seconda della gravità del danno, il database viene contrassegnato con diversi stati. Alcuni di questi stati sono:
- Online – Se uno dei file di dati viene danneggiato durante l’esecuzione di una query o di un’altra operazione, il database rimane online e accessibile.
- Sospetto – Se un database non può essere ripristinato all’avvio di SQL Server, il database viene contrassegnato come sospetto.
- Recovery Pending – Se SQL Server sa che è necessario eseguire il ripristino del database ma qualcosa ne impedisce l’avvio, il server contrassegna il database nello stato “Recovery Pending”. Questo stato è diverso da quello di SOSPETTO perché non si può affermare che il recupero stia per fallire, ma semplicemente non è ancora stato avviato.
Vediamo innanzitutto come verificare lo stato attuale del database.
Come controllare lo stato del database?
Per verificare lo stato attuale di un db SQL, eseguire la seguente query:
SELEZIONA nome, stato_desc da sys.s VAI
Eseguendo la query si otterrà un risultato simile:
Motivi dello stato di Recovery Pending in SQL Server
Alcuni dei motivi che causano questo problema sono:
- Il database non è stato chiuso correttamente e c’è almeno una transazione non impegnata attiva durante l’arresto, con conseguente cancellazione del file di registro delle transazioni attivo.
- L’utente ha provato a spostare i file di registro su una nuova unità per risolvere i problemi di prestazioni del server, ma ha finito per corrompere i file di registro durante il processo.
- Il ripristino del database non può essere avviato a causa dell’insufficienza dello spazio di memoria o dell’archiviazione su disco.
Metodi per risolvere il problema del Recovery Pending in SQL Server
Nota: prima di avviare una qualsiasi delle seguenti procedure di riparazione, assicurarsi di eseguire un backup del db, in modo da avere una copia di sicurezza nel caso in cui qualcosa vada storto.
Metodo 1 – Modi manuali per risolvere il database in stato di attesa
Di seguito sono riportati i due metodi manuali che consentono di riportare SQL in modalità di recupero alla modalità normale:
1. Contrassegnare il database in modalità di emergenza e avviare una riparazione forzata.
La modalità EMERGENZA del database contrassegna il database come SOLO LETTURA, disabilita la registrazione e consente l’accesso solo agli amministratori di sistema. In sostanza, impostando il db in questa modalità si può riportare online il database inaccessibile.
Nota: di solito un database esce automaticamente dalla modalità EMERGENZA. Se avete problemi a ripristinare il database da questa modalità, leggete questo articolo Ripristinare il database SQL dalla modalità di emergenza alla modalità normale.
Una volta aperto il database in modalità EMERGENZA, provate a ripararlo utilizzando il comando DBCC CHECKDB con l’opzione “REPAIR_ALLOW_DATA_LOSS”. A tal fine, aprire SSMS ed eseguire la seguente serie di query:
ALTER DATABASE [DBName] SET EMERGENZA;
VAI
ALTER DATABASE [DBName] set single_user
VAI
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) CON ALL_ERRORMSGS;
VAI
ALTER DATABASE [DBName] set multi_user
VAI
2. Contrassegnare il database in modalità di emergenza, staccare il database principale e riattaccarlo.
Questa soluzione richiede anche di contrassegnare il db in modalità EMERGENZA. Una volta fatto, mettete il database offline (detach) e poi riportatelo online (re-attach). A tale scopo, eseguire la seguente serie di query in SSMS:
ALTER DATABASE [DBName] SET EMERGENZA;
ALTER DATABASE [DBName] set multi_user
EXEC sp_detach_db ‘[DBName]’
EXEC sp_attach_single_file_db @DBName = ‘[DBName]’, @physname = N'[percorso mdf]’
La serie di query di cui sopra aiuta il server a sbarazzarsi del registro corrotto e a crearne uno nuovo automaticamente.
Metodo 2 – Utilizzare il software Stellar Repair for MS SQL
Se i metodi sopra descritti non possono aiutare a risolvere il problema del db in stato di attesa di recupero, utilizzare il software Stellar Repair for MS SQL. Il software può aiutarvi a riparare i file di database corrotti e a riportare il database online dallo stato di recupero in sospeso in modo rapido e senza problemi.
Passaggi per l’utilizzo del software Stellar Repair for MS SQL
- Scaricare, installare ed eseguire il software Stellar Repair for MS SQL.
- Nella finestra Seleziona database, fare clic su Sfoglia o Cerca per selezionare il file di database da riparare.
- Il software offre l’opzione di scansione standard e avanzata per analizzare il database corrotto.
- Fare clic su Ripara per avviare il processo di riparazione.
- Il software mostra l’anteprima di tutti i componenti del db recuperabili.
- Per salvare il file riparato e i suoi componenti, fare clic su Salva nel menu File.
- Dalla finestra Salva database, procedere come segue:
- Scegliere MDF in Salva con nome.
- Selezionate Nuovo database o Database live in Opzione di salvataggio.
- Inserite i dettagli richiesti nella sezione Connessione al server tramite autenticazione o Autenticazione SQL Server.
- Fare clic su Sfoglia per scegliere la destinazione per il salvataggio del file riparato.
- Fare clic su Salva.
- Quando viene visualizzato il messaggio “Salva completato“, fare clic su OK.
Il file riparato verrà salvato nella posizione selezionata.
Nota: per informazioni dettagliate sull’uso del software Stellar Repair for MS SQL, consultare questa guida utente.
Caratteristiche principali di Stellar Repair for MS SQL
- Ripara i file corrotti e inaccessibili di MS SQL Database (.mdf e .ndf).
- Recupera tutti i componenti del database come tabelle, chiavi, indici, trigger, regole e stored procedure, ecc.
- Recupera i record cancellati.
- Supporta MS SQL 2019, 2017, 2016, 2014, 2012, 2008, 2008 R2 e tutte le versioni inferiori.
- Il software è apprezzato dagli MVP di Microsoft.
Conclusione
Questo post illustra i motivi alla base del problema “db in stato di recovery pending“, come ad esempio un database non chiuso in modo pulito, file di database (.mdf o .ndf) corrotti, memoria o spazio su disco insufficienti. Vengono inoltre descritti i metodi per risolvere il problema del Recovery Pending State nel database di SQL Server.
È possibile riparare il database impostandolo sullo stato di emergenza e avviando il processo di riparazione o scollegando e ricollegando il database. Ma queste soluzioni hanno i loro lati negativi:
- È in grado di risolvere solo i problemi minori del database.
- Non garantisce il ripristino completo del database.
- In particolare, l’esecuzione del comando ‘REPAIR_ALLOW_DATA_LOSS’ può eliminare alcuni dati.
È possibile superare queste limitazioni utilizzando il software Stellar Repair for MS SQL. Il software aiuta gli utenti di SQL e gli amministratori di database (DBA) a risolvere gravi errori di corruzione del database. Inoltre, garantisce il recupero completo dei componenti del database, preservando l’integrità dei dati.