Condividi tramite


DBCC CHECKALLOC (Transact-SQL)

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

Controlla la consistenza delle strutture di allocazione dello spazio su disco per il database specificato.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

DBCC CHECKALLOC
[
    ( database_name | database_id | 0
      [ , NOINDEX
      | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
    )
    [ WITH
        {
          [ ALL_ERRORMSGS ]
          [ , NO_INFOMSGS ]
          [ , TABLOCK ]
          [ , ESTIMATEONLY ]
        }
    ]
]

Argomenti

database_name | database_id | 0

Nome o ID del database per cui si vuole controllare l'allocazione e l'uso delle pagine.

Se questo argomento viene omesso oppure se viene specificato il valore 0, viene utilizzato il database corrente.

I nomi di database devono essere conformi alle regole per gli identificatori.

NOINDEX

Specifica che gli indici non cluster per le tabelle utente non devono essere controllati.

NOINDEX viene mantenuto solo per la compatibilità con le versioni precedenti e non influisce su DBCC CHECKALLOC.

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

Specifica che DBCC CHECKALLOC ripristina gli errori trovati. database_name deve essere in modalità utente singolo.

  • REPAIR_ALLOW_DATA_LOSS

    Tenta di correggere tutti gli errori rilevati. Le operazioni di correzione possono comportare la perdita di dati. REPAIR_ALLOW_DATA_LOSS è l'unica opzione che consente di correggere gli errori di allocazione.

  • REPAIR_FAST

    La sintassi è stata mantenuta solo a scopo di compatibilità con le versioni precedenti. Non vengono eseguite correzioni.

  • REPAIR_REBUILD

    Non applicabile.

Importante

Utilizzare le opzioni REPAIR solo come ultima risorsa. Per correggere gli errori, è consigliabile eseguire un ripristino da un backup. Le operazioni di ripristino non considerano alcun vincolo presente in o tra tabelle. Se la tabella specificata è interessata da uno o più vincoli, è consigliabile eseguire DBCC CHECKCONSTRAINTS dopo l'operazione di correzione. Se è necessario usare REPAIR, eseguire DBCC CHECKDB senza opzioni di correzione per individuare il livello di correzione da applicare. Se si usa il REPAIR_ALLOW_DATA_LOSS livello, è consigliabile eseguire il backup del database prima di eseguire DBCC CHECKDB con questa opzione.

WITH

Consente di specificare opzioni.

  • ALL_ERRORMSGS

    Visualizza tutti i messaggi di errore. 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 e il report relativo allo spazio utilizzato.

  • TABLOCK

    Richiede l'acquisizione di un blocco esclusivo del database per l'esecuzione del comando DBCC.

  • ESTIMATEONLY

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

Osservazioni:

DBCC CHECKALLOC controlla l'allocazione di tutte le pagine nel database, indipendentemente dal tipo di pagina o tipo di oggetto a cui appartengono. Questa istruzione convalida inoltre le varie strutture interne utilizzate per tenere traccia delle pagine e delle relative relazioni.

Se NO_INFOMSGS non viene specificato, DBCC CHECKALLOC raccoglie informazioni sull'utilizzo dello spazio per tutti gli oggetti nel database. Queste informazioni vengono aggiunte a tutti gli errori rilevati.

Nota

La DBCC CHECKALLOC funzionalità è inclusa in DBCC CHECKDB e DBCC CHECKFILEGROUP. Ciò significa che non è necessario eseguire DBCC CHECKALLOC separatamente da queste istruzioni. DBCC CHECKALLOC non controlla i dati FILESTREAM. Tramite FILESTREAM vengono archiviati oggetti binari di grandi dimensioni (BLOB) nel file system.

Snapshot interno del database

DBCC CHECKALLOC usa uno snapshot interno del database per garantire la coerenza transazionale necessaria per eseguire questi controlli. Se non è possibile creare uno snapshot o TABLOCK viene specificato, DBCC CHECKALLOC tenta di acquisire un blocco esclusivo (X) nel database per ottenere la coerenza necessaria.

Nota

tempdb L'esecuzione DBCC CHECKALLOC su non esegue alcun controllo. 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. Arrestare e avviare il motore di database per risolvere eventuali tempdb problemi di allocazione. Questa azione elimina e ricrea il tempdb database.

Informazioni sui messaggi di errore DBCC

Al termine del DBCC CHECKALLOC 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.

Stato 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 CHECKALLOC 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 CHECKALLOC 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 DBCC CHECKALLOC vengono segnalati errori, è consigliabile ripristinare il database dal backup del database anziché eseguire un ripristino. Se non esiste un backup, l'esecuzione di un ripristino può correggere gli errori segnalati; Tuttavia, la correzione degli errori potrebbe richiedere l'eliminazione di alcune pagine e quindi dei dati.

Un'operazione di correzione può essere eseguita durante una transazione utente in modo da consentire il rollback delle modifiche. Se viene eseguito il rollback delle modifiche, il database conterrà comunque errori e deve essere ripristinato da un backup. Al termine delle correzioni, eseguire il backup del database.

Set di risultati

Le tabelle seguenti descrivono le informazioni restituite DBCC CHECKALLOC .

Articolo Descrizione
FirstIAM Solo per uso interno.
Root Solo per uso interno.
Dpages Conteggio delle pagine di dati.
Pagine usate Pagine allocate.
Extent dedicati Extent allocati all'oggetto.

Se si utilizzano pagine di allocazione miste, è possibile che alcune pagine allocate siano prive di extent.

DBCC CHECKALLOC segnala anche un riepilogo dell'allocazione per ogni indice e partizione in ogni file. in cui viene descritta la distribuzione dei dati.

Articolo Descrizione
Reserved pages Pagine allocate all'indice e pagine non utilizzate negli extent allocati.
Used pages Pagine allocate e utilizzate dall'indice.
ID partizione Solo per uso interno.
Alloc unit ID Solo per uso interno.
Dati In-row Pagine contenenti dati di indice o di heap.
Dati LOB Pagine contenenti dati varchar(max), nvarchar(max), varbinary(max), text, ntext, xml e image.
Dati Row-overflow Pagine contenenti dati di colonne a lunghezza variabile spostati all'esterno di righe.

DBCC CHECKALLOC restituisce il set di risultati seguente (i valori possono variare), tranne quando ESTIMATEONLY o NO_INFOMSGS è specificato.

DBCC results for 'master'.
***************************************************************
Table sysobjects                Object ID 1.
Index ID 1         FirstIAM (1:11)   Root (1:12)    Dpages 22.
    Index ID 1. 24 pages used in 5 dedicated extents.
Index ID 2         FirstIAM (1:1368)   Root (1:1362)    Dpages 10.
    Index ID 2. 12 pages used in 2 dedicated extents.
Index ID 3         FirstIAM (1:1392)   Root (1:1408)    Dpages 4.
    Index ID 3. 6 pages used in 0 dedicated extents.
Total number of extents is 7.
***************************************************************
'...'
***************************************************************
Table spt_server_info                Object ID 1938105945.
Index ID 1         FirstIAM (1:520)   Root (1:508)    Dpages 1.
    Index ID 1. 3 pages used in 0 dedicated extents.
Total number of extents is 0.
***************************************************************
Processed 52 entries in sysindexes for database ID 1.
File 1. Number of extents = 210, used pages = 1126, reserved pages = 1280.
           File 1 (number of mixed extents = 73, mixed pages = 184).
    Object ID 1, Index ID 0, data extents 5, pages 24, mixed extent pages 9.
'...'
    Object ID 1938105945, Index ID 0, data extents 0, pages 3, mixed extent pages 3.
Total number of extents = 210, used pages = 1126, reserved pages = 1280 in this database.
       (number of mixed extents = 73, mixed pages = 184) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC results for 'master'.
***************************************************************
Table sys.sysrowsetcolumns                Object ID 4.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). FirstIAM (1:98). Root (1:94). Dpages 7.
Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). 9 pages used in 1 dedicated extents.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). FirstIAM (0:0). Root (0:0). Dpages 0.
Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). 0 pages used in 0 dedicated extents.
Total number of extents is 1.
...
***************************************************************
Processed 201 entries in system catalog for database ID 1.
File 1. Number of extents = 44, used pages = 300, reserved pages = 345.
           File 1 (number of mixed extents = 29, mixed pages = 225).
    Object ID 4, index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
    Object ID 5, index ID 1, partition ID 327680, alloc unit ID 327680 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 7, index ID 1, partition ID 458752, alloc unit ID 458752 (type In-row data), data extents 0, pages 5, mixed extent pages 5.
    Object ID 8, index ID 0, partition ID 524288, alloc unit ID 524288 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 13, index ID 1, partition ID 851968, alloc unit ID 851968 (type In-row data), data extents 1, pages 9, mixed extent pages 8.
    Object ID 15, index ID 1, partition ID 983040, alloc unit ID 983040 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
    Object ID 26, index ID 1, partition ID 281474978414592, alloc unit ID 1703937 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
    Object ID 27, index ID 1, partition ID 281474978480128, alloc unit ID 1769473 (type In-row data), data extents 0, pages 3, mixed extent pages 3.
    Object ID 27, index ID 2, partition ID 562949955190784, alloc unit ID 1769474 (type In-row data), index extents 0, pages 3, mixed extent pages 3.
...
    Object ID 1179151246, index ID 1, partition ID 72057594038845440, alloc unit ID 13435136 (type In-row data), data extents 2, pages 18, mixed extent pages 8.
    Object ID 1179151246, index ID 2, partition ID 72057594038910976, alloc unit ID 13566208 (type In-row data), index extents 1, pages 16, mixed extent pages 8.
    Object ID 1911677858, index ID 0, partition ID 72057594039631872, alloc unit ID 15073536 (type In-row data), data extents 0, pages 2, mixed extent pages 2.
Total number of extents = 41, used pages = 289, reserved pages = 323 in this database.
       (number of mixed extents = 27, mixed pages = 211) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Quando ESTIMATEONLY viene specificato, DBCC CHECKALLOC restituisce il set di risultati seguente.

Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
  
(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

Nell'esempio seguente viene eseguito DBCC CHECKALLOC per il database corrente e per il database AdventureWorks2022.

-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO

Vedi anche