Database in modalità Suspect
Ora vedremo come ripristinare un database sql server in suspect mode. Un database sospetto è un database ritenuto compromesso da SQL Server che, per ragioni di sicurezza, imposta il flag “sospetto” ed impedisce l’accesso ai dati. Le possibili possono essere:
- file fisici sul file system corrotti (i motivi potrebbero essere di natura software (virus) o hardware (hard disk danneggiato))
- spazio libero su disco insufficiente
- Memoria RAM insufficiente
- i file risultano aperti da un altro software quindi con accesso negato
- uno spegnimento inaspettato del computer o l’arresto inaspettato dei servizi di SQL Server
- Il sistema non riesce ad aprire il dispositivo in cui risiedono i dati o il file di registro del server SQL
- Il server SQL si arresta in modo anomalo o si riavvia nel mezzo di una transazione, risultando in un file di registro delle transazioni corrotto o inaccessibile
- SQL Server tenta di aprire un database e il file appartenente a quel database è già aperto dal software antivirus installato sul sistema
- SQL non può completare un’operazione di rollback o rollforward.
Per eseguire le operazioni di ripristino utilizzeremo Microsoft Sql Server Managment Studio con i comandi T-SQL. Il primo tentativo è quello di togliere il flag di sospetto al database. Dopo aver effettuato la connessione al motore di database, apriamo la finestra per eseguire una nuova query e digitiamo il seguente coamndo :
exec sp_resetstatus DBNAME
Questa operazione, purtroppo, difficilmente risolve il nostro problema, pertanto sarà necessario compiere altre operazioni. Il passo successivo è impostare il database in emergenza. In questa modalità i dati del database, se non corrotti, torneranno ad essere accessibili, poi, tramite il comando DBCC, sarà possibile effettuare un check degli oggetti del database. Lanciare i comandi sotto indicati uno alla volta in modo da analizzare sempre l’output restituito.
alter database DBNAME set emergency
dbcc checkdb(‘DBNAME’) alter database DBNAME set SINGLE_USER with ROLLBACK IMMEDIATE
dbcc checkdb(‘DBNAME’,REPAIR_ALLOW_DATA_LOSS)
alter database DBNAME set MULTI_USER