DBCC CHECKDB (Transact-SQL)DBCC CHECKDB (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2012)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Verifica l'integrità logica e fisica di tutti gli oggetti del database specificato eseguendo le operazioni seguenti:Checks the logical and physical integrity of all the objects in the specified database by performing the following operations:

  • Esegue DBCC CHECKALLOC nel database.Runs DBCC CHECKALLOC on the database.
  • Esegue DBCC CHECKTABLE in ogni tabella e vista del database.Runs DBCC CHECKTABLE on every table and view in the database.
  • Esegue DBCC CHECKCATALOG nel database.Runs DBCC CHECKCATALOG on the database.
  • Convalida del contenuto di ogni vista indicizzata nel database.Validates the contents of every indexed view in the database.
  • Convalida la coerenza a livello di collegamenti tra i metadati della tabella e le directory e i file del file system quando vengono archiviati dati varbinary(max) nel file system usando FILESTREAM.Validates link-level consistency between table metadata and file system directories and files when storing varbinary(max) data in the file system using FILESTREAM.
  • Convalida dei dati di Service BrokerService Broker nel database.Validates the Service BrokerService Broker data in the database.

Non è pertanto necessario eseguire i comandi DBCC CHECKALLOC, DBCC CHECKTABLE o DBCC CHECKCATALOG separatamente da DBCC CHECKDB.This means that the DBCC CHECKALLOC, DBCC CHECKTABLE, or DBCC CHECKCATALOG commands do not have to be run separately from DBCC CHECKDB. Per ulteriori informazioni sui controlli eseguiti da questi comandi, vedere la relativa descrizione.For more detailed information about the checks that these commands perform, see the descriptions of these commands.

Nota

DBCC CHECKDB è supportato nei database che contengono tabelle ottimizzate per la memoria, ma la convalida viene eseguita solo nelle tabelle basate su disco.DBCC CHECKDB is supported on databases that contain memory-optimized tables but validation only occurs on disk-based tables. Tuttavia, come parte del backup e del ripristino del database, la convalida mediante CHECKSUM viene eseguita per i file nei filegroup ottimizzati per la memoria.However, as part of database backup and recovery, a CHECKSUM validation is done for files in memory-optimized filegroups.

Poiché le opzioni di correzione DBCC non sono disponibili per le tabelle ottimizzate per la memoria, è necessario eseguire regolarmente il backup dei database e verificare i backup.Since DBCC repair options are not available for memory-optimized tables, you must back up your databases regularly and test the backups. Se i problemi di integrità dei dati si verificano in una tabella ottimizzata per la memoria, è necessario eseguire il ripristino dall'ultima copia di backup valida nota.If data integrity issues occur in a memory-optimized table, you must restore from the last known good backup.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

DBCC CHECKDB     
    [ ( database_name | database_id | 0    
        [ , NOINDEX     
        | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]    
    ) ]    
    [ WITH     
        {    
            [ ALL_ERRORMSGS ]    
            [ , EXTENDED_LOGICAL_CHECKS ]     
            [ , NO_INFOMSGS ]    
            [ , TABLOCK ]    
            [ , ESTIMATEONLY ]    
            [ , { PHYSICAL_ONLY | DATA_PURITY } ]    
            [ , MAXDOP  = number_of_processors ]    
        }    
    ]    
]    

ArgomentiArguments

database_name | database_id | 0database_name | database_id | 0
Nome o ID del database per cui eseguire i controlli di integrità.Is the name or ID of the database for which to run integrity checks. Se questo argomento viene omesso oppure se viene specificato il valore 0, viene utilizzato il database corrente.If not specified, or if 0 is specified, the current database is used. I nomi dei database devono essere conformi alle regole per gli identificatori.Database names must comply with the rules for identifiers.

NOINDEXNOINDEX
Specifica che non è necessario eseguire controlli estesi di indici non cluster per le tabelle utente.Specifies that intensive checks of nonclustered indexes for user tables should not be performed. In questo modo, è possibile ridurre i tempi di esecuzione complessivi.This decreases the overall execution time. NOINDEX non influisce sulle tabelle di sistema perché i controlli di integrità vengono sempre eseguiti sugli indici delle tabelle di sistema.NOINDEX does not affect system tables because integrity checks are always performed on system table indexes.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILDREPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Specifica che DBCC CHECKDB corregge gli errori rilevati.Specifies that DBCC CHECKDB repair the found errors. Utilizzare le opzioni REPAIR solo come ultima risorsa.Use the REPAIR options only as a last resort. Il database specificato deve essere in modalità utente singolo per utilizzare una delle opzioni di correzione seguenti.The specified database must be in single-user mode to use one of the following repair options.

REPAIR_ALLOW_DATA_LOSSREPAIR_ALLOW_DATA_LOSS
Tenta di riparare tutti gli errori rilevati.Tries to repair all reported errors. Le operazioni di correzione possono comportare la perdita di dati.These repairs can cause some data loss.

Avviso

L'opzione REPAIR_ALLOW_DATA_LOSS è una funzionalità supportata ma non sempre può rappresentare l'opzione migliore per portare un database in uno stato coerente dal punto di vista fisico.The REPAIR_ALLOW_DATA_LOSS option is a supported feature but it may not always be the best option for bringing a database to a physically consistent state. Se ha esito positivo, l'opzione REPAIR_ALLOW_DATA_LOSS può comportare una perdita di dati.If successful, the REPAIR_ALLOW_DATA_LOSS option may result in some data loss. Infatti, può comportare una perdita maggiore di dati rispetto al ripristino del database dall'ultimo backup valido.In fact, it may result in more data lost than if a user were to restore the database from the last known good backup.

MicrosoftMicrosoft consiglia sempre di eseguire il ripristino dall'ultimo backup valido come metodo principale per il recupero da errori segnalati da DBCC CHECKDB. always recommends a user restore from the last known good backup as the primary method to recover from errors reported by DBCC CHECKDB. L'opzione REPAIR_ALLOW_DATA_LOSS non è un'alternativa del ripristino da un backup valido.The REPAIR_ALLOW_DATA_LOSS option is not an alternative for restoring from a known good backup. È un'opzione di emergenza che è consigliabile usare solo se non è possibile eseguire il ripristino da un backup.It is an emergency “last resort” option recommended for use only if restoring from a backup is not possible.

