602SQL-Úplná dokumentace Index  

Kontrola konzistence databáze

SQL server může provést kontrolu vnitřní konzistence databáze, nad níž pracuje. Přitom odhaluje chyby ve struktuře databázového souboru. Kontrola konzistence databáze nezahrnuje kontrolu integritních omezení definovaných pro databázové tabulky.

Provádění kontroly konzistence nemůže probíhat souběžně se zpracováním jiných požadavků. Řešení takových konfliktů je popsáno dále.

Druhy chyb v konzistenci

Chyby konzistence databáze lze rozdělit do dvou skupin:

První skupina chyb je neškodná, pouze snižuje efektivitu využití místa na disku. Tyto chyby mohou vzniknout vždy, když SQL server není korektně ukončen.

Druhá skupina chyb znamená, že určitá část dat uložených v databázi není přístupná nebo je přepsána. Takové chyby mohou vzniknout, pokud počítač, na němž běží SQL server, havaruje během uzavírání transakce, a zároveň není zapnuto jištění transakcí nebo je zapnuto odložené zapisování změn na disk.

Pokud se při kontrole konzistence nalezne poškození dat v databázi, informace o zasažených tabulkách se vypíšou do základního logu serveru.

Explicitní vyvolání kontroly konzistence

Kontrola konzistence se provádí buď interaktivně z Řídicího panelu, akcí Nástroje / Konzistence databáze nebo ji může také vyvolat klient přihlášený jako provozní správce pomocí funkce (cd_)Database_integrity.

Kontrola konzistence se nespustí a funkce vrátí chybu, pokud ve stejném okamžiku server zpracovává požadavek jiného klienta nebo pokud běží samostatné vlákno.

Pokud během explicitně vyvolané kontroly konzistence přijde nový požadavek od některého klienta, vrátí se s chybou. Pokud se rozběhne samostatné vlákno, bude pozdrženo do dokončení kontroly konzistence.

Automatické provádění periodických kontrol konzistence

SQL server může provádět kontroly konzistence databáze automaticky v zadaných časových intervalech. Pokud vlastnost IntegrCheckInterv má nenulovou hodnotu, pak udává počet sekund mezi kontrolami integrity. Je-li vlastnost nulová nebo není-li definovaná, pak se automatické kontroly neprovádějí.

Interval pro zahájení automatické kontroly se počítá od startu serveru nebo od poslední dokončené kontroly konzistence, přičemž se berou v úvahu kontroly spuštěné automaticky i explicitně.

Pokud uplyne interval pro zahájení automatické kontroly a server právě zpracovává požadavek klienta nebo běží samostatné vlákno, kontrola se pozdrží.

Pokud během provádění automatické kontroly přijde požadavek klienta nebo se rozběhne samostatné vlákno, je kontrola zrušena a později se spustí znovu od začátku. Pokud se během provádění kontroly má rozběhnout replikační akce, pozdrží se do dokončení kontroly.

Pokud automatická kontrola odhalí v databázi chybu, která znamená poškození dat, zapíše zprávu do základního logu serveru.