DBCC CHECKDB

La vita degli hard disk purtroppo non è infinita.
Capita che alcuni settori si danneggino, se siete fortunati questi settori ospitano i file di database di SQL server.

Se così accade l’applicazione che accede al db comincia a distribuire errori non ben identificati.
Nell’event viewer compaiono segnalazioni di errore di questo genere:


Tipo evento: Errore Origine evento: MSSQLSERVER Categoria evento: (2)

ID evento: 823

Data: 06/06/2011 Ora: 15.08.37

Utente: N/D

Computer: SERVER

Descrizione: Il sistema operativo ha restituito l'errore 23(Errore nei dati (controllo di ridondanza ciclico).) a SQL Server durante un'operazione leggere, all'offset 0x0000003b9e6000 nel file 'C:\Nomedelfile.MDF'. Per informazioni più dettagliate, vedere i messaggi aggiuntivi nel log degli errori di SQL Server e nel registro eventi di sistema. Si tratta di una condizione di errore grave a livello di sistema, che può compromettere l'integrità del database e deve essere corretta immediatamente. Eseguire un controllo di consistenza completo del database (DBCC CHECKDB). Questo errore può essere dovuto a varie cause. Per ulteriori informazioni, vedere la documentazione in linea di SQL Server.

Di solito potete trovare anche questo tipo di errori

Tipo evento: Errore

Origine evento: Disk

Categoria evento: Nessuno

ID evento: 7

Data: 06/06/2011 Ora: 16.03.44

Utente: N/D

Computer: SERVER

Descrizione: Rilevato blocco danneggiato sulla periferica \Device\Harddisk0.

Che chiariscono al meglio la gravità della situazione, se ce ne fosse bisogno.

Come se ne viene fuori?

Piano A.
Avete pianificato un backup del DB: informate il cliente, che digerisce la cosa, incrociate le dita e fate il restore del db.

Piano B.
Anche se avete un backup (perchè voi lo avete, vero?) vi piace fare le cose difficili.

  1. Lanciate da “Managmente studio” il comando di DBCC CHECKDB
  2. L’output vi conferma di effettuare il repair dei dati (una opzione che neanche MS consiglia)
  3. Buttate tutti gli utenti fuori da SQL
  4. Impostate il batabase in modalità Single user
  5. Tasto Destro -> Proprieta sul Database
  6. Scegliete la voce “Opzioni”
  7. Sezione “Stato” -> Limitazioni di accesso ed impostate a “Single user”
  8.  Chiudete tutte le connessioni al db ed apritene una nuova
  9. Lanciate la query DBCC CHECKDB (<NomeDB>, [REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD]
  10. Nel caso l’istruzione ritorni degli errori consiglio di rilanciarla un’altra volta.
  11. Reimpostare il database in modalità multi user e effettuate le verifiche del caso.
HTH
Annunci