Alcuni errori che possono essere corretti solo con l'opzione REPAIR_ALLOW_DATA_LOSS, possono comportare la deallocazione di una riga, una pagina o una serie di pagine per cancellare gli errori.Certain errors, that can only be repaired using the REPAIR_ALLOW_DATA_LOSS option, may involve deallocating a row, page, or series of pages to clear the errors. Tutti i dati deallocati non saranno più accessibile né potranno essere recuperati e non sarà possibile determinare il contenuto esatto dei dati deallocati.Any deallocated data is no longer accessible or recoverable for the user, and the exact contents of the deallocated data cannot be determined. Pertanto, l'integrità referenziale potrebbe non essere accurata dopo la deallocazione di una riga o una pagina poiché i vincoli di chiave esterna non vengono verificati né mantenuti come parte di questa operazione di ripristino.Therefore, referential integrity may not be accurate after any rows or pages are deallocated because foreign key constraints are not checked or maintained as part of this repair operation. L'utente deve controllare l'integrità referenziale del database (con DBCC CHECKCONSTRAINTS) dopo aver usato l'opzione REPAIR_ALLOW_DATA_LOSS.The user must inspect the referential integrity of their database (using DBCC CHECKCONSTRAINTS) after using the REPAIR_ALLOW_DATA_LOSS option.

Prima di eseguire il ripristino, creare copie fisiche dei file che appartengono a questo database.Before performing the repair, create physical copies of the files that belong to this database. Ciò include il file di dati primario (mdf), eventuali file di dati secondari (ndf), tutti i file di log delle transazioni (ldf) e altri contenitori che costituiscono il database, compresi cataloghi full-text, cartelle del flusso di file, dati con ottimizzazione per la memoria e così via.This includes the primary data file (.mdf), any secondary data files (.ndf), all transaction log files (.ldf), and other containers that form the database including full text catalogs, file stream folders, memory optimized data, etc.

Prima di eseguire il ripristino, provare a modificare lo stato del database impostando la modalità di emergenza e a estrarre quante più informazioni possibile dalle tabelle critiche salvando tali dati.Before performing the repair, consider changing the state of the database to EMERGENCY mode and trying to extract as much information possible from the critical tables and save that data.

REPAIR_FASTREPAIR_FAST
Supporta la sintassi per motivi di compatibilità con le versioni precedentiMaintains syntax for backward compatibility only. Non vengono eseguite correzioni.No repair actions are performed.

REPAIR_REBUILDREPAIR_REBUILD
Esegue operazioni di ripristino senza possibilità di perdita dei dati.Performs repairs that have no possibility of data loss. Sono incluse operazioni di ripristino rapide, ad esempio ripristino di righe mancanti in indici non cluster, e operazioni che richiedono una maggiore quantità di tempo, come la ricompilazione di un indice.This can include quick repairs, such as repairing missing rows in non-clustered indexes, and more time-consuming repairs, such as rebuilding an index.
Questo argomento non consente di correggere errori relativi ai dati FILESTREAM.This argument does not repair errors involving FILESTREAM data.

Importante

Poiché tutte le operazioni eseguite da DBCC CHECKDB con qualsiasi opzione di ripristino (REPAIR) vengono registrate e possono essere recuperate completamente, MicrosoftMicrosoft consiglia sempre di usare CHECKDB con le opzioni di ripristino (REPAIR) in una transazione (eseguire BEGIN TRANSACTION) in modo da consentire all'utente di verificare se accettare o meno i risultati dell'operazione.Since DBCC CHECKDB with any of the REPAIR options are completely logged and recoverable, MicrosoftMicrosoft always recommends a user use CHECKDB with any REPAIR options within a transaction (execute BEGIN TRANSACTION before running the command) so that the user can confirm he/she wants to accept the results of the operation. L'utente potrà quindi eseguire il commit di tutte le operazioni effettuate dall'operazione di ripristino con l'istruzione COMMIT TRANSACTION.Then the user can execute COMMIT TRANSACTION to commit all work done by the repair operation. Se l'utente non vuole accettare i risultati dell'operazione, potrà eseguire un'istruzione ROLLBACK TRANSACTION per annullare gli effetti delle operazioni di ripristino.If the user does not want to accept the results of the operation, he/she can execute a ROLLBACK TRANSACTION to undo the effects of the repair operations.

Per correggere gli errori, è consigliabile eseguire un ripristino da un backup.To repair errors, we recommend restoring from a backup. Le operazioni di correzione non tengono conto degli eventuali vincoli esistenti per le tabelle o tra le tabelle.Repair operations do not consider any of the constraints that may exist on or between tables. Se la tabella specificata è interessata da uno o più vincoli, è consigliabile eseguire DBCC CHECKCONSTRAINTS dopo l'operazione di correzione.If the specified table is involved in one or more constraints, we recommend running DBCC CHECKCONSTRAINTS after a repair operation. Se è necessario utilizzare REPAIR, eseguire DBCC CHECKDB senza opzioni di correzione per individuare il livello di correzione da applicare.If you must use REPAIR, run DBCC CHECKDB without a repair option to find the repair level to use. Se si utilizza il livello REPAIR_ALLOW_DATA_LOSS, è consigliabile eseguire il backup del database prima di utilizzare DBCC CHECKDB con questa opzione.If you use the REPAIR_ALLOW_DATA_LOSS level, we recommend that you back up the database before you run DBCC CHECKDB with this option.

ALL_ERRORMSGSALL_ERRORMSGS
Visualizza tutti gli errori segnalati per oggetto.Displays all reported errors per object. Tutti i messaggi di errore vengono visualizzati per impostazione predefinita.All error messages are displayed by default. La specifica o l'omissione di questa opzione non ha alcun effetto.Specifying or omitting this option has no effect. I messaggi di errore vengono ordinati in base all'ID oggetto, ad eccezione dei messaggi generati dal database tempdb.Error messages are sorted by object ID, except for those messages generated from tempdb database.

EXTENDED_LOGICAL_CHECKSEXTENDED_LOGICAL_CHECKS
Se il livello di compatibilità è 100 ( SQL Server 2008SQL Server 2008) o maggiore, esegue controlli di consistenza logica in una vista indicizzata, indici XML e indici spaziali, dove presenti.If the compatibility level is 100 ( SQL Server 2008SQL Server 2008) or higher, performs logical consistency checks on an indexed view, XML indexes, and spatial indexes, where present.
Per altre informazioni, vedere Esecuzione di controlli di consistenza logica negli indici nella sezione Osservazioni più avanti in questo argomento.For more information, see Performing Logical Consistency Checks on Indexes, in the Remarks section later in this topic.

NO_INFOMSGSNO_INFOMSGS
Disattiva tutti i messaggi informativi.Suppresses all informational messages.

TABLOCKTABLOCK
Consente a DBCC CHECKDB di ottenere blocchi invece di utilizzare uno snapshot di database interno,Causes DBCC CHECKDB to obtain locks instead of using an internal database snapshot. incluso un blocco esclusivo (X) sul database di breve durata.This includes a short-term exclusive (X) lock on the database. TABLOCK consente l'esecuzione più rapida di DBCC CHECKDB in database con carico di lavoro elevato, ma comporta una diminuzione del livello di concorrenza del database durante l'esecuzione del comando.TABLOCK will cause DBCC CHECKDB to run faster on a database under heavy load, but decreases the concurrency available on the database while DBCC CHECKDB is running.

Importante

