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.
Nota
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.
Nota
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.
Nota
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. |
Istruzioni informative
Istruzioni di convalida
Istruzioni di manutenzione