DBCC CHECKFILEGROUP (Transact-SQL)

Data aggiornamento: 17 novembre 2008

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

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

DBCC CHECKFILEGROUP 
[
    [ ( { filegroup | filegroup_id | 0 } 
        [ , NOINDEX ] 
    ) ]
    [ WITH 
        { 
            [ ALL_ERRORMSGS | NO_INFOMSGS ] 
            [ , TABLOCK ] 
            [ , ESTIMATEONLY ]
            [ , PHYSICAL_ONLY ]  
        } 
    ]
]

Argomenti

  • filegroup_name
    Nome del filegroup nel database corrente di cui si desidera verificare l'integrità strutturale e di allocazione delle tabelle. 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_id
    Numero di identificazione (ID) del filegroup nel database corrente di cui si desidera verificare l'integrità strutturale e di allocazione delle tabelle.
  • NOINDEX
    Specifica che non è necessario eseguire verifiche approfondite degli indici non cluster delle tabelle utente. Ciò comporta una riduzione dei tempi di esecuzione. NOINDEX non influisce sulle tabelle di sistema, perché l'istruzione DBCC CHECKFILEGROUP verifica sempre tutti gli indici delle tabelle di sistema.
  • ALL_ERRORMSGS
    Visualizza un numero illimitato di errori per oggetto. In SQL Server 2005 Service Pack 3 (SP3) vengono visualizzati tutti i messaggi di errore per impostazione predefinita. La specifica o l'omissione di questa opzione non ha alcun effetto. Nelle versioni precedenti di SQL Server vengono visualizzati solo i primi 200 messaggi di errore per ciascun oggetto se ALL_ERRORMSGS non è specificato.
  • NO_INFOMSGS
    Disattiva tutti i messaggi informativi.
  • TABLOCK
    Consente all'istruzione DBCC CHECKFILEGROUP di ottenere blocchi anziché utilizzare uno snapshot interno del database.
  • ESTIMATE ONLY
    Visualizza lo spazio di tempdb stimato necessario per eseguire l'istruzione DBCC CHECKFILEGROUP con tutte le opzioni specificate.
  • PHYSICAL_ONLY
    Limita il controllo di integrità alla struttura fisica della pagina, alle intestazioni dei record e alla struttura fisica delle strutture b-tree. Progettato per consentire un controllo a basso overhead della consistenza fisica del filegroup, questo controllo consente inoltre di rilevare le pagine incomplete e i comuni problemi a livello di hardware che possono compromettere i dati. Un'esecuzione completa di DBCC CHECKFILEGROUP può richiedere tempi notevolmente più lunghi 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 numerosi nuovi controlli per includere le nuove funzionalità.

    Per questo motivo, l'utilizzo dell'opzione PHYSICAL_ONLY può consentire di ottenere tempi molto più brevi per l'esecuzione di DBCC CHECKFILEGROUP su c di grandi dimensioni ed è quindi l'opzione consigliata per l'esecuzione frequente nei sistemi di produzione. È tuttora consigliabile prevedere periodicamente un'esecuzione completa di DBCC CHECKFILEGROUP. La frequenza di esecuzione dipende da fattori specifici per i singoli ambienti aziendali e di produzione. L'opzione PHYSICAL_ONLY implica sempre l'utilizzo dell'opzione NO_INFOMSGS e non è consentito utilizzarla con nessuna delle opzioni di correzione.

    Nota   Se si specifica PHYSICAL_ONLY, DBCC CHECKFILEGROUP ignora tutti i controlli dei dati FILESTREAM.

Set di risultati

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

  • Eccetto quando si specifica ESTIMATEONLY o NO_INFOMSGS.
  • Per il database corrente, se non si specifica alcun database, indipendentemente dalla specifica delle opzioni (eccetto NOINDEX).
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 si specifica NO_INFOMSGS, DBCC CHECKFILEGROUP restituisce:

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