TABLOCK limita i controlli eseguiti. DBCC CHECKCATALOG non viene eseguito sul database e i dati di Service BrokerService Broker non vengono convalidati.TABLOCK limits the checks that are performed; DBCC CHECKCATALOG is not run on the database, and Service BrokerService Broker data is not validated.

ESTIMATEONLYESTIMATEONLY
Visualizza lo spazio di tempdb stimato necessario per eseguire DBCC CHECKDB con tutte le altre opzioni specificate.Displays the estimated amount of tempdb space that is required to run DBCC CHECKDB with all the other specified options. Il controllo effettivo sul database non viene eseguito.The actual database check is not performed.

PHYSICAL_ONLYPHYSICAL_ONLY
Limita il controllo di integrità alla struttura fisica della pagina, alle intestazioni dei record e alla consistenza di allocazione del database.Limits the checking to the integrity of the physical structure of the page and record headers and the allocation consistency of the database. Sebbene sia progettato per consentire un controllo a basso overhead della consistenza fisica del database, questo controllo consente inoltre di rilevare le pagine incomplete, gli errori di checksum e i comuni problemi a livello di hardware che possono compromettere i dati di un utente.This check is designed to provide a small overhead check of the physical consistency of the database, but it can also detect torn pages, checksum failures, and common hardware failures that can compromise a user's data.
Un'esecuzione completa di DBCC CHECKDB può richiedere tempi notevolmente più lunghi rispetto alle versioni precedenti,A full run of DBCC CHECKDB may take considerably longer to complete than earlier versions. per i seguenti motivi:This behavior occurs because:

  • I controlli logici sono più completi.The logical checks are more comprehensive.
  • Alcune delle strutture sottostanti da controllare sono più complesse.Some of the underlying structures to be checked are more complex.
  • Sono stati introdotti molti nuovi controlli per includere le nuove funzionalità.Many new checks have been introduced to include the new features.
    Per questo motivo, l'utilizzo dell'opzione PHYSICAL_ONLY può consentire di ottenere tempi molto più brevi per l'esecuzione di DBCC CHECKDB in database di grandi dimensioni ed è quindi l'opzione consigliata per l'utilizzo frequente nei sistemi di produzione.Therefore, using the PHYSICAL_ONLY option may cause a much shorter run-time for DBCC CHECKDB on large databases and is recommended for frequent use on production systems. È consigliabile prevedere periodicamente un'esecuzione completa di DBCC CHECKDB.We still recommend that a full run of DBCC CHECKDB be performed periodically. La frequenza di esecuzione dipende da fattori specifici per i singoli ambienti aziendali e di produzione.The frequency of these runs depends on factors specific to individual businesses and production environments.
    Questo argomento implica sempre l'utilizzo dell'opzione NO_INFOMSGS e non è consentito con le opzioni di correzione.This argment always implies NO_INFOMSGS and is not allowed with any one of the repair options.

Avviso

Se si specifica PHYSICAL_ONLY, DBCC CHECKDB ignora tutti i controlli dei dati FILESTREAM.Specifying PHYSICAL_ONLY causes DBCC CHECKDB to skip all checks of FILESTREAM data.

DATA_PURITYDATA_PURITY
Consente a DBCC CHECKDB di controllare il database per i valori di colonna che non sono validi o non sono compresi nell'intervallo dei valori consentiti.Causes DBCC CHECKDB to check the database for column values that are not valid or out-of-range. Ad esempio, DBCC CHECKDB rileva le colonne con valori di data e ora maggiori o minori dell'intervallo accettabile per il tipo di dati datetime oppure le colonne di tipi di dati numerici approssimati o decimal con valori di precisione o di scala non validi.For example, DBCC CHECKDB detects columns with date and time values that are larger than or less than the acceptable range for the datetime data type; or decimal or approximate-numeric data type columns with scale or precision values that are not valid.
I controlli di integrità dei valori di colonna sono abilitati per impostazione predefinita e non richiedono l'opzione DATA_PURITY.Column-value integrity checks are enabled by default and do not require the DATA_PURITY option. Per i database aggiornati da versioni precedenti di SQL ServerSQL Server, i controlli dei valori di colonna non sono abilitati per impostazione predefinita fino a quando DBCC CHECKDB WITH DATA_PURITY non è stato eseguito senza errori nel database.For databases upgraded from earlier versions of SQL ServerSQL Server, column-value checks are not enabled by default until DBCC CHECKDB WITH DATA_PURITY has been run error free on the database. A questo punto, DBCC CHECKDB controlla l'integrità dei valori di colonna per impostazione predefinita.After this, DBCC CHECKDB checks column-value integrity by default. Per ulteriori informazioni su come l'aggiornamento del database da versioni precedenti di SQL ServerSQL Server può influire su CHECKDB, vedere la sezione Osservazioni di seguito in questo argomento.For more information about how CHECKDB might be affected by upgrading database from earlier versions of SQL ServerSQL Server, see the Remarks section later in this topic.

Avviso

Se si specifica PHYSICAL_ONLY, i controlli di integrità di colonna non vengono eseguiti.If PHYSICAL_ONLY is specified, column-integrity checks are not performed.

Gli errori di convalida rilevati da questa opzione non possono essere corretti utilizzando le opzioni di correzione DBCC.Validation errors reported by this option cannot be fixed by using DBCC repair options. Per informazioni sulla correzione manuale di questi errori, vedere l'articolo 923247 della Knowledge Base Risoluzione dei problemi errore DBCC 2570 in SQL Server 2005 e versioni successive.For information about manually correcting these errors, see Knowledge Base article 923247: Troubleshooting DBCC error 2570 in SQL Server 2005 and later versions.

MAXDOPMAXDOP
Si applica a: SQL ServerSQL Server (da SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 a SQL Server 2017SQL Server 2017).Applies to: SQL ServerSQL Server ( SQL Server 2014 (12.x)SQL Server 2014 (12.x) SP2 through SQL Server 2017SQL Server 2017).

Esegue l'override dell'opzione di configurazione Massimo grado di parallelismo di sp_configure per l'istruzione.Overrides the max degree of parallelism configuration option of sp_configure for the statement. MAXDOP può superare il valore configurato con sp_configure.The MAXDOP can exceed the value configured with sp_configure. Se MAXDOP supera il valore configurato con Resource Governor, il Motore di database di SQL ServerSQL Server Database Engine usa il valore MAXDOP di Resource Governor descritto in ALTER WORKLOAD GROUP.If MAXDOP exceeds the value configured with Resource Governor, the Motore di database di SQL ServerSQL Server Database Engine uses the Resource Governor MAXDOP value, described in ALTER WORKLOAD GROUP. Quando si utilizza l'hint per la query MAXDOP sono valide tutte le regole semantiche utilizzate con l'opzione di configurazione max degree of parallelism.All semantic rules used with the max degree of parallelism configuration option are applicable when you use the MAXDOP query hint. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option.

Avviso

Se MAXDOP è impostato su zero, SQL Server sceglie il grado massimo di parallelismo.If MAXDOP is set to zero then SQL Server chooses the max degree of parallelism to use.

