sql >> Databáze >  >> RDS >> Database

Přehled funkce DBCC CheckDB

Úvod

Pravidelná údržba databáze je důležitou součástí práce správce databáze, která pomáhá zajistit, aby kriticky důležité systémy běžely normálně. Jedním z nejjednodušších způsobů, jak toho dosáhnout, bude automatizace úloh souvisejících s DBCC CheckDB. Bez ohledu na to, jakou verzi SQL Server používáte, nikdy nebude databáze, která by vyžadovala údržbu. Budete muset naplánovat údržbu tak, aby probíhala pravidelně, abyste si mohli krýt záda zejména v době scénáře skutečné katastrofy.

DBA je vždy viníkem

Kdykoli dojde k problému s databází, všechny oči se upírají na DBA. Ať už byl problém způsoben deštěm nebo tím, že nějaký vývojář napsal ošklivý kód, který měl za následek zpomalení databáze, vždy se očekává, že DBA problém napraví. A dokážete si představit, jaký tlak musíte čelit, pokud jste požádáni o rychlou obnovu databáze pomocí poslední dostupné zálohy, která, jak v průběhu procesu zjistíte, není platná a integrita databáze byla narušena již několik měsíců. před. Zde je rozdíl mezi proaktivním DBA a reaktivním DBA. Ve skutečnosti je vaše strategie obnovy mnohem kritičtější než strategie zálohování. K jakému účelu mohou sloužit denní zálohy databáze, pokud nejsou v době obnovy k ničemu?

Proč je údržba důležitá?

Vzhledem k bezprecedentnímu růstu databázových technologií a novým funkcím, které se objevují s každým vydáním, je pro vás jako DBA nezbytně nutné, abyste zůstali před ostatními a zajistili, že dodržujete osvědčené postupy v oboru údržba databáze.

DBCC CheckDB a jak jej můžeme spustit

DBCC CheckDB – tento název dost popisuje funkčnost. Jednoduše řečeno, kontroluje databáze. To je důležité pro zajištění, že databáze funguje podle očekávání. DBCC CheckDB v podstatě kontroluje logickou a fyzickou integritu všech objektů v databázi. To je to, co DBCC CheckDB dělá pod kapotou podle oficiálního Dokumentace společnosti Microsoft:

  • Spustí DBCC CHECKALLOC v databázi – konzistence alokace místa na disku

  • Spustí DBCC CHECKTABLE na každé tabulce a pohledu v databázi – to je integrita všech stránek a struktur, které tvoří tabulku nebo indexovaný pohled.

  • Spustí DBCC CHECKCATALOG v databázi – to zkontroluje konzistenci katalogu v zadané databázi.

  • Ověří obsah každého indexovaného pohledu v databázi.

  • Ověřuje konzistenci na úrovni propojení mezi metadaty tabulky a adresáři/soubory systému souborů při ukládání varbinary (max) dat do systému souborů pomocí FILESTREAM.

  • Ověří data Service Broker v databázi.

Když spustíte příkaz DBCC CheckDB explicitně nebo prostřednictvím úlohy, v podstatě provede vše výše uvedené.

Spuštění DBCC CheckDB přímo v databázi

Příkaz DBCC CheckDB můžete spustit přímo v databázi a zkontrolovat výsledky. Zkontrolujte výstup příkazu, jak je znázorněno na obrázku níže. Výstup zobrazuje podrobnosti o řádcích v tabulkách a počet stránek použitých těmito řádky.

Pokud se podíváte pozorně, uvidíte více podrobností specifických pro databázové objekty. Například v databázi „VLDB“ vidím následující výstup:

„ID objektu 1179151246 (objekt 'Warehouse.ColdRoomTemperatures'):Operace není podporována tabulkami optimalizovanými pro paměť. Tento objekt byl přeskočen a nebude zpracován.“

Jak ukazuje tento výstup, DBCC CheckDB není podporován s tabulkami optimalizovanými pro paměť. Tabulky optimalizované pro paměť byly poprvé představeny v SQL Server 2014 jako funkce pouze pro podniky. V průběhu let se však staly populární a široce rozšířenou funkcí na serveru SQL Server.

Také si všimnete, že kontrola DBCC ověřila data zprostředkovatele služeb v databázi, jak je uvedeno níže.

„Výsledky DBCC pro 'VLDB'. Service Broker Msg 9675, Stav 1:Analyzované typy zpráv:14. Service Broker Msg 9676, Stav 1:Analyzované servisní smlouvy:6. Service Broker Msg 9667, Stav 1:Analyzované služby:3. Service Broker Msg 9668, Stav 1:Analyzované fronty služeb:3. Service Broker Msg 9669, Stav 1:Analyzované koncové body konverzace:0. Service Broker Msg 9674, Stav 1:Analyzované skupiny konverzace:0. Service Broker Msg 9670, State 1:Analyzované vazby vzdálené služby:0. Service Broker Msg 9605, Stav 1:Analyzované priority konverzace:0.“