Se si specifica ESTIMATEONLY, 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.

Osservazioni

Le istruzioni DBCC CHECKFILEGROUP e DBCC CHECKDB sono simili. La principale differenza è costituita dal fatto che il comando DBCC CHECKFILEGROUP è limitato al singolo filegroup specificato e alle tabelle obbligatorie.

DBCC CHECKFILEGROUP esegue i comandi seguenti:

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

Snapshot di database interno

DBCC CHECKFILEGROUP utilizza uno snapshot interno del database per garantire la consistenza delle transazioni necessaria per eseguire queste verifiche. Per ulteriori informazioni, vedere Informazioni sulle dimensioni dei file sparse negli snapshot del database e la sezione "Utilizzo dello snapshot interno del database DBCC" in DBCC (Transact-SQL).

Se risulta impossibile creare uno snapshot oppure viene specificata l'opzione TABLOCK, DBCC CHECKFILEGROUP acquisisce i blocchi per ottenere la consistenza necessaria. In questo caso, è necessario un blocco esclusivo a livello di database per eseguire le verifiche di allocazione, nonché blocchi condivisi a livello di tabella per eseguire le verifiche delle tabelle. TABLOCK consente l'esecuzione più rapida di DBCC CHECKFILEGROUP in database con carico di lavoro elevato, ma comporta una diminuzione del livello di concorrenza del database durante l'esecuzione dell'istruzione.

[!NOTA] In SQL Server 2005 l'esecuzione dell'istruzione DBCC CHECKFILEGROUP nel database tempdb non comporta l'esecuzione di verifiche di allocazione ed è pertanto necessario acquisire blocchi condivisi a livello di tabella per eseguire le verifiche delle tabelle. Questo funzionamento dipende dal fatto che per motivi di prestazioni gli snapshot di database non sono disponibili in tempdb. Ciò significa che non è possibile ottenere la necessaria consistenza transazionale.

Controllo parallelo degli oggetti

Per impostazione predefinita, DBCC CHECKFILEGROUP esegue la verifica parallela degli oggetti. Il grado di parallelismo viene determinato in modo automatico da Query Processor. Il massimo grado di parallelismo viene configurato in modo analogo alle query parallele. Per limitare il numero massimo di processori disponibili per la verifica DBCC, utilizzare la stored procedure sp_configure. Per ulteriori informazioni, vedere Opzione max degree of parallelism.

È possibile disattivare la verifica parallela tramite il flag di traccia 2528. Per ulteriori informazioni, vedere Flag di traccia (Transact-SQL).

Indici non cluster su filegroup separati

Se un indice non cluster nel filegroup specificato è associato a una tabella in un altro filegroup, l'indice non viene verificato poiché la tabella di base non è disponibile per la convalida. Si tratta di una modifica nel comportamento di SQL Server 2005 rispetto alle versioni precedenti di SQL Server, in cui l'indice non cluster e la tabella di base nell'altro filegroup vengono verificati. Per verificare sia gli indici non cluster che le tabelle di base, eseguire DBCC CHECKDB.

Se una tabella nel filegroup specificato include un indice non cluster in un altro filegroup, tale indice non viene verificato per i motivi seguenti:

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

Un indice cluster e una tabella non possono trovarsi in filegroup diversi. Le considerazioni precedenti sono pertanto valide solo per gli indici non cluster.

Tabelle partizionate in filegroup separati

Nelle versioni di SQL Server 2005 precedenti a Service Pack 2 (SP2), DBCC CHECKFILEGROUP controlla una tabella partizionata solo se l'intera tabella è inclusa nel filegroup specificato. Se la tabella è distribuita in più filegroup, l'intera tabella viene ignorata. Nella versione SP2, quando una tabella partizionata è suddivisa in più filegroup, DBCC CHECKFILEGROUP controlla i set di righe della partizione esistenti nel filegroup specificato e ignora i set di righe negli altri filegroup. Il messaggio informativo 2594 indica le partizioni non controllate. Non vengono controllati gli indici non cluster e non residenti nel filegroup specificato.