RemarksRemarks

DBCC CHECKDB non esamina gli indici disabilitati.DBCC CHECKDB does not examine disabled indexes. Per altre informazioni sugli indici disabilitati, vedere Disabilitare indici e vincoli.For more information about disabled indexes, see Disable Indexes and Constraints.

Se un tipo definito dall'utente (UDT) viene contrassegnato come ordinato per byte, è necessario che sia presente un'unica serializzazione di tale tipo.If a user-defined type is marked as being byte ordered, there must only be one serialization of the user-defined type. In assenza di una serializzazione consistente dei tipi definiti dall'utente (UDT) ordinati per byte, durante l'esecuzione di DBCC CHECKDB viene generato l'errore 2537.Not having a consistent serialization of byte-ordered user-defined types causes error 2537 when DBCC CHECKDB is run. Per altre informazioni, vedere Creazione di tipi definiti dall'utente - requisiti.For more information, see User-Defined Type Requirements.

Poiché il database Resource è modificabile solo in modalità utente singolo, il comando DBCC CHECKDB non può essere eseguito direttamente su tale database.Because the Resource database is modifiable only in single-user mode, the DBCC CHECKDB command cannot be run on it directly. Tuttavia, quando DBCC CHECKDB viene eseguito sul database master, viene eseguito internamente anche un secondo CHECKDB sul database Resource.However, when DBCC CHECKDB is executed against the master database, a second CHECKDB is also run internally on the Resource database. Di conseguenza, DBCC CHECKDB può restituire risultati aggiuntivi.This means that DBCC CHECKDB can return extra results. Il comando restituisce ulteriori set di risultati quando non si imposta alcuna opzione o quando si imposta l'opzione PHYSICAL_ONLY o ESTIMATEONLY.The command returns extra result sets when no options are set, or when either the PHYSICAL_ONLY or ESTIMATEONLY option is set.

A partire da SQL Server 2005SQL Server 2005 SP2, l'esecuzione di DBCC CHECKDB non comporta più la cancellazione della cache dei piani per l'istanza di SQL ServerSQL Server.Starting with SQL Server 2005SQL Server 2005 SP2, executing DBCC CHECKDB no longer clears the plan cache for the instance of SQL ServerSQL Server. Nelle versioni di SQL Server 2005SQL Server 2005 precedenti a SP2, l'esecuzione di DBCC CHECKDB cancella la cache dei piani.Before SQL Server 2005SQL Server 2005 SP2, executing DBCC CHECKDB clears the plan cache. La cancellazione della cache dei piani comporta la ricompilazione di tutti i piani di esecuzione successivi e può causare un improvviso temporaneo peggioramento delle prestazioni di esecuzione delle query.Clearing the plan cache causes recompilation of all later execution plans and may cause a sudden, temporary decrease in query performance.

Esecuzione di controlli di consistenza logica negli indiciPerforming Logical Consistency Checks on Indexes

I controlli di consistenza logica negli indici variano in base al livello di compatibilità del database, come indicato di seguito:Logical consistency checking on indexes varies according to the compatibility level of the database, as follows:

  • Se il livello di compatibilità è 100 ( SQL Server 2008SQL Server 2008) o maggiore:If the compatibility level is 100 ( SQL Server 2008SQL Server 2008) or higher:
  • A meno che non venga specificato NOINDEX, tramite DBCC CHECKDB vengono eseguiti controlli di consistenza sia fisica che logica in una singola tabella e in tutti i relativi indici non cluster.Unless NOINDEX is specified, DBCC CHECKDB performs both physical and logical consistency checks on a single table and on all its nonclustered indexes. Per impostazione predefinita, tuttavia, negli indici XML, negli indici spaziali e nelle viste indicizzate vengono eseguiti solo controlli di consistenza fisica.However, on XML indexes, spatial indexes, and indexed views only physical consistency checks are performed by default.
  • Se viene specificato WITH EXTENDED_LOGICAL_CHECKS, vengono eseguiti controlli logici in una vista indicizzata, indici XML e indici spaziali, dove presenti.If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on an indexed view, XML indexes, and spatial indexes, where present. Per impostazione predefinita, i controlli di consistenza fisica vengono eseguiti prima di quelli di consistenza logica.By default, physical consistency checks are performed before the logical consistency checks. Se viene specificato anche NOINDEX, vengono eseguiti solo i controlli logici.If NOINDEX is also specified, only the logical checks are performed.

Tramite questi controlli di consistenza logica vengono eseguiti controlli incrociati della tabella degli indici interna dell'oggetto Index con la tabella utente a cui viene fatto riferimento.These logical consistency checks cross check the internal index table of the index object with the user table that it is referencing. Per trovare le righe esterne, viene creata una query interna per eseguire un'intersezione completa della tabella interna e della tabella utente.To find outlying rows, an internal query is constructed to perform a full intersection of the internal and user tables. L'esecuzione di questa query può influire notevolmente sulle prestazioni e non è possibile tenere traccia del relativo stato di avanzamento.Running this query can have a very high effect on performance, and its progress cannot be tracked. È pertanto consigliabile specificare WITH EXTENDED_LOGICAL_CHECKS solo se si sospetta la presenza di problemi dell'indice non correlati a danni fisici o se i checksum a livello di pagina sono stati disabilitati e si sospetta la presenza di danni hardware a livello di colonna.Therefore, we recommend that you specify WITH EXTENDED_LOGICAL_CHECKS only if you suspect index issues that are unrelated to physical corruption, or if page-level checksums have been turned off and you suspect column-level hardware corruption.

  • Se l'indice è un indice filtrato, tramite DBCC CHECKDB vengono eseguiti controlli di consistenza per verificare che le voci di indice soddisfino il predicato del filtro.If the index is a filtered index, DBCC CHECKDB performs consistency checks to verify that the index entries satisfy the filter predicate.
  • Se il livello di compatibilità è 90 o minore, a meno che non venga specificato NOINDEX, tramite DBCC CHECKDB vengono eseguiti controlli di consistenza sia fisica che logica in una singola tabella o vista indicizzata e in tutti i relativi indici non cluster e XML.If the compatibility level is 90 or less, unless NOINDEX is specified, DBCC CHECKDB performs both physical and logical consistency checks on a single table or indexed view and on all its nonclustered and XML indexes. Gli indici spaziali non sono supportati.Spatial indexes are not supported.
  • A partire da SQL Server 2016, non verranno eseguiti per impostazione predefinita controlli aggiuntivi su colonne calcolate persistenti, colonne UDT e indici filtrati per evitare valutazioni di espressioni costose.Starting with SQL Server 2016, additional checks on persisted computed columns, UDT columns, and filtered indexes will not run by default to avoid the expensive expression evaluations. Questa modifica riduce notevolmente la durata di CHECKDB su database contenenti tali oggetti.This change greatly reduces the duration of CHECKDB against databases containing these objects. Tuttavia, le verifiche di coerenza fisica di questi oggetti vengono sempre completate.However, the physical consistency checks of these objects is always completed. Le valutazioni delle espressioni vengono eseguite, oltre alle verifiche logiche già presenti, ovvero viste indicizzate, indici XML e indici spaziali, solo quando è specificata l'opzione EXTENDED_LOGICAL_CHECKS, in quanto parte di tale opzione.Only when EXTENDED_LOGICAL_CHECKS option is specified will the expression evaluations be performed in addition to already present logical checks (indexed view, XML indexes, and spatial indexes) as part of the EXTENDED_LOGICAL_CHECKS option.