Po úspěšném dokončení příkazu DBCC CheckDB uvidíte následující výstup:

Co se stane, když jsou po spuštění DBCC CheckDB hlášeny chyby?

Ve výše uvedeném příkladu jste viděli, že DBCC CheckDB byla dokončena bez jakýchkoli chyb. Pokud však takové štěstí nebudete mít, můžete narazit na chyby konzistence – a to bude čas, kdy budete muset udělat nějaká zásadní rozhodnutí. Pokud narazíte na problémy v produkční databázi, je nejlepší informovat vlastníky firmy nebo svého provozního manažera, aby vyložili karty na stůl. Můžete jim buď dát možnost obnovit databázi z poslední dostupné zálohy, nebo můžete experimentovat se spouštěním příkazů DBCC CheckDB s dalšími možnostmi.

Chybové zprávy DBCC mohou vypadat podobně jako následující:

Chyba tabulky:ID objektu 36, index ID 1, ID oddílu, ID přidělovací jednotky (typ In-row data). Klíče na stránce mimo pořadí (1:107), sloty 6 a 9. CHECKDB nalezen 0 chyb alokace a 1 chyba konzistence v tabulce 'sys.syk' (objekt ID 36). CHECKDB nalezena 0 chyb alokace a 1 chyba konzistence v databázi 'VLDB'.repair_rebuild je minimální úroveň opravy pro chyby nalezené DBCC CHECKDB (VLDB). 

V chybové zprávě můžete vidět pečlivě formulovanou chybovou zprávu – „repair_rebuild je minimum úroveň opravy pro chyby nalezené DBCC CHECKDB ” – navrhuje spuštění DBCC CheckDB s volbou repair_rebuild. Stačí se podívat na zvýrazněné slovo – „minimum“. To znamená, že s možností repair_rebuild neexistuje reálná možnost ztráty dat a SQL Server provádí několik rychlých oprav pod kapotou. Chcete-li spustit DBCC CheckDB s volbou repair_rebuild, postupujte podle níže uvedeného příkazu. Ujistěte se, že je databáze umístěna do režimu jednoho uživatele.

Podle dokumentace společnosti Microsoft je možnost REPAIR_REBUILD nejnebezpečnější verzí, protože nemůže dojít ke ztrátě dat. Pokud však REPAIR_REBUILD stále neopraví chyby konzistence, existuje ještě jedna možnost – povolit REPAIR_ALLOW_DATA_LOSS. Při pohledu na název víme, že pokud tuto možnost zapneme, existuje možnost ztráty dat. Z tohoto důvodu nás Microsoft varuje, abychom to používali s extrémní opatrností, protože při spuštění DBCC CheckDB s REPAIR_ALLOW_DATA_LOSS mohou nastat neočekávané následky. Příkaz DBCC CheckDB bude v tomto případě vypadat následovně:

Body, které je třeba zvážit před použitím možnosti Opravit s DBCC CheckDB

  • Jak kritická je daná databáze?

  • Je databáze v produkčním nebo testovacím prostředí?

  • Jak velká je databáze?

  • Máte dobrou strategii obnovy pro případ, že se objeví problémy?

  • Ověřili jste zálohy databáze?

Na základě situace a odpovědí na výše uvedené otázky se pokuste učinit rozhodnutí s ohledem na nejlepší zájmy klienta.

Automatizace úloh DBCC CheckDB na SQL Server pomocí plánů údržby databáze

No, všechny tyto příkazy nemusíte na svých serverech spouštět ručně. Proto máme připravené plány údržby. Nezapomeňte naplánovat pravidelný cyklus údržby pro všechny databáze pomocí plánů údržby databáze. Je to poměrně jednoduchý a přímočarý úkol. V části „Úlohy plánu údržby“ vyberte „Úloha Kontrola integrity databáze“.

Tímto přidáte do plánu údržby dílčí úkol pro plánování kontrol integrity vašich databází. Ujistěte se, že jste vybrali požadované databáze podle obrázku.

Ujistěte se, že všechny kontroly databáze spouštíte mimo špičku týdne. Obvykle jsou okna údržby o víkendech, kdy je server méně vytížený ve srovnání s ostatními dny v týdnu. To se však bude lišit server od serveru a závisí na aplikaci. Na kritických databázových systémech se výstrahy obvykle zobrazují vždy, když dojde k chybě DBCC CheckDB nebo kontroly integrity. Tímto způsobem mohou správci databází proaktivně kontrolovat a zajistit, aby byly dokončeny kontroly integrity, aby se později vyhnuli překvapením.

Automatizace úloh DBCC CheckDB na SQL Server pomocí přizpůsobených skriptů nebo jiných oblíbených skriptů

