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'esecuzioneDBCC 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