DBCC CHECKFILEGROUP (Transact-SQL)

Si applica a:SQL ServerDatabase SQL diAzure Istanza gestita di SQL di Azure

Controlla l'integrità strutturale e di allocazione di tutte le tabelle e le viste indicizzate nel filegroup specificato del database corrente.

Convenzioni di sintassi Transact-SQL

Sintassi

DBCC CHECKFILEGROUP
[
    [ ( { filegroup_name | filegroup_id | 0 }
        [ , NOINDEX ]
  ) ]
    [ WITH
        {
            [ ALL_ERRORMSGS | NO_INFOMSGS ]
            [ , TABLOCK ]
            [ , ESTIMATEONLY ]
            [ , PHYSICAL_ONLY ]
            [ , MAXDOP  = number_of_processors ]
        }
    ]
]

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

filegroup_name

Nome del filegroup nel database corrente per il quale controllare l'allocazione della tabella e l'integrità strutturale. Se omesso oppure se viene specificato 0, per impostazione predefinita viene utilizzato il filegroup primario. I nomi di filegroup devono essere conformi alle regole per gli identificatori.
filegroup_name non può essere un filegroup FILESTREAM.

filegroup_id

Numero di identificazione del filegroup (ID) nel database corrente per il quale controllare l'allocazione della tabella e l'integrità strutturale.

NOINDEX

Specifica che non è consigliabile eseguire controlli intensivi degli indici non cluster per le tabelle utente. In questo modo, è possibile ridurre i tempi di esecuzione complessivi. NOINDEX non influisce sulle tabelle di sistema perché DBCC CHECKFILEGROUP controlla sempre tutti gli indici di tabella di sistema.

ALL_ERRORMSGS

Visualizza un numero illimitato di errori per oggetto. Tutti i messaggi di errore vengono visualizzati per impostazione predefinita. La specifica o l'omissione di questa opzione non ha alcun effetto.

NO_INFOMSGS

Disattiva tutti i messaggi informativi.

TABLOCK

Determina l'acquisizione DBCC CHECKFILEGROUP di blocchi anziché l'uso di uno snapshot interno del database.

ESTIMATE ONLY

Visualizza la quantità stimata di tempdb spazio necessaria per l'esecuzione DBCC CHECKFILEGROUP con tutte le altre opzioni specificate.

PHYSICAL_ONLY

Limita il controllo di integrità alla struttura fisica della pagina, alle intestazioni dei record e alla struttura fisica degli alberi B. Progettato per consentire un controllo con overhead limitato della consistenza fisica del filegroup, questo controllo consente inoltre di rilevare le pagine incomplete e i problemi comuni a livello di hardware che possono compromettere i dati. Un'esecuzione completa di DBCC CHECKFILEGROUP può richiedere molto più tempo rispetto alle versioni precedenti. per i seguenti motivi:

  • I controlli logici sono più completi.
  • Alcune delle strutture sottostanti da controllare sono più complesse.
  • Sono stati introdotti molti nuovi controlli per includere le nuove funzionalità.

Nota

Nella documentazione di SQL Server viene usato in modo generico il termine albero B in riferimento agli indici. Negli indici rowstore SQL Server implementa un albero B+. Questo non si applica agli indici columnstore o agli archivi dati in memoria. Per altre informazioni, vedere la guida all'architettura e alla progettazione degli indici SQL di SQL di Azure.

Pertanto, l'uso dell'opzione PHYSICAL_ONLY può causare tempi di esecuzione molto più brevi per DBCC CHECKFILEGROUP i filegroup di grandi dimensioni ed è pertanto consigliato per l'uso frequente nei sistemi di produzione. È comunque consigliabile eseguire periodicamente un'esecuzione completa di DBCC CHECKFILEGROUP . La frequenza di esecuzione dipende da fattori specifici per i singoli ambienti aziendali e di produzione. PHYSICAL_ONLY implica NO_INFOMSGS sempre e non è consentito con una delle opzioni di ripristino.

Nota

PHYSICAL_ONLY Se si specificano cause, DBCC CHECKFILEGROUP ignorare tutti i controlli dei dati FILESTREAM.

MAXDOP

Si applica a: SQL Server 2014 Service Pack 2 e versioni successive

Esegue l'override dell'opzione di configurazione max degree of parallelism di sp_configure per l'istruzione . Può MAXDOP superare il valore configurato con sp_configure. Se MAXDOP supera il valore configurato con Resource Governor, il motore di database usa il valore di Resource GovernorMAXDOP, descritto in ALTER WORKLOAD GROUP (Transact-SQL). Tutte le regole semantiche usate con l'opzione di configurazione max degree of parallelism sono applicabili quando si usa l'hint per la MAXDOP query. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism.

