otrdiena, 2012. gada 13. novembris

Rezerves kopijas: savsarpēji saistītas datu bāzes

Mana attieksme pret rezerves kopijām gadu gaitā ir visai radikāli mainījusies. Ilgu laiku priekšstats bija apmēram tāds- kas tur daudz ko galvu lauzīt, vienu ātru back-up dienā un lieta darīta. Tomēr, jo vairāk laiks iet, jo sarežģītāka tā padarīšana sāk šķist. Šajā rakstā apskatīšu vienu no iespējamiem sarežģījumiem.

Vienkāršoti- rezerves kopija pēc idejas nav nekas cits kā datu dublikāts. Datu dublikāta galvenais mērķis ir nelaimes gadījumā (piemēram, nobrūk disks) nodrošināt datu bāzes atjaunošanu līdz pieņemami tuvam laika brīdim (šis "pieņemami tuvais" laika brīdis, protams, katrā gadījumā var būt cits).

Viena no iespējamām problēmām ir nepieciešamība izveidot rezerves kopiju divām (vai vairākām) savstarpēji saistītām datu bāzēm. Pat tad, ja rezerves kopijas sāk veidot pēc iespējas vienā laika momentā visām saistītajām datu bāzēm, nekur nav garantija, ka tas tiešām notiks vienā laika momentā.

Lai garantētu savstarpēji saistītu datu bāzu rezerves kopiju savstarpējo konsekvenci, jāizmanto speciālas transakcijas - "Marked Transactions". Ideja ir tāda, ka notiek viena transakcija visās saistītajās datu bāzēs. Visās datu bāzēs šī transakcija tiek ierakstīta transakciju logā un tās atpazīšanai tiek lietots transakcijas nosaukums un apraksts, kas papildināts ar laika zīmogu. Nelaimes gadījumā, datu bāzu atjaunošana notiek līdz šai transakcijai. Sintakse:
Begin Tran MyTran With Mark 'Apraksts'
-- ...
Commit
Jāņem vērā, ka šīs transakcijas ietvaros visās saistītajās datu bāzēs ir jāveic kāda datu modifikācija (DML) vai cita darbība (DDL), kas tiek reģistrēta transakciju logā. Un datu bāzes nedrīkst būt "Simple" atjaunošanas modelis (jo tādā gadījumā transakciju logs netiek saglabāts).

Lai pārliecinātos, ka transakcija ir saglabāta visās saistītajās datu bāzēs, var izmantot vaicājumu:
Select * From msdb.dbo.logmarkhistory
Plašāk par šo tēmu var lasīt:
Recovery of Related Databases That Contain Marked Transaction

Taisnības labad jāsaka, ka savstarpēji saistītās datu bāzes man nu nemaz nepatīk, tomēr tā ir dzīves realitāte ar ko samērā bieži sanāk saskarties..

Šis risinājums nav ideāls, tomēr, cik man zināms, vienīgais, kas garantē datu bāzu savstarpējo konsekvenci. Galvenais trūkums ir tas, ka datu bāzes var atjaunot tikai līdz pēdējai reģistrētajai (Marked) transakcijai. Pēc tās var būt notikušas izmaiņas datu bāzēs, kas atjaunošanas gadījumā zūd. Bet tā ir cena, kas jāmaksā savstarpēji saistītu datu bāzu gadījumā..

Nav komentāru:

Ierakstīt komentāru