DBCC CHECKDB nebyl v poslední době spuštěn

Když SQL Server zapisuje data na disky, předpokládá, že je vše v pořádku, dokud není třeba data znovu přečíst.

Naneštěstí v případě poškození úložiště není úložiště tak laskavé, aby SQL Server upozornilo. A někdy je dokonce známo, že se SQL Server poškodí sám.

Potřebujeme pravidelně kontrolovat, zda data na disku stále dávají smysl, a k tomu slouží DBCC CHECKDB. Kontroluje jak chyby alokace, tak chyby konzistence. Pokud se navíc vyskytnou nějaké problémy, vrátí se chybová hlášení s informacemi o tom, kde se chyby vyskytují, o závažnosti chyby a také o navrhované možnosti opravy.

Je nezbytné pravidelně spouštět CHECKDB, abychom našli chyby, pokud existují, protože pokud dojde k poškození, musíme ho opravit dříve, než zmizí naše poslední dobré zálohy.

Pro nalezení problému zkontrolujeme každou databázi, zda DBCC CHECKDB v posledních dvou týdnech úspěšně dokončil kontrolu.

Nevěříte tomu?

„Ale já přece spouštím CHECKDB pořád,“ řeknete si možná – no, pojďme to zjistit:

Transact-.SQL

1
DBCC DBINFO(‚StackOverflow‘) WITH TABLERESULTS

To je vše. Ale výstup je noční můra. Je to asi 80 řádků věcí, které vás pravděpodobně nikdy nebudou zajímat. Kolem 50. řádku je to, co hledáte.

Ahoj, jsem nesmysl.

A tohle pravděpodobně uvidíte! Datum 1900-01-01 atd. To znamená nikdy. Pokud na databázi spustíte DBCC CHECKDB, tak asi takto:

Transact-SQL

1
DBCC CHECKDB(‚StackOverflow‘) WITH NO_INFOMSGS, ALL_ERRORMSGS

A poté znovu spusťte příkaz DBCC DBINFO, naše datum je nyní aktualizováno na aktuální:

PODÍVEJTE SE, JAK SE BAVÍME

Pokud se datum neaktualizuje, znamená to jednu ze dvou věcí: SQL Server nemůže do databáze zapisovat (jako by byla jen pro čtení), nebo nachází chyby (hoowee, to není dobré.)

K nápravě problému

Rozhodněte se, zda chcete použít vestavěné plány údržby, nebo bezplatný nástroj, například bezplatné skripty CHECKDB od Oly Hallengrena. Několik úvah:

  • Plány údržby mají grafické rozhraní pro případ, že neznáte jazyk T-SQL.
  • Skripty zdarma od Oly Hallengrena se starají o jemně vyladěné možnosti, například o automatické spouštění kontrol data_purity (což je dobrá věc).

Jak nastavit pravidelnou údržbu pro kontrolu poškození

Možnost 1: Použijte plán údržby pro spuštění DBCC CHECKDB

Pokud používáte plány údržby, můžete plány údržby upravit v aplikaci SQL Server Management Studio v části Správa, Plány údržby. Váš server může mít více plánů údržby, které spouštějí CHECKDB pro různé typy databází, například jeden pro systémové databáze a druhý pro uživatelské databáze.

V SSMS rozbalte uzel Správa, klikněte pravým tlačítkem na Plány údržby a vyberte Nový plán.

Z okna Toolbox, které se někdy schovává vlevo, přetáhněte úlohu Check Database Integrity Task na kartu Maintenance Plan.

Když dvakrát kliknete na pole Check Database Integrity Task na kartě Maintenance Plan, budete moci vybrat, které databáze chcete během procesu nechat zkontrolovat.

Odtud už zbývá jen naplánovat ji, což je stejné jako plánování úlohy agenta.

Po uložení a zavření plánu údržby nezapomeňte najít související úlohu v agentovi SQL Serveru a nastavit vlastnosti Oznámení, aby byl operátor informován o jejím selhání.

Možnost 2: Nastavení úloh agenta SQL na spouštění DBCC CHECKDB pomocí bezplatných skriptů Oly Hallengrena

Pokud zavádíte kontrolu integrity poprvé, zvažte použití bezplatných skriptů údržby Oly Hallengrena. Nejsou tak jednoduché jako plány údržby, ale jsou mnohem flexibilnější. Obsahují také možnost rozdělit operace DBCC na menší části pro velké databáze. U velmi rozsáhlých databází může CHECKDB zabrat značné množství času a prostředků – možnost WITH PHYSICAL_ONLY je rychlejší, ale vynechává logické kontroly.

Jakmile jsou úlohy agenta zavedeny, můžete je naplánovat tak, aby se spouštěly stejně jednoduše jako plány údržby, nebo je můžete doladit pomocí dalších možností zdokumentovaných zde.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.