Summary: Il database di SQL Server è bloccato nello stato di RIPRISTINO e restituisce l'errore "Il database non può essere ripristinato perché il registro non è stato ripristinato". In questo post, scoprirete le possibili ragioni di questo errore di SQL Server e le soluzioni per risolverlo. Inoltre, scoprirete altri problemi che potrebbero verificarsi durante il processo di ripristino. Scoprirete anche uno strumento di recupero SQL avanzato che può aiutarvi a ripristinare il database senza alcuna perdita di dati.
A volte, quando si tenta di ripristinare un database di SQL Server, si verifica una situazione in cui il database si blocca nello stato di Ripristino e visualizza il seguente messaggio di errore:
Msg 4333, Livello 16, Stato 1, Riga 1
Il database non può essere recuperato perché il registro non è stato ripristinato.
Msg 3013, livello 16, stato 1, riga 1
RESTORE DATABASE termina in modo anomalo.
Cosa causa l’errore?
Non ci sono ragioni note che causano questo errore in particolare. Tuttavia, l’errore può essere dovuto a uno dei seguenti motivi:
- L’istanza di SQL Server è stata scollegata durante il ripristino dei backup dei registri delle transazioni.
- Il processo di ripristino è stato annullato.
- Il server ha esaurito lo spazio su disco durante il ripristino del database.
Come risolvere l’errore?
Nota: prima di procedere, assicurarsi che il server disponga di spazio su disco sufficiente e quindi provare a ripristinare il database. Se non ci sono problemi di spazio su disco, seguire la soluzione descritta di seguito.
Per risolvere il problema, provare ad abbandonare il database problematico e a ripristinarlo nuovamente. A tale scopo, eseguite quanto segue nella finestra delle query di SQL Server Management Studio (SSMS):
Nota: se non è possibile eseguire il DROP del database, provare a staccarlo utilizzando la procedura memorizzata sp_detach_db. Se la stored procedure restituisce l’errore “database in use “, è possibile utilizzare il comando dbcc detachdb per staccare il database. Tuttavia, bisogna fare attenzione perché si tratta di un comando non documentato.
UTILIZZARE [master]
VAI
– Creare nuovamente il db con lo stesso nome di quello originale
CREARE DATABASE [nome_database];
– ripristinare il database utilizzando i soliti script di backup
RIPRISTINO DELLA DATABASE nome_database
FROM DISK = ‘inserire percorso del file .bak’
CON RECUPERO
Nota: se è necessario ripristinare più file di database, eseguire il comando RESTORE CON opzione NORECOVERY. Per l’ultimo file di database, eseguire il comando RESTORE CON RECUPERO.
Cosa fare se il database diventa inaccessibile?
Se è possibile ripristinare il database ma non è più accessibile ed è contrassegnato come SOSPETTO, è necessario riparare il database. Tenete presente che non è possibile riparare un database SOSPETTO. Per prima cosa è necessario rendere accessibile il database mettendolo in modalità EMERGENZA. A tale scopo, eseguire il comando seguente:
ALTER DATABASE nome_database SET EMERGENZA
Una volta che il database diventa accessibile, è fondamentale avere accesso esclusivo al database. Quindi, impostate lo stato del database in modalità SINGLE_USER ed eseguite DBCC CHECKDB con l’opzione ‘REPAIR_ALLOW_DATA_LOSS’.
ALTER DATABASE nome_database SET SINGLE_USER CON ROLLBACK IMMEDIATO
DBCC CHECKDB (‘nome_database’,REPAIR_ALLOW_DATA_LOSS)
Successivamente, riportare il database in modalità MULTI_USER eseguendo il seguente comando:
ALTER DATABASE nome_database SET MULTI_USER
Leggete in dettaglio: Come recuperare il database MS SQL dalla modalità sospetta?
Aggiornare il database e verificare se è possibile accedervi.
Se il database è ancora inaccessibile ed è necessario evitare qualsiasi perdita di dati, utilizzare uno SQL recovery tool che possa aiutare a ripristinare il database mantenendo i dati intatti. È possibile utilizzare Stellar Repair for MS SQL per riparare il file di database (MDF) e ripristinarlo allo stato originale. Inoltre, il software aiuta a ripristinare il database con una velocità 8X, consentendo di salvare più tabelle contemporaneamente (fino a 8).
Il software può anche aiutare a ripristinare i record eliminati da un database SQL Server. Inoltre, è possibile visualizzare in anteprima i componenti riparati prima di salvarli in un database esistente, in un nuovo database o in altri formati di file (CSV, HTML o XLS).
Conclusione
Se si verifica l’errore “Il database non può essere ripristinato perché il registro non è stato ripristinato”, l’abbandono del database e il suo ripristino dal backup potrebbero aiutare a risolvere l’errore. Se il ripristino non riesce o il database è diventato inaccessibile, provare a riparare il database utilizzando DBCC CHECKDB con il comando REPAIR_ALLOW_DATA_LOSS. Se questo non aiuta, è possibile utilizzare il software Stellar Repair for MS SQL per riparare e ripristinare il database.