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:

  1. file fisici sul file system corrotti (i motivi potrebbero essere di natura software (virus) o hardware (hard disk danneggiato))
  2. spazio libero su disco insufficiente
  3. Memoria RAM insufficiente
  4. i file risultano aperti da un altro software quindi con accesso negato
  5. uno spegnimento inaspettato del computer o l’arresto inaspettato dei servizi di SQL Server
  6. Il sistema non riesce ad aprire il dispositivo in cui risiedono i dati o il file di registro del server SQL
  7. 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
  8. SQL Server tenta di aprire un database e il file appartenente a quel database è già aperto dal software antivirus installato sul sistema
  9. 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

Come ripristinare un database