Baza de date in „Suspect mode”

suspect mode
Bază de date în Suspect mode.

O bază de date poate intra în „suspect mode” din mai multe cauze, cele mai frecfente sunt defecțiuni tehnice ale mașinii pe care ruleaza serverul de SQL, lipsa spațiului pe disk, restart incorect.. etc. În primul rănd trebuie să aflăm ce a provocat incidentul și acest lucru îl putem face cu:

 DBCC CHECKDB (‘NumeDB’) WITH NO_INFOMSGS, ALL_ERRORMSGS

Începem acum procesul de recovery al bazei de date

  • Oprim serverul SQL,
  • Copiem fisierele bazei de date (data și log, cu extensiile .mdf si .log) într-o locatie sigură,
  • Pornim serverul SQL și ștergem baza de date, (în cazuri rare acest lucru nu este posibil și atunci trebuie corectat sysdatabases )
  • Creăm o noua bază de date cu aceleași caracteristici ca si cea in suspect mode (același nume, aceleași cale către fisiere, aceeasi colație.. etc),
  • Oprim serverul și suprascriem fișierul .mdf nou creat cu cel salvat anterior,
  • Pornim serverul de SQL.

In acest moment statusul bazei de date nu mai reprezintă o probelmă, și va trebui să rulăm urmatoarele scripturi:

Use master 
 go
 sp_configure ‘allow updates’, 1
 reconfigure with override 
 go

Rezultatul urmatorului script se va memora (numărul status al bazei de date avariate)

select status from sysdatabases where name = ‘NumeDB’

Se trece baza de date in emergency mode

update sysdatabases set status= 32768 where name = ‘NumeDB’

Se restartează serverul de SQL iar baza de date va fi acum in emergency mode. Va trebui sa refacem fisierul de log prin rularea urmatorului script:

DBCC REBUILD_LOG(‘NumeDB’, ‘CaleSiNumeFisierNouLog’)

În continuare baza de date va trebui pusă în regim „single user” cu și inceperea recuperării datelor:

Use master 
go
sp_dboption ‘NumeDB’, ‘single user’, ‘true’
GO 
DBCC CHECKDB(‘NumeDB’, REPAIR_ALLOW_DATA_LOSS) 

Dacă operațiunea nu s-a terminat cu succes incercăm dbo only mode

Use master 
go
sp_dboption ‘NumeDB’, ‘ dbo use only’, ‘true’
GO 
DBCC CHECKDB(‘NumeDB’, REPAIR_ALLOW_DATA_LOSS) 

Daca totul a decurs bine rulăm urmatorul script:

sp_dboption ‘NumeDB’, ‘single user’, ‘false’ 
 go 
 Use master 
 go 
 sp_configure ‘allow updates’, 0
 go

Alte informatii puteți găsi aici

Succes.

Lasă un răspuns