Informazioni sui messaggi di errore DBCC

Dopo il completamento del comando DBCC CHECKFILEGROUP, viene scritto un messaggio nel log degli errori di SQL Server. Se il comando DBCC viene eseguito correttamente, il messaggio indica il completamento corretto e la durata dell'esecuzione del comando. Se il comando DBCC viene interrotto 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.

Stato Descrizione

0

È stato generato l'errore numero 8930, che 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

In SQL Server 2005 Service Pack 1 (SP1), quando un comando DBCC CHECKFILEGROUP rileva un errore di danneggiamento, viene creato un piccolo file di dump, denominato SQLDUMPnnnn.txt, nella directory LOG di SQL Server. Se le funzionalità di segnalazione degli errori e di raccolta di dati relativi all'utilizzo delle funzionalità sono attivate per l'istanza di SQL Server, il file verrà inoltrato automaticamente a Microsoft. I dati raccolti consentono di migliorare la funzionalità di SQL Server. Per ulteriori informazioni, vedere Impostazioni segnalazione errori e utilizzo funzionalità.

Il file di dump contiene i risultati dell'esecuzione del comando DBCC CHECKFILEGROUP e l'output di dati diagnostici supplementari. 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. Se il processo di raccolta dei dati non ha esito positivo, l'esecuzione del comando DBCC viene completata comunque.

Risoluzione degli errori

Se DBCC CHECKFILEGROUP restituisce errori, è consigliabile ripristinare il database dal backup. Non è possibile specificare le opzioni di ripristino nel comando DBCC CHECKFILEGROUP.

Se non esistono backup, per correggere gli errori restituiti è necessario eseguire DBCC CHECKDB e specificare un'opzione di ripristino. L'opzione di ripristino 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.

Autorizzazioni

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

Esempi

A. Controllo del filegroup PRIMARY nel database AdventureWorks

Nell'esempio seguente viene verificato il filegroup primario del database AdventureWorks.

USE AdventureWorks;
GO
DBCC CHECKFILEGROUP;
GO

B. Controllo del filegroup PRIMARY nel database AdventureWorks senza indici non cluster

Nell'esempio seguente viene verificato il filegroup primario del database AdventureWorks , esclusi gli indici non cluster, in base al numero di identificazione del filegroup primario e l'opzione NOINDEX.

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

C. Controllo del filegroup PRIMARY con opzioni

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

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

Vedere anche

Riferimento

DBCC (Transact-SQL)
FILEGROUP_ID (Transact-SQL)
sp_helpfile (Transact-SQL)
sp_helpfilegroup (Transact-SQL)
sys.sysfilegroups (Transact-SQL)
DBCC CHECKDB (Transact-SQL)
DBCC CHECKALLOC (Transact-SQL)
DBCC CHECKTABLE (Transact-SQL)

Altre risorse

Architettura fisica del database

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

17 novembre 2008

Nuovo contenuto:
  • Nella definizione di ALL_ERRORMSGS viene descritta una nuova funzionalità di SP3.

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta della sottosezione "Tabelle partizionate in filegroup separati" nella sezione Osservazioni. In questa sezione viene descritta una nuova funzionalità di SP2.

14 aprile 2006

Nuovo contenuto:
  • Aggiunta di una sottosezione relativa alla segnalazione degli errori nella sezione Osservazioni. In questa sezione vengono illustrate le nuove funzionalità di SP1.

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta dell'esempio C.
Contenuto modificato:
  • Correzione della sintassi.
  • Nella sezione Osservazioni aggiunta di informazioni sui messaggi scritti nel log degli errori di SQL Server e delle descrizioni dei valori di stato.
  • Correzione della sezione Osservazioni relativamente agli indici non cluster su filegroup separati, in base al comportamento di SQL Server 2005.