Condividi tramite


DBCC (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure

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
Gestione Attività di manutenzione di un database, un indice o un filegroup.
Varie Attività varie, ad esempio l'attivazione di flag di traccia o la rimozione di una DLL dalla memoria.
Informativo Attività mirate alla raccolta e alla visualizzazione di vari tipi di informazioni.
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 degli snapshot interni del database DBCC

I comandi DBCC seguenti possono essere eseguiti su uno snapshot interno di sola lettura del database creato dal motore di database. Lo snapshot impedisce problemi di blocco e concorrenza quando questi comandi vengono eseguiti. Per altre informazioni, vedere Snapshot del database (SQL Server).

  • DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE

Quando si esegue uno di questi comandi DBCC, il 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.

A volte uno snapshot interno del database non è necessario o non può essere creato. In tali casi, il comando DBCC viene eseguito sul database effettivo. Se il database è online, il comando DBCC attiva il blocco a livello di tabella per garantire la consistenza degli oggetti controllati, Questo comportamento è identico a quello specificato dall'opzione WITH TABLOCK .

Uno snapshot interno del database non viene creato quando viene eseguito un comando DBCC:

  • master Nel database e nell'istanza di SQL Server è in esecuzione in modalità utente singolo.
  • In un database diverso da master, ma il database è stato inserito in modalità utente singolo tramite l'istruzione ALTER DATABASE .
  • Su un database di sola lettura.
  • In un database impostato in modalità di emergenza tramite l'istruzione ALTER DATABASE .
  • Rispetto a tempdb. In questo caso, non è possibile creare uno snapshot del database a causa di restrizioni interne.
  • Uso dell'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
  • Volume che non supporta flussi denominati
  • Volume che non supporta flussi alternativi

Nota

Il tentativo di eseguire DBCC CHECKALLOCo la parte equivalente di DBCC CHECKDB, usando l'opzione WITH TABLOCK richiede un blocco esclusivo del database (X). Questo blocco del database non può essere impostato su tempdb o master e probabilmente avrà esito negativo in tutti gli altri database.

Nota

DBCC CHECKDB ha esito negativo quando viene eseguito master su se non è possibile creare uno snapshot interno del database.

Creazione di report sullo stato di avanzamento per i comandi DBCC

La sys.dm_exec_requests vista del catalogo contiene informazioni sullo stato di avanzamento e sulla fase corrente di esecuzione dei DBCC CHECKDBcomandi , CHECKFILEGROUPe CHECKTABLE . La percent_complete colonna indica la percentuale di completamento del comando e la command colonna indica 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 Le riparazioni del database vengono eseguite durante questa fase se REPAIR_FAST, REPAIR_REBUILDo REPAIR_ALLOW_DATA_LOSS viene specificato e sono presenti errori di oggetto che devono essere ripristinati. 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: DBCC CHECKALLOC esegue gli stessi controlli.
Lo stato di avanzamento non viene segnalato
DBCC ALLOC REPAIR Le riparazioni del database vengono eseguite durante questa fase se REPAIR_FAST, REPAIR_REBUILDo REPAIR_ALLOW_DATA_LOSS viene specificato e sono presenti errori di allocazione che devono essere ripristinati. Lo stato di avanzamento 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 Le riparazioni del database vengono eseguite durante questa fase se REPAIR_FAST, REPAIR_REBUILDo REPAIR_ALLOW_DATA_LOSS viene specificato e sono presenti errori di tabella di sistema che devono essere ripristinati. 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 eseguita quando DBCC CHECKTABLE viene eseguita.
Lo stato di avanzamento non viene segnalato.
DBCC CHECKCATALOG Durante questa fase viene verificata la coerenza dei cataloghi di database.

Nota: questa fase non viene eseguita quando DBCC CHECKTABLE viene eseguita.
Lo stato di avanzamento 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

Istruzioni varie