Per informazioni sul livello di compatibilità di un databaseTo learn the compatibility level of a database

Snapshot di database internoInternal Database Snapshot

DBCC CHECKDB utilizza uno snapshot interno del database per garantire la consistenza delle transazioni necessaria per l'esecuzione di questi controlli.DBCC CHECKDB uses an internal database snapshot for the transactional consistency needed to perform these checks. Ciò consente di evitare problemi di blocco e concorrenza durante l'esecuzione di questi comandi.This prevents blocking and concurrency problems when these commands are executed. Per altre informazioni, vedere Visualizzare le dimensioni del file sparse di uno snapshot del database (Transact-SQL) e la sezione Utilizzo dello snapshot interno del database DBCC in DBCC (Transact-SQL).For more information, see View the Size of the Sparse File 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 se viene specificato TABLOCK, DBCC CHECKDB acquisisce blocchi per ottenere la consistenza necessaria.If a snapshot cannot be created, or TABLOCK is specified, DBCC CHECKDB acquires locks to obtain the required consistency. 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.In this case, an exclusive database lock is required to perform the allocation checks, and shared table locks are required to perform the table checks. L'esecuzione dell'istruzione DBCC CHECKDB sul database master ha esito negativo se non è possibile creare uno snapshot interno del database.DBCC CHECKDB fails when run against master if an internal database snapshot cannot be created. Quando il comando DBCC CHECKDB viene eseguito su tempdb, non esegue alcuna allocazione o controllo del catalogo e deve acquisire blocchi di tabella condivisi per eseguire i controlli sulle tabelle.Running DBCC CHECKDB against tempdb does not perform any allocation or catalog checks and must acquire shared table locks to perform table checks. Questo funzionamento dipende dal fatto che per motivi di prestazioni gli snapshot di database non sono disponibili in tempdb.This is because, for performance reasons, database snapshots are not available on tempdb. Ciò significa che non è possibile ottenere la consistenza delle transazioni necessaria.This means that the required transactional consistency cannot be obtained. In Microsoft SQL Server 2012 o versioni precedenti di SQL Server, è possibile che vengano generati messaggi di errore quando si esegue il comando DBCC CHECKDB per un database i cui file si trovano in un volume formattato in ReFS.In Microsoft SQL Server 2012 or an earlier version of SQL Server, you may encounter error messages when you run the DBCC CHECKDB command for a database that has its files located on an ReFS-formatted volume. Per altre informazioni, vedere l'articolo 2974455 della Knowledge Base: Comportamento di DBCC CHECKDB quando il database di SQL Server si trova su un volume di rif.For more information, see Knowledge Base article 2974455: DBCC CHECKDB behavior when the SQL Server database is located on an ReFS volume.

Controllo e ripristino dei dati FILESTREAMChecking and Repairing FILESTREAM Data

Quando FILESTREAM è abilitato per un database e una tabella, è possibile, facoltativamente, archiviare oggetti binari di grandi dimensioni (BLOB) varbinary(max) nel file system.When FILESTREAM is enabled for a database and table, you can optionally store varbinary(max) binary large objects (BLOBs) in the file system. Quando si utilizza DBCC CHECKDB in un database tramite cui vengono archiviati oggetti BLOB nel file system, tramite DBCC viene verificata la consistenza a livello di collegamenti tra il file system e il database.When using DBCC CHECKDB on a database that stores BLOBs in the file system, DBCC checks link-level consistency between the file system and database. Se, ad esempio, una tabella contiene una colonna varbinary(max) che usa l'attributo FILESTREAM, tramite DBCC CHECKDB viene verificato che sia presente un mapping uno-a-uno tra le directory e i file del file system e le righe, le colonne e i valori di colonna della tabella.For example, if a table contains a varbinary(max) column that uses the FILESTREAM attribute, DBCC CHECKDB will check that there is a one-to-one mapping between file system directories and files and table rows, columns, and column values. DBCC CHECKDB consente di correggere i danneggiamenti se si specifica l'opzione REPAIR_ALLOW_DATA_LOSS.DBCC CHECKDB can repair corruption if you specify the REPAIR_ALLOW_DATA_LOSS option. Per ripristinare il danneggiamento di FILESTREAM, DBCC consentirà di eliminare qualsiasi riga della tabella in cui mancano i dati del file system.To repair FILESTREAM corruption, DBCC will delete any table rows that are missing file system data.

Procedure consigliateBest Practices

È consigliabile utilizzare l'opzione PHYSICAL_ONLY per l'utilizzo frequente nei sistemi di produzione,We recommend that you use the PHYSICAL_ONLY option for frequent use on production systems. poiché consente di ridurre notevolmente i tempi di esecuzione di DBCC CHECKDB su database di grandi dimensioni.Using PHYSICAL_ONLY can greatly shorten run-time for DBCC CHECKDB on large databases. È inoltre consigliabile eseguire periodicamente DBCC CHECKDB senza opzioni.We also recommend that you periodically run DBCC CHECKDB with no options. La frequenza consigliata di esecuzione varia a seconda delle singole aziende e dei relativi ambienti di produzione.How frequently you should perform these runs depends on individual businesses and their production environments.

Controllo parallelo degli oggettiChecking Objects in Parallel

Per impostazione predefinita, DBCC CHECKDB esegue il controllo parallelo degli oggetti.By default, DBCC CHECKDB performs parallel checking of objects. Il grado di parallelismo viene determinato in modo automatico da Query Processor.The degree of parallelism is automatically determined by the query processor. Il livello massimo di parallelismo viene configurato allo stesso modo delle query parallele.The maximum degree of parallelism is configured just like parallel queries. Per limitare il numero massimo di processori disponibili per la verifica DBCC, usare sp_configure.To restrict the maximum number of processors available for DBCC checking, use sp_configure. Per altre informazioni, vedere Configurare l'opzione di configurazione del server max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option. È possibile disabilitare il controllo parallelo tramite il flag di traccia 2528.Parallel checking can be disabled by using trace flag 2528. Per altre informazioni, vedere Flag di traccia (Transact-SQL).For more information, see Trace Flags (Transact-SQL).

Nota