Attenzione

Se MAXDOP è impostato su zero, il server sceglie il massimo grado di parallelismo.

Osservazioni:

DBCC CHECKFILEGROUP e DBCC CHECKDB sono comandi DBCC simili. La differenza principale è che DBCC CHECKFILEGROUP è limitata al singolo filegroup specificato e alle tabelle richieste.

DBCC CHECKFILEGROUP esegue i comandi seguenti:

L'esecuzione DBCC CHECKALLOC o DBCC CHECKTABLE separatamente da DBCC CHECKFILEGROUP non è necessaria.

Snapshot interno del database

DBCC CHECKFILEGROUP usa uno snapshot interno del database per garantire la coerenza transazionale che deve eseguire questi controlli. Per altre informazioni, vedere Visualizzare le dimensioni del file sparse di uno snapshot del database (Transact-SQL) e la sezione Utilizzo snapshot interno del database DBCC in DBCC (Transact-SQL).For more information, see View the Size of a Database Snapshot of a Database Snapshot (Transact-SQL) and the DBCC internal database snapshot usage section in DBCC (Transact-SQL).

Se non è possibile creare uno snapshot o l'opzione TABLOCK è specificata, DBCC CHECKFILEGROUP acquisisce i blocchi per ottenere la coerenza necessaria. In questo caso, è necessario un blocco esclusivo a livello di database per eseguire i controlli di allocazione, nonché blocchi condivisi a livello di tabella per eseguire i controlli delle tabelle. TABLOCKDBCC CHECKFILEGROUP causa l'esecuzione più veloce in un database con carico elevato, ma riduce la concorrenza disponibile nel database durante DBCC CHECKFILEGROUP l'esecuzione.

Nota

tempdb L'esecuzione DBCC CHECKFILEGROUP su non esegue controlli di allocazione e deve acquisire blocchi di tabella condivisi per eseguire controlli di tabella. Ciò è dovuto al fatto che, per motivi di prestazioni, gli snapshot del database non sono disponibili in tempdb. Ciò significa che non è possibile ottenere la consistenza delle transazioni necessaria.

Controllare gli oggetti in parallelo

Per impostazione predefinita, DBCC CHECKFILEGROUP esegue il controllo parallelo degli oggetti. Il grado di parallelismo viene determinato in modo automatico da Query Processor. Il livello massimo di parallelismo viene configurato allo stesso modo delle query parallele. Per limitare il numero massimo di processori disponibili per la verifica DBCC, usare sp_configure. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism.

Il controllo parallelo può essere disabilitato usando il flag di traccia 2528. Per altre informazioni, vedere Flag di traccia (Transact-SQL).

Indici non cluster in filegroup separati

Se un indice non cluster nel filegroup specificato è associato a una tabella in un altro filegroup, l'indice non viene controllato perché la tabella di base non è disponibile per la convalida.

Se una tabella nel filegroup specificato dispone di un indice non cluster in un altro filegroup, l'indice non cluster non viene controllato a causa degli elementi seguenti:

  • La struttura della tabella di base non dipende dalla struttura di un indice non cluster. Non è necessario analizzare gli indici non cluster per convalidare la tabella di base.
  • Il DBCC CHECKFILEGROUP comando convalida gli oggetti solo nel filegroup specificato.

Un indice cluster e una tabella non possono trovarsi in filegroup diversi; pertanto, le considerazioni precedenti si applicano solo agli indici non cluster.

Tabelle partizionate in filegroup separati

Quando una tabella partizionata esiste in più filegroup, DBCC CHECKFILEGROUP controlla i set di righe di partizione esistenti nel filegroup specificato e ignora i set di righe negli altri filegroup. Il messaggio informativo 2594 indica le partizioni non controllate. Gli indici non cluster non residenti nel filegroup specificato non vengono controllati.

Informazioni sui messaggi di errore DBCC

Al termine del DBCC CHECKFILEGROUP comando, viene scritto un messaggio nel log degli errori di SQL Server. Se il comando DBCC viene eseguito correttamente, il messaggio indica un completamento corretto e il tempo di esecuzione del comando. Se il comando DBCC viene arrestato prima del completamento del controllo a causa di un errore, il messaggio indica che il comando è stato terminato e specifica un valore di stato e la durata dell'esecuzione del comando. Nella tabella seguente sono elencati e descritti i valori di stato che possono essere inclusi nel messaggio.

