Press "Enter" to skip to content

Effettuare il recovery di un database in stato “Suspect”

Ieri sera, il mio laptop ha avuto un mancamento, decidendo di non effettuare lo shutdown e sostituendolo con un restart indipendentemente dal tipo di richiesta effettuata, è un difetto di questa macchina che si verifica ogni tanto in non so quali circostanze. L’unico modo per spegnerlo e fare in modo che Suspend, Hibernate, Shutdown riprendano a funzionare è spegnerlo in modo brutale usando il tasto off, e staccargli la batteria per un poco.

Stamattina, facendolo ripartire non mi funzionava una applicazione che usa i database, perciò ho aperto SQL Management studio e ho scoperto che due dei database avevano accanto al nome la scritta (Suspect), mi era già successo alcuni anni fa, a causa di un malfunzionamento di un disco su un server, quando SQL Server parte e trova qualcosa di strano sui database usa questo “Marchio di infamia”, il database in questione non può essere in alcun modo modificato, backuppato o rimesso in linea dalla user interface, per rimetterlo a posto si possono fare due cose:

1) Cancellarlo e ripristinarlo da backup (ecco perché è indispensabile fare sempre i backup!!!)

2) Eseguire lo script di seguito indicato ma ovviamente si potrebbe perdere dei dati,  di sicuro dati persi è meglio di database vuoto, pertanto se necessario va usato.
considerato che non è qualcosa che accade spesso e non è proprio ben documentata neppure in internet riporto il codice necessario.

exec sp_resetstatus 'NomeDatabase'
ALTER DATABASE NomeDatabase SET EMERGENCY
DBCC checkdb('NomeDatabase')
ALTER DATABASE NomeDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('NomeDatabase', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE NomeDatabase SET MULTI_USER

N.B. Questo script può far Perdere dei dati quindi usarlo solo se non esiste un backup ripristinabile o se, come nel mio caso si tratta di un database di test e la perdita di dati è irrilevante.