Questa funzionalità non è disponibile in ogni edizione di SQL ServerSQL Server.This feature is not available in every edition of SQL ServerSQL Server. Per altre informazioni, vedere la sezione sulla verifica della coerenza della gestione RDBMS di Edizioni e funzionalità supportate di SQL Server 2016.For more information, see parallel consistency check in the RDBMS Manageability section of Features Supported by the Editions of SQL Server 2016.

Informazioni sui messaggi di errore DBCCUnderstanding DBCC Error Messages

Dopo il completamento del comando DBCC CHECKDB, nel log degli errori di SQL ServerSQL Server viene scritto un messaggio.After the DBCC CHECKDB command finishes, a message is written to the SQL ServerSQL Server error log. Se l'esecuzione del comando DBCC ha esito positivo, il messaggio segnala che il completamento è avvenuto correttamente e indica la durata di esecuzione del comando.If the DBCC command successfully executes, the message indicates success and the amount of time that the command ran. 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.If the DBCC command stops before completing the check because of an error, the message indicates that the command was terminated, a state value, and the amount of time the command ran. Nella tabella seguente sono elencati e descritti i valori di stato che possono essere inclusi nel messaggio.The following table lists and describes the state values that can be included in the message.

StateState DescrizioneDescription
00 È stato generato l'errore numero 8930.Error number 8930 was raised. Indica un danneggiamento dei metadati che ha causato l'interruzione del comando DBCC.This indicates a corruption in metadata that terminated the DBCC command.
11 È stato generato l'errore numero 8967.Error number 8967 was raised. Si è verificato un errore DBCC interno.There was an internal DBCC error.
22 Si è verificato un errore durante un ripristino di database in modalità di emergenza.A failure occurred during emergency mode database repair.
33 Indica un danneggiamento dei metadati che ha causato l'interruzione del comando DBCC.This indicates a corruption in metadata that terminated the DBCC command.
44 È stata rilevata una violazione di accesso o asserzione.An assert or access violation was detected.
55 Si è verificato un errore sconosciuto che ha causato l'interruzione del comando DBCC.An unknown error occurred that terminated the DBCC command.

Segnalazione erroriError Reporting

Quando un comando DBCC CHECKDB rileva un errore di danneggiamento, viene creato un file di dump denominato SQLDUMP*nnnn*.txt nella directory LOG di SQL ServerSQL Server.A dump file (SQLDUMP*nnnn*.txt) is created in the SQL ServerSQL Server LOG directory whenever DBCC CHECKDB detects a corruption error. Quando la raccolta di dati Utilizzo caratteristiche e le funzionalità Segnalazione errori sono abilitate per l'istanza di SQL ServerSQL Server, il file viene inoltrato automaticamente a MicrosoftMicrosoft.When the Feature Usage data collection and Error Reporting features are enabled for the instance of SQL ServerSQL Server, the file is automatically forwarded to MicrosoftMicrosoft. I dati raccolti consentono di migliorare la funzionalità di SQL ServerSQL Server.The collected data is used to improve SQL ServerSQL Server functionality. Il file di dump contiene i risultati dell'esecuzione del comando DBCC CHECKDB e l'output di dati diagnostici supplementari.The dump file contains the results of the DBCC CHECKDB command and additional diagnostic output. L'accesso è limitato all'account del servizio SQL ServerSQL Server e ai membri del ruolo sysadmin.Access is limited to the SQL ServerSQL Server service account and members of the sysadmin role. Per impostazione predefinita il ruolo sysadmin contiene tutti i membri del gruppo BUILTIN\Administrators di Windows e del gruppo dell'amministratore locale.By default, the sysadmin role contains all members of the Windows BUILTIN\Administrators group and the local administrator's group. Se il processo di raccolta dei dati non ha esito positivo, l'esecuzione del comando DBCC viene completata comunque.The DBCC command does not fail if the data collection process fails.

Risoluzione degli erroriResolving Errors

Se vengono rilevati errori da DBCC CHECKDB, è consigliabile ripristinare il database dal backup del database invece di eseguire REPAIR con una delle opzioni REPAIR.If any errors are reported by DBCC CHECKDB, we recommend restoring the database from the database backup instead of running REPAIR with one of the REPAIR options. Se non esistono backup, l'esecuzione di REPAIR corregge gli errori rilevati.If no backup exists, running repair corrects the errors reported. L'opzione REPAIR da utilizzare è specificata al termine dell'elenco degli errori rilevati.The repair option to use is specified at the end of the list of reported errors. La correzione di errori con l'opzione REPAIR_ALLOW_DATA_LOSS, tuttavia, potrebbe richiedere l'eliminazione di alcune pagine, con conseguente perdita di dati.However, correcting the errors by using the REPAIR_ALLOW_DATA_LOSS option might require deleting some pages, and therefore some data.

In determinate circostanze, nel database possono essere inseriti dei valori non validi o non compresi nell'intervallo dei valori consentiti in base al tipo di dati della colonna.Under some circumstances, values might be entered into the database that are not valid or out-of-range based on the data type of the column. DBCC CHECKDB è in grado di rilevare i valori di colonna non validi per tutti i tipi di dati della colonna.DBCC CHECKDB can detect column values that are not valid for all column data types. Pertanto, l'esecuzione di DBCC CHECKDB con l'opzione DATA_PURITY per i database aggiornati da versioni precedenti di SQL ServerSQL Server può indicare errori di valori di colonna preesistenti.Therefore, running DBCC CHECKDB with the DATA_PURITY option on databases that have been upgraded from earlier versions of SQL ServerSQL Server might reveal preexisting column-value errors. Poiché SQL ServerSQL Server non è in grado di correggere automaticamente questi errori, il valore della colonna deve essere aggiornato manualmente.Because SQL ServerSQL Server cannot automatically repair these errors, the column value must be manually updated. Se CHECKDB rileva tale errore, CHECKDB restituisce un avviso di errore numero 2570, nonché le informazioni per identificare la riga interessata e correggere manualmente l'errore.If CHECKDB detects such an error, CHECKDB returns a warning, the error number 2570, and information to identify the affected row and manually correct the error.

È possibile eseguire l'operazione di correzione tramite una transazione utente che consente il rollback delle modifiche apportate.The repair can be performed under a user transaction to let the user roll back the changes that were made. Se si esegue il rollback delle correzioni, il database include ancora errori e deve essere ripristinato da un backup.If repairs are rolled back, the database will still contain errors and must be restored from a backup. Dopo il completamento delle correzioni, eseguire il backup del database.After repairs are completed, back up the database.

Risoluzione degli errori in modalità di emergenza per il databaseResolving Errors in Database Emergency Mode