Provincia Descrizione
0 È stato generato l'errore numero 8930. Indica che il comando DBCC è stato terminato a causa di un danneggiamento dei metadati.
1 È stato generato l'errore numero 8967. Si è verificato un errore DBCC interno.
2 Si è verificato un errore durante un ripristino di database in modalità di emergenza.
3 Indica che il comando DBCC è stato terminato a causa di un danneggiamento dei metadati.
4 È stata rilevata una violazione di accesso o asserzione.
5 il comando DBCC è stato terminato da un errore sconosciuto.

Segnalazione errori

Viene creato un file mini-dump (SQLDUMP<nnnn>.txt) nella directory di SQL Server LOG ogni volta che DBCC CHECKFILEGROUP rileva un errore di danneggiamento. Se le funzionalità di segnalazione degli errori e di raccolta di dati relativi all'utilizzo delle funzionalità sono abilitate per l'istanza di SQL Server, il file verrà inoltrato automaticamente a Microsoft. I dati raccolti vengono usati per migliorare le funzionalità di SQL Server.

Il file dump contiene i risultati del comando e l'output DBCC CHECKFILEGROUP di diagnostica aggiuntivo. Il file dispone di elenchi di controllo di accesso discrezionale (DACL) limitati. L'accesso è limitato all'account del servizio SQL Server e ai membri del ruolo sysadmin. Per impostazione predefinita il ruolo sysadmin contiene tutti i membri del gruppo BUILTIN\Administrators di Windows e del gruppo dell'amministratore locale. Il comando DBCC non ha esito negativo se il processo di raccolta dati non riesce.

Risolvere gli errori

Se vengono segnalati errori da DBCC CHECKFILEGROUP, è consigliabile ripristinare il database dal backup del database. Non è possibile specificare le opzioni di ripristino in DBCC CHECKFILEGROUP.

Se non esiste alcun backup, l'esecuzione DBCC CHECKDB con un'opzione di ripristino specificata corregge gli errori segnalati. L'opzione di correzione da utilizzare è specificata in fondo all'elenco degli errori restituiti. La correzione degli errori tramite l'opzione REPAIR_ALLOW_DATA_LOSS potrebbe richiedere l'eliminazione di alcune pagine e pertanto dei dati corrispondenti.

Set di risultati

DBCC CHECKFILEGROUP restituisce il set di risultati seguente (i valori possono variare):

  • Tranne quando ESTIMATEONLY viene specificato o NO_INFOMSGS .
  • Per il database corrente, se non viene specificato alcun database, se vengono specificate o meno opzioni (ad eccezione NOINDEXdi ).
DBCC results for 'master'.
DBCC results for 'sys.sysrowsetcolumns'.
There are 630 rows in 7 pages for object 'sys.sysrowsetcolumns'.
DBCC results for 'sys.sysrowsets'.
There are 97 rows in 1 pages for object 'sys.sysrowsets'.
DBCC results for 'sysallocunits'.
There are 195 rows in 3 pages for object 'sysallocunits'.
  
There are 2340 rows in 16 pages for object 'spt_values'.
DBCC results for 'MSreplication_options'.
There are 2 rows in 1 pages for object 'MSreplication_options'.
CHECKFILEGROUP found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Se NO_INFOMSGS viene specificato, DBCC CHECKFILEGROUP restituisce:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Se ESTIMATEONLY viene specificato, DBCC CHECKFILEGROUP restituisce (i valori possono variare):

Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
15
  
(1 row(s) affected)
  
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
207
  
(1 row(s) affected)
  
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner .

Esempi

R. Controllare il filegroup PRIMARY nel database

Nell'esempio seguente viene controllato il filegroup primario del database corrente.

DBCC CHECKFILEGROUP;
GO

B. Controllare il filegroup ADVENTUREWorks PRIMARY senza indici non cluster

Nell'esempio seguente viene controllato il filegroup primario del database AdventureWorks2022senza gli indici non cluster, specificando il numero di identificazione del filegroup primario e l'opzione NOINDEX.

USE AdventureWorks2022;
GO
DBCC CHECKFILEGROUP (1, NOINDEX);
GO

C. Controllare il filegroup PRIMARY con le opzioni

Nell'esempio seguente viene controllato il filegroup primario del database master specificando l'opzione ESTIMATEONLY.

USE master;
GO
DBCC CHECKFILEGROUP (1)
WITH ESTIMATEONLY;

Vedi anche