Správny databázový administrátor musí mať 2 veci: funkčný zálohovací systém a aktuálny profesný životopis. Ak totiž zlyhá to prvé, bude potrebovať to druhé. Takto začína vtip o zálohovaní a obnove v knihe o spravovaní SQL Server, ktorú práve čítam. Nič sa tam nepíše o životopise, ale o zálohovacom systéme je tam toho dosť. Poďme sa na to pozrieť.
Zálohovanie databázy je činnosť, ktorá vyžaduje plánovanie. Výsledkom takéhoto plánovania je stratégia zálohovania. Takáto stratégia sa v prípade SQL Servera 2005 skladá z troch prvkov:
- Model obnovy – nastavenie databázy, podľa ktorého sa generuje transakčný log;
- Skripty pre zálohu – T-SQL skripty, ktoré sa pravidelne spúšťajú a vytvárajú zálohy;
- Obnovovacie skripty – T-SQL skripty na obnovu.
Takže najprv model obnovy. Je to nastavenie databázy, ktoré môže mať tri hodnoty, ale dlhodobo použiteľné sú len Simple Recovery model a Full Recovery Model. Toto nastavenie má vplyv na to, aký typ zálohy sa dá spraviť, ako sa údaje dajú obnoviť, ale hlavne ako sa generuje transakčný log. Pri Simple modely sa log pravidelne zmaže pri tzv. Checkpointe, ktorý robí SQL Server v určitých intervaloch a pri ktorom sa zapíšu údaje z pamäti na disk. Výhodou tohto modelu je, že sa administrátor nemusí o log starať, pretože jeho veľkosť sa automaticky reguluje. Pri Full model log ostáva aj po checkpointoch. V tomto prípade je možné ho zálohovať, pretože môže obsahovať všetky transakcie od poslednej zálohy. Treba sa o neho ale aj starať. To znamená, po zálohe ho skrátiť a skontrolovať jeho dĺžku, aby nenaplnil povolenú kapacitu disku (v takom prípade SQL server nedovolí vykonať do databázy žiadnu zmenu).
Skripty pre zálohu sú postavené na príkaze BACKUP DATABASE | LOG <názov databázy>. Pomocou neho viete zálohovať databázu alebo log. V prípade databázy si viete vybrať, či chcete plnú zálohu alebo prírastkovú. Prírastková obsahuje zmenu od poslednej plnej alebo prírastkovej zálohy. Okrem toho ešte môžete zálohovať len niektoré súbory alebo filegroupy.
Skripty na obnovu sú tiež postavené na jednom príkaze, a to RESTORE DATABASE | LOG <názov databázy>. Podstatné je, že skripty obnovy sa píšu podľa skriptov zálohovania. Teda to, čo zálohujete a v takom poradí, ako zálohujete, potom aj obnovujte. Najmä, ak robíte prírastkovú zálohu alebo zálohu logu, treba dávať pozor na poradie obnovovania, pretože každá takáto záloha je prírastková od poslednej zálohy. Dôležitá je ešte klauzula WITH NORECOVERY | RECOVERY. Pre všetky RESTORE príkazy okrem posledného je potrebné použiť NORECOVERY a pre posledný práve RECOVERY. Tento príkaz spôsobí redo všetkých transakcií z logu, ktoré boli vykonané od poslednej zálohy a undo všetkých neukončených transakcií. Toto sa ale musí diať ako posledný krok celej zálohy.
Ak začnete premýšľať nad vhodnou stratégiou, dôjdete k tomu, že sa musíte rozhodnúť medzi jednoduchým zálohovacím systémom, ktorý ale bude mať veľké zálohy a dlhý zálohovací čas alebo komplikovaným prírastkovým zálohovaním, ktorý bude obsahovať malé zálohy ale komplikovanú obnovu. Vždy to bude jednoduchosť plánu vs. veľkosť zálohy a čas zálohovania. Ak si zvolíte Simple stratégiu, tak zálohujete len databázu (najjednoduchšie stále celú). Log sa použije len na redo a undo transakcií na záver. Celú zálohovaciu stratégiu postavíte na dátach a log ignorujte. Ak naopak použijete pri zálohovaní log, musíte sa starať o jeho veľkosť a postup obnovy tiež nie je úplne jednoduchý, ale výsledok je, že zálohu môžete robiť aj každý 10 minút, pretože trvá krátko a nie je veľká. Treba si ujasniť priority a potom sa rozhodnúť.
Ešte na záver jedna poznámka: SQL Server obsahuje aj tzv. funkcionalitu Snapshot-ov. Nepoužívajte ich na zálohu. Sú to špeciálne entity, ktoré keď vytvoríte, vedia vám zobrazovať read-only stav databázy v nejakom čase. V skutočnosti sú stále napojené na databázu a obsahujú len rozdiel zmien, ktoré boli vykonané od ich vytvorenia (aby vedeli zobraziť stav, aký bol v danom čase). Na zálohu nie sú vôbec vhodné.