Quando un database viene impostato in modalità di emergenza mediante l'istruzione ALTER DATABASE, DBCC CHECKDB può eseguire alcune correzioni speciali nel database se si specifica l'opzione REPAIR_ALLOW_DATA_LOSS.When a database has been set to emergency mode by using the ALTER DATABASE statement, DBCC CHECKDB can perform some special repairs on the database if the REPAIR_ALLOW_DATA_LOSS option is specified. Grazie a queste correzioni è possibile riportare online database altrimenti irrecuperabili in uno stato consistente dal punto di vista fisico.These repairs may allow for ordinarily unrecoverable databases to be brought back online in a physically consistent state. È consigliabile utilizzarle solo se strettamente necessario e solo se non è possibile ripristinare il database da un backup.These repairs should be used as a last resort and only when you cannot restore the database from a backup. Se si imposta la modalità di emergenza, il database viene contrassegnato come READ_ONLY, la registrazione è disabilitata e l'accesso è consentito ai soli membri del ruolo predefinito del server sysadmin.When the database is set to emergency mode, the database is marked READ_ONLY, logging is disabled, and access is limited to members of the sysadmin fixed server role.

Nota

Non è possibile eseguire il comando DBCC CHECKDB in modalità di emergenza all'interno di una transazione utente, né eseguire il rollback della transazione al termine dell'esecuzione.You cannot run the DBCC CHECKDB command in emergency mode inside a user transaction and roll back the transaction after execution.

Quando il database è in modalità di emergenza e DBCC CHECKDB viene eseguito con la clausola REPAIR_ALLOW_DATA_LOSS, vengono eseguite le azioni seguenti:When the database is in emergency mode and DBCC CHECKDB with the REPAIR_ALLOW_DATA_LOSS clause is run, the following actions are taken:

  • DBCC CHECKDB utilizza le pagine contrassegnate come inaccessibili a causa di errori di I/O o checksum come se tali errori non si fossero verificati.DBCC CHECKDB uses pages that have been marked inaccessible because of I/O or checksum errors, as if the errors have not occurred. Questa azione consente di aumentare le possibilità di recupero dei dati del database.Doing this increases the chances for data recovery from the database.
  • DBCC CHECKDB tenta di recuperare il database mediante tecniche di recupero standard basate su log.DBCC CHECKDB attempts to recover the database using regular log-based recovery techniques.
  • Se il recupero del database ha esito negativo a causa di un problema di danneggiamento del log delle transazioni, verrà ricostruito il log delle transazioni.If, because of transaction log corruption, database recovery is unsuccessful, the transaction log is rebuilt. Tale ricompilazione può provocare la perdita di consistenza delle transazioni.Rebuilding the transaction log may result in the loss of transactional consistency.

Avviso

L'opzione REPAIR_ALLOW_DATA_LOSS è una funzionalità supportata di SQL ServerSQL Server.The REPAIR_ALLOW_DATA_LOSS option is a supported feature of SQL ServerSQL Server. Tuttavia, non sempre può rappresentare l'opzione migliore per portare un database in uno stato coerente dal punto di vista fisico.However, it may not always be the best option for bringing a database to a physically consistent state. Se ha esito positivo, l'opzione REPAIR_ALLOW_DATA_LOSS può comportare una perdita di dati.If successful, the REPAIR_ALLOW_DATA_LOSS option may result in some data loss. Infatti, può comportare una perdita maggiore di dati rispetto al ripristino del database dall'ultimo backup valido.In fact, it may result in more data lost than if a user were to restore the database from the last known good backup. MicrosoftMicrosoft consiglia sempre di eseguire il ripristino dall'ultimo backup valido come metodo principale per il recupero da errori segnalati da DBCC CHECKDB. always recommends a user restore from the last known good backup as the primary method to recover from errors reported by DBCC CHECKDB. L'opzione REPAIR_ALLOW_DATA_LOSS non è un'alternativa al ripristino da un backup valido.The REPAIR_ALLOW_DATA_LOSS option is not an alternative for restoring from a known good backup. È un'opzione di emergenza che è consigliabile usare solo se non è possibile eseguire il ripristino da un backup.It is an emergency “last resort” option recommended for use only if restoring from a backup is not possible.

Dopo la ricompilazione del log non ci sarà alcuna garanzia ACID completa.After rebuilding the log, there is no full ACID guarantee.

Dopo la ricompilazione del log DBCC CHECKDB verrà eseguito automaticamente segnalando e correggendo i problemi di coerenza fisica.After rebuilding the log, DBCC CHECKDB will be automatically performed and will both report and correct physical consistency issues.

I vincoli applicati alla coerenza dei dati logici e alla logica di business devono essere convalidati manualmente.Logical data consistency and business logic enforced constraints must be validated manually.

Le dimensioni del log delle transazioni rimarranno quelle predefinite e dovranno essere modificate manualmente impostando le dimensioni recenti.The transaction log size will be left to its default size and must be manually adjusted back to its recent size.

Se il comando DBCC CHECKDB viene eseguito correttamente, il database è in uno stato consistente dal punto di vista fisico e lo stato del database viene impostato su ONLINE.If the DBCC CHECKDB command succeeds, the database is in a physically consistent state and the database status is set to ONLINE. È tuttavia possibile che il database contenga una o più inconsistenze delle transazioni.However, the database may contain one or more transactional inconsistencies. È consigliabile eseguire DBCC CHECKCONSTRAINTS per identificare eventuali difetti della logica di business ed eseguire immediatamente il backup del database.We recommend that you run DBCC CHECKCONSTRAINTS to identify any business logic flaws and immediately back up the database. Se il comando DBCC CHECKDB non riesce, non è possibile correggere il database.If the DBCC CHECKDB command fails, the database cannot be repaired.

Esecuzione di DBCC CHECKDB con REPAIR_ALLOW_DATA_LOSS nei database replicatiRunning DBCC CHECKDB with REPAIR_ALLOW_DATA_LOSS in Replicated Databases

L'esecuzione del comando DBCC CHECKDB con l'opzione REPAIR_ALLOW_DATA_LOSS può influire sui database utente (database di pubblicazione e di sottoscrizione) e sul database di distribuzione utilizzato dalla replica.Running the DBCC CHECKDB command with the REPAIR_ALLOW_DATA_LOSS option can affect user databases (publication and subscription databases) and the distribution database used by replication. Nei database di pubblicazione e di sottoscrizione sono incluse le tabelle pubblicate e le tabelle di metadati della replica.Publication and subscription databases include published tables and replication metadata tables. Per questi database è necessario tenere in considerazione i possibili problemi seguenti:Be aware of the following potential issues in these databases:

  • Tabelle pubblicate.Published tables. Le azioni eseguite dal processo CHECKDB per correggere i dati utente danneggiati potrebbero non essere replicate:Actions performed by the CHECKDB process to repair corrupt user data might not be replicated:
  • La replica di tipo merge utilizza i trigger per tenere traccia delle modifiche apportate alle tabelle pubblicate.Merge replication uses triggers to track changes to published tables. Se il processo CHECKDB inserisce, aggiorna o elimina righe, i trigger non vengono attivati e, di conseguenza, le modifiche non vengono replicate.If rows are inserted, updated, or deleted by the CHECKDB process, triggers do not fire; therefore, the change is not replicated.
  • La replica transazionale utilizza il log delle transazioni per tenere traccia delle modifiche apportate alle tabelle pubblicate.Transactional replication uses the transaction log to track changes to published tables. L'agente di lettura log sposta quindi tali modifiche nel database di distribuzione.The Log Reader Agent then moves these changes to the distribution database. Nonostante siano registrate, alcune correzioni DBCC non possono essere replicate dall'agente di lettura log.Some DBCC repairs, although logged, cannot be replicated by the Log Reader Agent. Se ad esempio una pagina di dati viene deallocata dal processo CHECKDB, l'agente di lettura log non associa questa condizione a un'istruzione DELETE. Di conseguenza, la modifica non viene replicata.For example, if a data page is deallocated by the CHECKDB process, the Log Reader Agent does not translate this to a DELETE statement; therefore, the change is not replicated.
  • Tabelle di metadati della replica.Replication metadata tables. Le azioni eseguite dal processo CHECKDB per correggere le tabelle di metadati della replica danneggiate richiedono l'eliminazione e la riconfigurazione della replica.Actions performed by the CHECKDB process to repair corrupt replication metadata tables require removing and reconfiguring replication.