Plány údržby serveru SQL Server není nutné používat neustále k provádění úloh údržby na instanci serveru SQL Server. Existují další dostupné přizpůsobené skripty, které můžete použít. Jedním z oblíbených bezplatných nástrojů údržby je řešení údržby Ola Hallengren. Můžete si nainstalovat celé řešení údržby, které zahrnuje úlohy pro zálohování, optimalizaci atd., nebo si můžete stáhnout pouze příslušné skripty související s kontrolami integrity. V této ukázce se pokusíme nainstalovat skripty specifické pro kontroly integrity databáze.

Klepnutím na možnost DatabaseIntegrityCheck.sql, jak je znázorněno, stáhnete uložené procedury, které kontrolují integritu databáze. Po spuštění těchto uložených procedur v hlavní databázi jsem narazil na tyto varovné zprávy:

„Modul 'DatabaseIntegrityCheck' závisí na chybějícím objektu 'dbo.CommandExecute'. Modul bude stále vytvořen; nemůže však úspěšně běžet, dokud objekt neexistuje.“

Pokud spustíte uloženou proceduru pro provádění kontrol integrity, zobrazí se následující chyba:

Jak uvádí chyba, chybějící kód si můžete stáhnout zde. Jakmile to uděláte, můžete začít zkoušet kontroly integrity databáze.

Různé možnosti můžete upravit pomocí dalších parametrů příkazu DBCC. Více podrobností a jejich příklady naleznete zde.

V této ukázce se však podíváme na několik příkladů, abychom viděli, jak snadné a uživatelsky přívětivé tyto skripty skutečně jsou.

Pro spuštění DBCC CheckDB na všech uživatelských databázích , budete muset provést následující:

EXECUTE dbo.DatabaseIntegrityCheck@Databases ='USER_DATABASES',@CheckCommands ='CHECKDB'

Můžete vidět příkaz, který byl spuštěn, a stav výsledku, který potvrzuje, že DBCC CheckDB byla úspěšně dokončena.

Chcete-li spustit DBCC Check pouze pro systémové databáze spusťte tento příkaz:

EXECUTE dbo.DatabaseIntegrityCheck@Databases ='SYSTEM_DATABASES',@CheckCommands ='CHECKDB'

Na snímku obrazovky můžete vidět, že DBCC CheckDB byla úspěšně dokončena pro systémové databáze.

Pro spuštění DBCC CheckDB pouze pro konkrétní databázi proveďte následující:

EXECUTE dbo.DatabaseIntegrityCheck@Databases ='VLDB', -- vaše konkrétní jméno DB@CheckCommands ='CHECKDB'

Ve výše uvedeném příkladu jste viděli několik způsobů, jak můžeme použít parametry. Existuje však řada dalších filtrů, které si můžete vybrat na základě svých preferencí. Jak již bylo zmíněno, můžete se také podívat na tento odkaz pro další pochopení skriptů Oly Hallengrena. Jen pro zopakování, používám skripty Ola Hallengrena na serverech, které spravuji, a je to vysoce doporučeno a uznáváno v komunitě SQL Server. Uložené procedury můžete naplánovat na základě preferovaných parametrů a spouštět je jako úlohu SQL mimo špičku. Tímto způsobem opravdu nemusíte spouštět žádný z těchto skriptů ručně, takže se můžete soustředit na jiné důležité úkoly.

Závěr

  • Z tohoto článku jste se dozvěděli o DBCC CheckDB a o tom, jak jej lze použít
  • Také jste pochopili, jak důležité je pravidelné spouštění DBCC CheckDB ve všech vašich důležitých databázích
  • Také jste se dozvěděli o tom, jak je důležité mít otestovanou strategii zálohování – doporučuje se obnovit databáze pomocí dobré zálohy namísto řešení případných chyb konzistence pomocí možností opravy DBCC
  • Také jste viděli, jak snadné je konfigurovat a automatizovat skripty pomocí plánů údržby serveru SQL Server nebo přizpůsobených skriptů, např. od Ola Hallengrena
  • Také jste se dozvěděli o rizicích nenaplánování DBCC CheckDB ve vaší podporované infrastruktuře
  • Také jste zjistili, že bez ohledu na to, na jakém serveru se nacházíte nebo jakou infrastrukturu provozujete, nemůže existovat žádná databáze, která by nevyžadovala údržbu.
  • A konečně se ujistěte, že vaše databáze jsou zdravé a v každém případě buďte připraveni na dny OFF, které možná nebudete mít pod vaší kontrolou.

  1. Jak vybrat záznamy z posledních 24 hodin pomocí PostgreSQL

  2. Jak mohu převést bigint (časové razítko UNIX) na datum a čas na serveru SQL?

  3. Jak najdu řetězec v databázi SQL Serveru?

  4. Jak naformátuji číslo s čárkami v T-SQL?