Sdílet prostřednictvím


DBCC CHECKALLOC (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Kontroluje konzistenci struktur přidělování místa na disku pro zadanou databázi.

Transact-SQL konvence syntaxe

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 tempdbk 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

Viz také

  • DBCC (Transact-SQL)