Database in modalità Emergency
Se il vostro database SQL Server è danneggiato o non avviabile, potete provare a ripristinarlo usando la modalità EMERGENZA. Questa modalità consente di accedere al database anche se è in uno stato inconsistente, e di eseguire operazioni di riparazione o di recupero dei dati.
La modalità EMERGENZA si attiva impostando lo stato del database a 1 con il comando ALTER DATABASE. Ad esempio:
ALTER DATABASE MioDatabase SET EMERGENCY;
![SET EMERGENCY SQL Server in modalità EMERGENZA-](https://i0.wp.com/massimilianomauro.it/wp-content/uploads/2023/04/set.jpg?resize=622%2C291&ssl=1)
Una volta attivata la modalità EMERGENZA, il database diventa accessibile solo ai membri del ruolo sysadmin. Inoltre, il database viene aperto in sola lettura e non viene eseguita alcuna operazione di rollback o di recupero.
Per ripristinare il database, è necessario eseguire i seguenti passi:
1) Verificare l’integrità fisica del file di dati e del file di log del database con il comando DBCC CHECKDB. Questo comando restituisce un report con gli eventuali errori rilevati e le possibili azioni di riparazione. Ad esempio:
DBCC CHECKDB (MioDatabase) WITH NO_INFOMSGS, ALL_ERRORMSGS;
![SQL Server in modalità EMERGENZA- DBCC CHECKDB](https://i0.wp.com/massimilianomauro.it/wp-content/uploads/2023/04/Immagine-2023-04-18-163959.jpg?resize=678%2C309&ssl=1)
2) Se il comando DBCC CHECKDB non restituisce errori, significa che il database è integro e può essere riportato in modalità normale con il comando ALTER DATABASE. Ad esempio:
ALTER DATABASE MioDatabase SET ONLINE;
![SQL Server in modalità EMERGENZA- SET ONLINE](https://i0.wp.com/massimilianomauro.it/wp-content/uploads/2023/04/Immagine-2023-04-18-165153.jpg?resize=705%2C343&ssl=1)
3) Se invece il comando DBCC CHECKDB restituisce errori, significa che il database è danneggiato e richiede una riparazione. La riparazione può essere eseguita con il comando DBCC CHECKDB con l’opzione REPAIR_ALLOW_DATA_LOSS. Questa opzione consente di eliminare le pagine o le righe corrotte dal database, ma comporta una perdita di dati. Ad esempio:
DBCC CHECKDB (‘MioDatabase’, REPAIR_ALLOW_DATA_LOSS);
![](https://i0.wp.com/massimilianomauro.it/wp-content/uploads/2023/05/Immagine-2023-05-25-181850.jpg?resize=748%2C314&ssl=1)
4) Dopo aver eseguito la riparazione, è necessario verificare nuovamente l’integrità del database con il comando DBCC CHECKDB. Se il comando non restituisce errori, significa che la riparazione è stata effettuata con successo e il database può essere riportato in modalità normale con il comando ALTER DATABASE. Ad esempio:
ALTER DATABASE MioDatabase SET ONLINE;
![SQL Server in modalità EMERGENZA- SET ONLINE](https://i0.wp.com/massimilianomauro.it/wp-content/uploads/2023/04/Immagine-2023-04-18-165153-1.jpg?resize=703%2C346&ssl=1)
5) Se invece il comando DBCC CHECKDB restituisce ancora errori, significa che la riparazione non è stata sufficiente e il database è irrecuperabile. In questo caso, l’unica soluzione è ripristinare il database da un backup valido.
La modalità EMERGENZA è un’ultima risorsa per tentare di recuperare un database SQL Server danneggiato. Si raccomanda di usarla solo dopo aver esaurito tutte le altre opzioni e di essere consapevoli dei rischi di perdita di dati. Inoltre, si raccomanda di effettuare sempre dei backup regolari del database e di verificarne la validità.