DBCC (Transact-SQL)

Il linguaggio di programmazione Transact-SQL include istruzioni DBCC che fungono da comandi DBCC (Database Console Command) per SQL Server.

Le istruzioni DBCC sono suddivise nelle categorie seguenti.

Categoria

Attività svolte

Istruzioni di manutenzione

Attività di manutenzione di un database, un indice o un filegroup.

Istruzioni varie

Attività varie, ad esempio l'attivazione di flag di traccia o la rimozione di una DLL dalla memoria.

Istruzioni informative

Attività mirate alla raccolta e alla visualizzazione di vari tipi di informazioni.

Istruzioni di convalida

Operazioni di convalida di un database, una tabella, un indice, un catalogo, un filegroup o dell'allocazione delle pagine del database.

I comandi DBCC accettano parametri di input e restituiscono valori. Tutti i parametri dei comandi DBCC accettano valori letterali sia Unicode che DBCS.

Utilizzo dello snapshot interno del database DBCC

I comandi DBCC seguenti possono essere eseguiti su uno snapshot interno di sola lettura del database creato da Motore di database. Ciò consente di evitare problemi di blocco e concorrenza durante l'esecuzione di questi comandi. Per ulteriori informazioni, vedere Snapshot del database.

DBCC CHECKALLOC

DBCC CHECKDB

DBCC CHECKCATALOG

DBCC CHECKFILEGROUP

DBCC CHECKTABLE

 

Quando si esegue uno di questi comandi DBCC, Motore di database crea uno snapshot del database con uno stato consistente dal punto di vista transazionale. Il comando DBCC esegue quindi i controlli in base a questo snapshot. Al termine dell'esecuzione del comando DBCC, lo snapshot viene eliminato.

Talvolta lo snapshot interno del database non è necessario oppure non può essere creato. In tali casi, il comando DBCC viene eseguito sul database effettivo. Se il database è in linea, il comando DBCC attiva il blocco a livello di tabella per garantire la consistenza degli oggetti controllati, come se fosse stata specificata l'opzione WITH TABLOCK.

Lo snapshot interno del database non viene creato quando il comando DBCC viene eseguito:

  • Sul database master e l'istanza di SQL Server è in modalità utente singolo.

  • Su un database diverso da quello master per cui è stata attivata la modalità utente singolo tramite l'istruzione ALTER DATABASE.

  • Su un database di sola lettura.

  • Su un database impostato in modalità di emergenza utilizzando l'istruzione ALTER DATABASE.

  • Su tempdb. In tal caso, lo snapshot del database non può essere creato a causa di restrizioni interne.

  • Con l'opzione WITH TABLOCK. In tal caso, DBCC soddisfa la richiesta evitando di creare uno snapshot del database.

I comandi DBCC utilizzano blocchi a livello di tabella anziché snapshot interni del database quando vengono eseguiti sugli elementi seguenti:

  • Un filegroup di sola lettura

  • Un file system FAT

  • Un volume che non supporta "flussi denominati"

  • Un volume che non supporta "flussi alternativi"

[!NOTA]

Per tentare di eseguire DBCC CHECKALLOC, oppure la parte equivalente di DBCC CHECKDB, con l'opzione WITH TABLOCK è necessario acquisire un blocco esclusivo a livello di database. Questo blocco non può essere impostato per tempdb o il database master e probabilmente ha esito negativo per tutti gli altri database.

[!NOTA]

L'esecuzione dell'istruzione DBCC CHECKDB sul database master ha esito negativo se non è possibile creare uno snapshot interno del database.

Report di stato per i comandi DBCC

La vista del catalogo sys.dm_exec_requests contiene informazioni riguardanti lo stato e la fase di esecuzione corrente dei comandi DBCC CHECKDB, CHECKFILEGROUP e CHECKTABLE. Nella colonna percent_complete viene indicata la percentuale di completamento del comando, mentre nella colonna command è specificata la fase corrente dell'esecuzione del comando.

L'unità di riferimento dello stato dipende dalla fase di esecuzione corrente del comando DBCC. In alcune fasi lo stato viene segnalato per ogni pagina del database e in altre per ogni correzione del database o dell'allocazione. Nella tabella seguente viene descritta ogni fase di esecuzione e viene specificato il livello di granularità in base a cui viene segnalato lo stato del comando.

Fase di esecuzione

Descrizione

Granularità del report di stato

DBCC TABLE CHECK

Durante questa fase viene controllata la consistenza logica e fisica degli oggetti del database.

Lo stato viene segnalato a livello di pagina del database.

Il valore del report di stato viene aggiornato ogni 1000 pagine del database controllate.  

DBCC TABLE REPAIR

Se viene specificata l'opzione REPAIR_FAST, REPAIR_REBUILD o REPAIR_ALLOW_DATA_LOSS ed è necessario correggere alcuni errori relativi agli oggetti, durante questa fase vengono implementate correzioni nel database.

Lo stato viene segnalato a livello di singola correzione.

Il contatore viene aggiornato ogni volta che viene completata una correzione.

DBCC ALLOC CHECK

Durante questa fase vengono controllate le strutture di allocazione del database.

NotaNota
Il comando DBCC CHECKALLOC esegue gli stessi controlli.

Lo stato non viene segnalato.

DBCC ALLOC REPAIR

Se viene specificata l'opzione REPAIR_FAST, REPAIR_REBUILD o REPAIR_ALLOW_DATA_LOSS ed è necessario correggere alcuni errori di allocazione, durante questa fase vengono implementate correzioni nel database.

Lo stato non viene segnalato.

DBCC SYS CHECK

Durante questa fase vengono controllate le tabelle di sistema del database.

Lo stato viene segnalato a livello di pagina del database.

Il valore del report di stato viene aggiornato ogni 1000 pagine del database controllate.

DBCC SYS REPAIR

Se viene specificata l'opzione REPAIR_FAST, REPAIR_REBUILD o REPAIR_ALLOW_DATA_LOSS ed è necessario correggere alcuni errori relativi alle tabelle di sistema, durante questa fase vengono implementate correzioni nel database.

Lo stato viene segnalato a livello di singola correzione.

Il contatore viene aggiornato ogni volta che viene completata una correzione.

DBCC SSB CHECK

Durante questa fase vengono controllati gli oggetti di SQL Server Service Broker.

NotaNota
Questa fase non viene completata quando viene eseguito il comando DBCC CHECKTABLE.

Lo stato non viene segnalato.

DBCC CHECKCATALOG

Durante questa fase viene controllata la consistenza dei cataloghi del database.

NotaNota
Questa fase non viene completata quando viene eseguito il comando DBCC CHECKTABLE.

Lo stato non viene segnalato.

DBCC IVIEW CHECK

Durante questa fase viene controllata la consistenza logica di tutte le viste indicizzate presenti nel database.

Lo stato viene segnalato a livello di singola vista del database controllata.