Se è necessario eseguire il comando DBCC CHECKDB con l'opzione REPAIR_ALLOW_DATA_LOSS su un database utente o di distribuzione:If you have to run the DBCC CHECKDB command with the REPAIR_ALLOW_DATA_LOSS option on a user database or distribution database:

  1. Mettere in stato di inattività il sistema: arrestare l'attività sul database e su qualsiasi altro database incluso nella topologia di replica, quindi provare a sincronizzare tutti i nodi.Quiesce the system: Stop activity on the database and at all other databases in the replication topology, and then try to synchronize all nodes. Per altre informazioni, vedere Come mettere una topologia di replica in stato di inattività (programmazione Transact-SQL della replica).For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming).
  2. Eseguire DBCC CHECKDB.Execute DBCC CHECKDB.
  3. Se il report di DBCC CHECKDB include correzioni relative a tabelle presenti nel database di distribuzione o a tabelle di metadati della replica di un database utente, eliminare e riconfigurare la replica.If the DBCC CHECKDB report includes repairs for any tables in the distribution database or any replication metadata tables in a user database, remove and reconfigure replication. Per altre informazioni, vedere Disabilitare la pubblicazione e la distribuzione.For more information, see Disable Publishing and Distribution.
  4. Se il report di DBCC CHECKDB include correzioni relative a tabelle replicate, eseguire la convalida dei dati per determinare la presenza di eventuali differenze tra i dati dei database di pubblicazione e di sottoscrizione.If the DBCC CHECKDB report includes repairs for any replicated tables, perform data validation to determine whether there are differences between the data in the publication and subscription databases.

Set di risultatiResult Sets

DBCC CHECKDB restituisce il set di risultati seguente.DBCC CHECKDB returns the following result set. I valori possono variare, tranne quando vengono specificate le opzioni ESTIMATEONLY, PHYSICAL_ONLY o NO_INFOMSGS:The values might vary except when the ESTIMATEONLY, PHYSICAL_ONLY, or NO_INFOMSGS options are specified:

 DBCC results for 'model'.    

 Service Broker Msg 9675, Level 10, State 1: Message Types analyzed: 13.    

 Service Broker Msg 9676, Level 10, State 1: Service Contracts analyzed: 5.    

 Service Broker Msg 9667, Level 10, State 1: Services analyzed: 3.    

 Service Broker Msg 9668, Level 10, State 1: Service Queues analyzed: 3.    

 Service Broker Msg 9669, Level 10, State 1: Conversation Endpoints analyzed: 0.    

 Service Broker Msg 9674, Level 10, State 1: Conversation Groups analyzed: 0.    

 Service Broker Msg 9670, Level 10, State 1: Remote Service Bindings analyzed: 0.    

 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 0 rows in 0 pages for object "sys.sysasymkeys".    

 DBCC results for 'sys.syssqlguides'.    

 There are 0 rows in 0 pages for object "sys.syssqlguides".    

 DBCC results for 'sys.queue_messages_1977058079'.    

 There are 0 rows in 0 pages for object "sys.queue_messages_1977058079".    

 DBCC results for 'sys.queue_messages_2009058193'.    

 There are 0 rows in 0 pages for object "sys.queue_messages_2009058193".    

 DBCC results for 'sys.queue_messages_2041058307'.    

 There are 0 rows in 0 pages for object "sys.queue_messages_2041058307".    

 CHECKDB found 0 allocation errors and 0 consistency errors in database 'model'.    

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

DBCC CHECKDB restituisce il set di risultati (messaggio) seguente quando viene specificato NO_INFOMSGS:DBCC CHECKDB returns the following result set (message) when NO_INFOMSGS is specified:

 The command(s) completed successfully.

DBCC CHECKDB restituisce il set di risultati seguente quando viene specificato PHYSICAL_ONLY:DBCC CHECKDB returns the following result set when PHYSICAL_ONLY is specified:

 DBCC results for 'model'.    

 CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'.  

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

DBCC CHECKDB restituisce il set di risultati seguente quando viene specificato ESTIMATEONLY.DBCC CHECKDB returns the following result set when ESTIMATEONLY is specified.

 Estimated TEMPDB space needed for CHECKALLOC (KB)    

 -------------------------------------------------  

 13   

 (1 row(s) affected)   

 Estimated TEMPDB space needed for CHECKTABLES (KB)    

 --------------------------------------------------    

 57 

 (1 row(s) affected)  

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

PermissionsPermissions

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner.Requires membership in the sysadmin fixed server role or the db_owner fixed database role.

EsempiExamples

A.A. Controllo del database corrente e di un altro databaseChecking both the current and another database

Nell'esempio seguente viene eseguito DBCC CHECKDB per il database corrente e per il database AdventureWorks2012AdventureWorks2012.The following example executes DBCC CHECKDB for the current database and for the AdventureWorks2012AdventureWorks2012 database.

-- Check the current database.    
DBCC CHECKDB;    
GO    
-- Check the AdventureWorks2012 database without nonclustered indexes.    
DBCC CHECKDB (AdventureWorks2012, NOINDEX);    
GO    

B.B. Controllo del database corrente, con la disattivazione dei messaggi informativiChecking the current database, suppressing informational messages

Nell'esempio seguente viene verificato il database corrente e vengono soppressi tutti i messaggi informativi.The following example checks the current database and suppresses all informational messages.

DBCC CHECKDB WITH NO_INFOMSGS;    
GO    

Vedere ancheSee Also

DBCC (Transact-SQL)DBCC (Transact-SQL)
Visualizzare le dimensioni del file sparse di uno snapshot del database (Transact-SQL)View the Size of the Sparse File of a Database Snapshot (Transact-SQL)
sp_helpdb (Transact-SQL)sp_helpdb (Transact-SQL)
Tabelle di sistema (Transact-SQL)System Tables (Transact-SQL)