DBCC CHECKALLOC (Transact-SQL)
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Kontroluje konzistenci struktur přidělování místa na disku pro zadanou databázi.
Syntax
DBCC CHECKALLOC
[
( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
)
[ WITH
{
[ ALL_ERRORMSGS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
}
]
]
Argumenty
database_name | database_id | 0
Název nebo ID databáze, pro kterou chcete zkontrolovat přidělení a využití stránky.
Pokud není zadána nebo pokud je zadána hodnota 0, použije se aktuální databáze.
Názvy databází musí dodržovat pravidla pro identifikátory .
NOINDEX
Určuje, že neclusterované indexy pro uživatelské tabulky by se neměly kontrolovat.
NOINDEX
se udržuje pouze kvůli zpětné kompatibilitě a nemá vliv na DBCC CHECKALLOC
.
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
Určuje, že DBCC CHECKALLOC
opravit nalezené chyby.
database_name musí být v režimu jednoho uživatele.
REPAIR_ALLOW_DATA_LOSS
Pokusí se opravit všechny nalezené chyby. Tyto opravy můžou způsobit ztrátu dat.
REPAIR_ALLOW_DATA_LOSS
je jedinou možností, která umožňuje opravit chyby přidělení.REPAIR_FAST
Syntaxe se udržuje pouze kvůli zpětné kompatibilitě. Neprovádí se žádné akce opravy.
REPAIR_REBUILD
Nelze použít.
Důležitý
Možnosti OPRAVIT použijte pouze jako poslední možnost. Pokud chcete opravit chyby, doporučujeme provést obnovení ze zálohy. Operace opravy nebere v úvahu žádná omezení, která mohou existovat u tabulek nebo mezi tabulkami. Pokud je zadaná tabulka součástí jednoho nebo více omezení, doporučujeme spustit DBCC CHECKCONSTRAINTS
po operaci opravy. Pokud je nutné použít opravu, spusťte DBCC CHECKDB
bez možnosti opravy najít úroveň opravy, kterou chcete použít. Pokud používáte úroveň REPAIR_ALLOW_DATA_LOSS
, doporučujeme před spuštěním DBCC CHECKDB
pomocí této možnosti zálohovat databázi.
S
Povolí zadání možností.
ALL_ERRORMSGS
Zobrazí všechny chybové zprávy. Ve výchozím nastavení se zobrazí všechny chybové zprávy. Zadání nebo vynechání této možnosti nemá žádný vliv.
NO_INFOMSGS
Potlačí všechny informační zprávy a sestavu využitého místa.
TABLOCK
Způsobí, že příkaz DBCC získá výhradní zámek databáze.
ESTIMATEONLY
Zobrazí odhadovanou velikost
tempdb
prostoru potřebného ke spuštěníDBCC CHECKALLOC
při zadání všech ostatních možností.
Poznámky
DBCC CHECKALLOC
kontroluje přidělení všech stránek v databázi bez ohledu na typ stránky nebo typu objektu, do kterého patří. Ověřuje také různé interní struktury, které se používají k sledování těchto stránek a vztahů mezi nimi.
Pokud není zadaný NO_INFOMSGS
, DBCC CHECKALLOC
shromažďuje informace o využití místa pro všechny objekty v databázi. Tyto informace se vytisknou společně se všemi nalezenými chybami.
Poznámka
Funkce DBCC CHECKALLOC
je součástí DBCC CHECKDB a DBCC CHECKFILEGROUP. To znamená, že nemusíte spouštět DBCC CHECKALLOC
odděleně od těchto příkazů.
DBCC CHECKALLOC
nekontroluje data FILESTREAM. FILESTREAM ukládá binární velké objekty (BLOBS) do systému souborů.
Snímek interní databáze
DBCC CHECKALLOC
používá interní snímek databáze k zajištění transakční konzistence, kterou potřebuje k provedení těchto kontrol. Pokud nejde vytvořit snímek nebo je zadán TABLOCK
, DBCC CHECKALLOC
se pokusí získat výhradní zámek (X
) databáze, aby získal požadovanou konzistenci.
Poznámka
Spuštění DBCC CHECKALLOC
proti tempdb
neprovádí žádné kontroly. Důvodem je to, že z důvodů výkonu nejsou snímky databáze na tempdb
k dispozici . To znamená, že požadovanou transakční konzistenci nelze získat. Zastavte a spusťte databázový stroj a vyřešte případné problémy s přidělením tempdb
. Tato akce zahodí a znovu vytvoří databázi tempdb
.
Vysvětlení chybových zpráv DBCC
Po dokončení příkazu DBCC CHECKALLOC
se do protokolu chyb SQL Serveru zapíše zpráva. Pokud se příkaz DBCC úspěšně spustí, zpráva značí úspěšné dokončení a dobu, po kterou příkaz běžel. Pokud se příkaz DBCC zastaví před dokončením kontroly kvůli chybě, zpráva indikuje, že příkaz byl ukončen, hodnota stavu a doba spuštění příkazu. Následující tabulka uvádí a popisuje stavové hodnoty, které lze zahrnout do zprávy.
Stát | Popis |
---|---|
0 | Byla vyvolána chyba 8930. Označuje poškození metadat, která způsobila ukončení příkazu DBCC. |
1 | Byla vyvolána chyba 8967. Došlo k vnitřní chybě DBCC. |
2 | Při opravě databáze v nouzovém režimu došlo k chybě. |
3 | Označuje poškození metadat, která způsobila ukončení příkazu DBCC. |
4 | Bylo zjištěno porušení kontrolního výrazu nebo přístupu. |
5 | Došlo k neznámé chybě, která ukončila příkaz DBCC. |
Zasílání zpráv o chybách
V adresáři SQL Serveru LOG
se vytvoří soubor s mini výpisem paměti (SQLDUMP<nnnn>.txt
), kdykoli DBCC CHECKALLOC
zjistí chybu poškození. Pokud jsou pro instanci SQL Serveru povolené funkce shromažďování dat o využití funkcí a funkce zasílání zpráv o chybách, soubor se automaticky přepošla do Microsoftu. Shromážděná data se používají ke zlepšení funkčnosti SQL Serveru.
Soubor s výpisem paměti obsahuje výsledky příkazu DBCC CHECKALLOC
a další diagnostický výstup. Soubor omezil volitelné seznamy řízení přístupu (DACL). Přístup je omezen na účet služby SQL Server a členy role správce systému. Ve výchozím nastavení obsahuje role správce systému všechny členy skupiny Windows BUILTIN\Administrators a skupinu místního správce. Pokud proces shromažďování dat selže, příkaz DBCC se nezdaří.
Řešení chyb
Pokud DBCC CHECKALLOC
hlásí nějaké chyby, doporučujeme obnovit databázi ze zálohy databáze místo spuštění opravy. Pokud záloha neexistuje, může spuštění opravy opravit nahlášené chyby; oprava chyb však může vyžadovat odstranění některých stránek, a proto data.
Opravu lze provést v transakci uživatele. To umožňuje vrácení změn zpět. Pokud se změny vrátí zpět, databáze bude dál obsahovat chyby a musí se obnovit ze zálohy. Po dokončení oprav zálohujte databázi.
Sady výsledků
Následující tabulky popisují informace, které DBCC CHECKALLOC
vrací.
Položka | Popis |
---|---|
FirstIAM | Pouze interní použití. |
kořenových | Pouze interní použití. |
Dpages | Počet datových stránek |
Stránky použité | Přidělené stránky. |
vyhrazené rozsahy | Rozsahy přidělené objektu. Pokud se použijí smíšené alokační stránky, můžou být stránky přidělené bez rozsahů. |
DBCC CHECKALLOC
také hlásí souhrn přidělení pro každý index a oddíl v každém souboru. Tento souhrn popisuje distribuci dat.
Položka | Popis |
---|---|
Rezervované stránky | Stránky přidělené indexu a nepoužité stránky v přidělených rozsahech. |
Použité stránky | Stránky přidělené a používané indexem |
ID oddílu | Pouze interní použití. |
ID jednotky Alloc | Pouze interní použití. |
Vložená data | Stránky obsahují data indexu nebo haldy. |
Obchodní data | Stránky obsahují varchar(max), nvarchar(max), varbinary(max), text, ntext, xmla obrázek data. |
Data přetečení řádků | Stránky obsahují data sloupců s proměnnou délkou, která byla odsunuta mimo řádek. |
DBCC CHECKALLOC
vrátí následující sadu výsledků (hodnoty se mohou lišit), s výjimkou případů, kdy je zadán ESTIMATEONLY
nebo NO_INFOMSGS
.
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.
Při zadání ESTIMATEONLY
vrátí DBCC CHECKALLOC
následující sadu výsledků.
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Dovolení
Vyžaduje členství v pevné roli serveru správce systému nebo db_owner pevné databázové roli.
Příklady
Následující příklad spustí DBCC CHECKALLOC
pro aktuální databázi a pro databázi AdventureWorks2022
.
-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO