â Oh, ĂŒhtegi varjupaika ei suuda meteoriiditĂ€het taluda. Kuid nagu igal inimesel, on ka teil varu, seega vĂ”ite muretseda.
Stanislaw Lem, âIjon Tichi tĂ€htede pĂ€evikudâ
Tagaistu tÀhendab andmete koopia salvestamist kuskil vÀljaspool nende pÔhikohta.

Tagaistumise peamine eesmĂ€rk on andmete taastamine nende kadumise korral. SeetĂ”ttu kuuleb sageli, et andmebaasi reklaami olemasolu tagab alati andmete taastamise ja tagaistmine pole vajalik. Tegelikult vĂ”imaldab tagaistus lahendada vĂ€hemalt kolm ĂŒlesannet, mida ei saa lahendada reklaami abil, ja reklaami ei saa ka ilma tagaistumiseta algatada.
Esiteks vĂ”imaldab tagaistus andmete taastamist loogilise vea korral. NĂ€iteks kui raamatupidaja kustutas rĂŒhma kannet vĂ”i andmebaasi administraator hĂ€vitas tabeliruumi. MĂ”lemad toimingud on andmebaasi vaatepunktist tĂ€iesti legitiimsed ning replikatsiooni protsess kopeerib need repliikas.
Teiseks, kaasaegsed andmebaasi haldustarkvarad on ĂŒsna usaldusvÀÀrsed, kuid vahel vĂ”ivad andmebaasi sisemised struktuurid siiski kahjustuda, mille jĂ€rel andmetele ligipÀÀs kaob. Eriti vale meelestatus, et selline rikkumine toimub tavaliselt suure koormuse vĂ”i mingite uuenduste paigaldamise ajal. Kuid nii suur koormus kui ka regulaarne uuendamine viitavad sellele, et andmebaas ei ole testimisel ja selles hoitavad andmed on vÀÀrtuslikud.
LĂ”puks on kolmas ĂŒlesanne, mille lahendamiseks on vajalik varukoopia olemasolu, andmebaasi kloonimine, nĂ€iteks testimise eesmĂ€rkidel.
Andmebaaside varundamine pĂ”hineb ĂŒhel kahest pĂ”himĂ”ttest:
- Andmete valimine jÀrgnevaks salvestamiseks suvalises formaadis;
- Andmebaasi failide seisundi jÀÀdvustamine ja logide salvestamine.
Vaatame neid pÔhimÔtteid ja nende elluviimise tööriistu lÀhemalt.
Andmete eksportimine
Iga andmebaasi utiliidi komplekti kuuluvad andmete eksportimise ja importimise tööriistad. Andmed salvestatakse kas tekstivormingus vÔi konkreetse andmebaasi jaoks mÔeldud binaarsetes vormingutes. Allpool on tabel selliste tööriistade nimekirjaga:
Binaarne vorming
Tekstivorming
Oracle
DataPump Eksport/DataPump Import
Eksport/Import
SQL*Plus/SQL*Loader
PostgreSQL
pg_dump, pg_dumpall/pg_restore
pg_dump, pg_dumpall/psql
Microsoft SQL Server
bcp
bcp
DB2
unload/load
unload/load
MySQL
mysqldump, mysqlpump/mysql, mysqlimport
MongoDB
mongodump/mongorestore
mongoexport/mongoimport
Cassandra
nodetool snapshot/sstableloader
cqlsh
Tekstivorming on hea, kuna seda saab redigeerida vÔi isegi luua vÀliste programmide abil, samas kui binaarne vorming vÔimaldab andmete kiiret eksportimist ja importimist, sÀÀstes ressursse vormingute konverteerimisel.
Kasuandmete eksportimine, hoolimata selle lihtsusest ja selgest ideest, ei ole koormatud tööstuslike andmebaaside varundamiseks sageli sobilik. Siin on pÔhjused, miks eksport ei sobi tÀielikuks varundamiseks:
- ekspordiprotsess koormab oluliselt lĂ€hte sĂŒsteemi;
- ekspordiks kulub palju aega â ekspordi lĂ”puks on see juba aegunud.
- Kogu andmebaasi kooskĂ”lastatud vĂ€ljund suure koormuse ajal on praktiliselt vĂ”imatu, sest andmebaasisĂŒsteem peab sĂ€ilitama oma oleku koopia vĂ€ljundi algusaegadel. Mida rohkem tehinguid on olnud vĂ€ljundi algusest peale, seda suurem on koopia maht (aktuaalsete andmete koopiad PostgreSQL-is, undo ala Oracle-is, tempdb Microsoft SQL Server-is jne);
- VĂ€ljund sĂ€ilitab andmete loogilise struktuuri, kuid mitte fĂŒĂŒsilise struktuuri â tabelite fĂŒĂŒsilise salvestamise parameetrid, indeksid jne.
Kuid vÀljundil on ka eelised:
- kÔrge valikuvÔime: saab vÀljundada eraldi tabeleid, eraldi vÀlju ja isegi eraldi ridu;
- VÀljundatud andmeid saab laadida teise versiooni andmebaasi, ja kui vÀljund on tehtud tekstiformaadis, siis ka teise andmebaasi.
Seega kasutatakse vĂ€ljundit peamiselt selliste ĂŒlesannete jaoks nagu vĂ€ikeste tabelite (nt registrite) varundamine vĂ”i andmekogumite levitamine koos rakenduse jĂ€rgmise versiooniga.
Andmebaaside varundamise kÔige levinum meetod on andmebaasi failide kopeerimine.
âKĂŒlmâ andmebaasifailide salvestamine
Ilmselt on mĂ”te see, et peatada andmebaas ja kopeerida kĂ”ik selle failid. Sellist varukoopiat nimetatakse âkĂŒlmaksâ. Meetod on ÀÀrmiselt usaldusvÀÀrne ja lihtne, kuid tal on kaks silmatorkavat puudust:
- âkĂŒlmaâ varukoopia abil on vĂ”imalik taastada ainult see andmebaasi seisund, mis oli peatamise hetkel; tehingud, mis toimusid pĂ€rast andmebaasi taaskĂ€ivitamist, ei sisaldu âkĂŒlmasâ varukoopias;
- kaugeltki mitte igal andmebaasil ei ole tehnoloogilist akent, mil ajal saab andmebaasi peatada.
Kui aga âkĂŒlmâ varukoopia sobib, tuleb meeles pidada, et
- âkĂŒlmâ koopia peab mĂ”nikord sisaldama ka ĆŸurnale. Meetodid, kuidas mÀÀrata, millised ĆŸurnalid peaksid jĂ”udma âkĂŒlmaâ koopia, on iga DBMS jaoks individuaalsed. NĂ€iteks Oracle'is tuleb kopeerida nn online redo, st kindel arv ĆŸurnalfailidest spetsiaalses kataloogis, isegi siis, kui andmebaas on Ă”igesti peatatud. PostgreSQL-is tuleb salvestada kĂ”ik ĆŸurnalid alates ĆŸurnalist, mis sisaldab viimast kontrollpunkti, mille teave on haldusfailis.
- Andmebaasi kataloog vĂ”ib sisaldada piisavalt suuri ajutiste tabeliruumide faile, mida ei ole vajalik varukoopiasse kaasata. Muide, see mĂ€rkus kehtib ka âsoojaâ varukoopia kohta.
âSoeâ failide salvestamine
Enamik tÀnapÀevaste andmebaaside varukoopiaid tehakse andmebaasi faile kopeerides ilma andmebaasi seiskamata. Siin on mitu probleemi:
- Kopeerimise alguses vÔib andmebaasi sisu mitte kattuda failide sisuga, kuna osa teabest asub vahemÀlus ja pole veel kettale salvestatud.
- Kopeerimise ajal vÔib andmebaasi sisu muutuda. Kui kasutatakse muudetavaid andmestruktuure, siis muutub failide sisu, ja kui kasutatakse muutumatuid struktuure, muutub failide kogum: uued failid tekivad ja vanad kustutatakse.
- Kuna andmete kirjutamine andmebaasi ja andmebaasi failide lugemine ei ole omavahel sĂŒnkroniseeritud, vĂ”ib varukoopia tarkvara lugeda vigast lehte, kus pool on vana versioon ja teine pool uus.
Kuna varukoopia oleks kooskĂ”las, on igal andmebaasisĂŒsteemil kĂ€sk, mis teatab, et varukoopiate tegemise protsess on alanud. SĂŒndaks see kĂ€sk vĂ”ib erinevates sĂŒsteemides vĂ€lja nĂ€ha erinevalt:
- Oracle's on see eraldi kÀsk ALTER DATABASE/TABLESPACE BEGIN BACKUP;
- PostgreSQL'is â funktsioon pg_start_backup();
- Microsoft SQL Serveris ja DB2-s toimub ettevalmistus varukoopiamiseks kaudselt BACKUP DATABASE kÀsku tÀites;
- MySQL Enterprise'is, Cassandra's ja MongoDB-s toimub ettevalmistus kaudselt vĂ€listööriistade abil â vastavalt mysqlbackup, OpsCenter ja Ops Manager.
Hoolimata sĂŒntaktilistest erinevustest, nĂ€eb varukoopiate tegemise ettevalmistus vĂ€lja ĂŒhtlaselt.
Nii nĂ€eb varukoopiate tegemise ettevalmistus vĂ€lja andmebaasisĂŒsteemides, kus on muudetavad ketasstruktuurid, st kĂ”igis traditsioonilistes ketasrelatsioonilistes sĂŒsteemides:
- KÀitumise alguspunkt jÀÀb meelde; varukoopia peab sisaldama andmebaasi logisid alates sellest hetkest.
- Kontrollpunkt on kÀimas, mille kÀigus kÔik andmelehtede muutused, mis on toimunud enne salvestatud hetkest, kirjutatakse kettale. See tagab, et varukoopia alguse hetkeni kehtinud logisid ei vajata taastamise ajal.
- KĂ€ivitub eriline logimise reĆŸiim: kui andmeleht muutub esmakordselt pĂ€rast kettalt laadimist, siis selle asemel, et logisse kirja panna andmelehe muudatus, salvestab andmebaas sinna kogu lehe. Etteteatamise protseduuri kĂ€igus kirjutatakse kĂ”ik lehed kettale ja seetĂ”ttu on iga esmakordse muutuse korral leht alati logis tervikuna. Kuid kui andmeleht on jĂ€lle varukoopia kĂ€igus kettale kirjutatud, siis jĂ€rgnev muudatus toob samuti kaasa logis terve lehe koopia. See tagab, et kui failiga andmed kopeerides peaks andmeleht osutuma vigaseks, siis logi rakendamine teeb selle taas korrektseks.
- Failide pĂ€ise muutmine on blokeeritud, see tĂ€hendab selle osa muutmine, mida ei kajastata ĆŸurnaalides. See tagab, et pĂ€is kopeeritakse Ă”igesti ja seejĂ€rel rakendatakse ĆŸurnaalid Ă”igesti andmefailile.
Kui kĂ”ik ĂŒlaltoodud protseduurid on lĂ”petatud, saab andmefaile kopeerida operatsioonisĂŒsteemi tööriistadega â cp, rsync ja teistega. VarundusreĆŸiimi sisselĂŒlitamine vĂ€hendab andmebaasi jĂ”udlust: esiteks suureneb logifailide maht ja teiseks, kui varundusreĆŸiimi ajal tekib rike, on taastamine kestvam, kuna andmefailide pĂ€iseid ei uuendata. Mida kiiremini varundus lĂ”ppeb, seda parem on andmebaasile, seega on siin asjakohane kasutada selliseid tööriistu nagu failisĂŒsteemi hetkeseis (snapshot) vĂ”i peegli katkestamine (BCV) diskiraidil. MĂ”ned andmebaasi haldustarkvarad (nt Oracle, PostgreSQL) jĂ€tavad administraatorile vĂ”imaluse valida kopeerimise meetod, teised (nt Microsoft SQL Server) pakuvad liidest oma varundustööriistade integreerimiseks failisĂŒsteemide vĂ”i andmesalvestussĂŒsteemidega.
Varundusprotsessi lÔppedes tuleb andmebaas viia tagasi normaalsesse olekusse. Oracle'is tehakse seda kÀsklusega ALTER DATABASE/TABLESPACE END BACKUP, PostgreSQL'is funktsiooni pg_stop_backup() kutsumisega, teistes andmebaasides aga vastavate kÀskude vÔi vÀlist teenuseid kasutavate sisemiste alamprogrammidega.
Nii nÀeb vÀlja protsessi varundamise ajaskaala:

- Varundamiseks ettevalmistamine (begin backup) vĂ”tab aega, mĂ”nikord mĂ€rkimisvÀÀrselt. Isegi kui kasutatakse peegeldavaid mahte vĂ”i failisĂŒsteeme, mis vĂ”imaldavad teha pilte, ei toimu varundamisprotsess kohe.
- Koos andmefailidega tuleb salvestada ajakirjad alates varundamise ettevalmistamise algusest kuni hetkest, mil andmebaas naaseb normaalsesse olekusse.
- Selle varukoopia pÔhjal on vÔimalik taastuda hetkel, mil andmebaas naaseb normaalsesse olekusse. Varundamine varasemaks ajaks ei ole vÔimalik.
Andmebaasidega, mis kasutavad muutumatuid andmestruktuure (mÀlu pildid, LSM-puude), on olukord lihtsam. Varundamiseks ettevalmistamise protsess koosneb jÀrgmistest etappidest:
- MĂ€lu andmed salvestatakse kettale.
- Loetakse failide nimekiri, mis kuuluvad varukoopiasse. Seni, kuni varundamisprotsess ei ole lÔpetatud, on andmebaasil keelatud neid faile kustutada, isegi kui need enam ei ole vajalikud.
Varundamise lÔppsignaali korral vÔib andmebaas muutumatute struktuuridega uuesti kustutada mittevajalikud failid.
Taastamine punktis
Varukoopia vĂ”imaldab taastada andmebaasi oleku hetkel, mil katkestati varundamisreĆŸiimi taastumise kĂ€sk. Siiski vĂ”ib Ă”nnetus, mille puhul taastamine on vajalik, juhtuda igal ajal. Andmebaasi oleku taastamise ĂŒlesanne, mis on mÀÀratletud kindlal hetkel, nimetatakse "punktipĂ”hiseks taastamiseks" (point-in-time recovery).
Selle vÔimaluse tagamiseks tuleks alates varukoopia lÔppemisest sÀilitada andmebaasi logisid ning taastamise kÀigus jÀtkata logide rakendamist taastatud koopiale. PÀrast seda, kui andmebaas on taastatud varukoopiast ajas, mis vastab koopia lÔppemise hetkele, on andmebaasi olek (failide ja vahemÀlus hoitavate lehtede) korralikult tagatud, seetÔttu ei ole erilist logimist vaja. Rakendades logisid soovitud momenti, on vÔimalik saavutada andmebaasi seisund mis tahes ajahetkeks.
Kui varukoopia taastamise kiirus on piiratud vaid ketta lĂ€bilaskevĂ”imega, siis ajakirjade kasutamise kiirus on tavaliselt piiratud protsessori jĂ”udlusega. Kui peamisemas andmebaasis toimuvad muudatused paralleelselt, siis taastamisel teostatakse kĂ”ik muudatused jĂ€rjestikku - ajakirjast lugemise jĂ€rjekorras. Seega sĂ”ltub taastamisaeg lineaarset sellest, kui kaugel taastamispunkt on varukoopia lĂ”pp-punktist. Selle tĂ”ttu tuleb teha ĂŒsna sageli tĂ€isvarukoopiaid - vĂ€hemalt kord nĂ€dalas madala tehingukoormusega andmebaaside jaoks ja kuni igapĂ€evaste varukoopiate tegemiseks kĂ”rge koormusega andmebaaside jaoks.
Inkrementaalne varukoopia
Taastamise kiirus on soovitav, et varukoopiaid saaks teha vĂ”imalikult sageli, kuid samas mitte vĂ”tta liigset ruumi kettalt ja mitte koormata andmebaasi varukoopiate tegemise ĂŒlesannetega.
Probleemi lahendus on inkrementaalne varundamine, see tÀhendab ainult nende andmelehtede kopeerimist, mis on muutunud alates eelmise varundamise hetkest.
Inkrementaalne varundamine on mĂ”ttekas ainult andmebaasisĂŒsteemides, mis kasutavad muudetavaid andmestruktuure.
Inkrement vÔib lÀhtuda kas tÀielikust varukoopiast (kumulatiivne koopia) vÔi mis tahes eelnevast koopiast (diferentsiaalne koopia).

Kahjuks ei ole ĂŒhtegi ĂŒhtset terminoloogiat ja erinevad tootjad kasutavad erinevaid termineid:
Diferentsiaalne
Kumulatiivne
Oracle
Differential
Cumulative
PostgresPro
Inkrementaalne
â
Microsoft SQL Server
â
Differential
IBM DB2
Delta
Inkrementaalne
Kuna inkrementaalsed kopeerid on olemas, nÀeb taastamisprotsess punktist vÀlja jÀrgmine:
- taastatakse viimane tÀisvarukoopia, mis tehti enne taastamispunkti;
- tÀisvarukoopia peale taastatakse inkrementaalsed koopiad;
- taastatakse logid varundamise alguspunktist taastamispunktini.
Kumulatiivne koopia kiirendab taastamisprotsessi. NĂ€iteks, et taastada andmebaasi seisund ajavahemikus T3 ja T4, tuleb taastada kaks inkrementaalset koopiat, kuid ajavahemiku T4 jĂ€rel taastamiseks piisab ainult ĂŒhest.
On selge, et ĂŒhe kumulatiivse koopia maht on vĂ€iksem kui mitme diferentsiaalse koopia maht, sest mĂ”ned lehed on mitu korda muutunud ja iga inkrementaalne koopia sisaldab oma versiooni lehelt.
Inkrementaalse koopia loomise kolme meetodit on:
- tÀieliku koopia loomine ja erinevuse arvutamine eelmise tÀieliku koopia suhtes;
- logide analĂŒĂŒs, muudetud lehtede nimekirja koostamine ja loendis olevate lehtede varundamine;
- muudetud lehtede pÀrimine andmebaasist.
Esimene meetod sÀÀstab kettaruum, kuid ei lahenda andmebaasi koormuse vĂ€hendamise probleemi. Veelgi enam, kui meil on tĂ€isvarukoopia, pole mĂ”tet seda inkrementaalseks muuta, kuna tĂ€iskoopiate taastamine on kiirem kui eelneva tĂ€iskoopiat ja inkrementi taastamine. Diskiruumi kokkuhoidu on parem usaldada spetsiaalsetele komponentidele koos sisseehitatud dedupikatsioonimehhanismidega. Need vĂ”ivad olla nĂ€iteks spetsiaalsed salvestussĂŒsteemid (EMC DataDomain, HPE StorageWorks VLS, kogu NetAppi tootevalik) vĂ”i tarkvaralahendused (ZFS, Veritas NetBackup PureFile, Windows Server Data Deduplication).
Teine ja kolmas meetod erinevad muudetud lehekĂŒlgede loendi mÀÀramise mehhanismi poolest. Logide analĂŒĂŒs on ressursimahukas, lisaks peab selle rakendamiseks olema teadmisi logifailide struktuurist. KĂŒsimine andmebaasilt, millised lehekĂŒljed tĂ€pselt on muutunud, on kĂ”ige lihtsam, kuid selleks peab DBMS-i sĂŒdamik omama muudetud plokkide jĂ€lgimise funktsionaalsust (block change tracking).
Esmakordselt loodi inkrementaalse varundamise funktsionaalsus Oracle Recovery Manageri (RMAN) tarkvaras, mis ilmus Oracle 8i versioonis. Oracle rakendas kohe muudetud blokki jĂ€lgimist, seega ei ole ajaloos kirjutatud logide analĂŒĂŒsimiseks vajadust.
PostgreSQL ei jĂ€lgi muudetud bloke, seetĂ”ttu mÀÀrab Venemaa ettevĂ”tte Postgres Professional vĂ€lja töötatud utiliit pg_probackup muudetud lehed logi analĂŒĂŒsimise kaudu. EttevĂ”te tarnib ka andmebaasi PostgresPro, mis sisaldab laiendust ptrack, mis jĂ€lgib lehtede muutusi. Kasutades pg_probackup'i koos andmebaasiga PostgresPro, kĂŒsib utiliit muudetud lehti otse andmebaasilt â just nagu RMAN.
Microsoft SQL Server jÀlgib muudetud lehti nagu Oracle, kuid BACKUP kÀsk vÔimaldab teha ainult tÀielikke ja kumulatiivseid varukoopiaid.
DB2-s on vĂ”imalik jĂ€lgida muudetud lehti, kuid vaikimisi on see vĂ€lja lĂŒlitatud. PĂ€rast aktiveerimist vĂ”imaldab DB2 luua tĂ€is-, erineva ja kumulatiivseid varukoopiaid.
Oluline erinevus selles osas kirjeldatud tööriistade (vĂ€lja arvatud pg_probackup) ja failipĂ”histe varundustööriistade vahel on see, et need kĂŒsivad andmebaasilt lehekĂŒlje pilte, mitte ei loe andmeid ise kettalt. Selle lĂ€henemise puuduseks on vĂ€ike lisakoormus andmebaasile. Siiski kompenseeritakse see puudus kenasti sellega, et loetud lehekĂŒlg on alati korrektne, mistĂ”ttu pole varundamise ajaks erijuhtimise reĆŸiimi kasutamise vajadust.
Veel kord tĂ”stke tĂ€helepanu, et inkrementaalsete koopia olemasolu ei tĂŒhista nĂ”udeid ajalooraamatute olemasolu kohta, et taastada andmed suvalisse ajapunkti. SeetĂ”ttu kirjutatakse tööstuslikes andmebaasides ajalooraamatud pidevalt vĂ€lisele meediale, samas kui varukoopiad, olgu need tĂ€is- ja/vĂ”i inkrementaalsed, luuakse graafiku alusel.
Praegu parim inkrementaalse varunduse idee elluviimine on tarkvara-riistvara kompleks (Oracle'i terminoloogias - engineered system) Zero Data Loss Recovery Appliance - spetsialiseeritud Oracle'i lahendus oma andmebaasi varundamiseks. Kompleks koosneb klastrist serverite suurt kĂ”vakettamahtu, millel on installitud muudetud versioon tarkvarast Recovery Manager ja mis saab töötada koos teiste Oracleâi riist- ja tarkvarakompleksidega (Database Appliance, Exadata, SPARC Supercluster), samuti Oracleâi andmebaasidega traditsioonilises infrastruktuuris. Erinevalt 'tavalisest' RMAN-ist on ZDLRA-s rakendatud 'igavese inkremendi' (incremental forever) kontseptsioon. SĂŒsteem loob ĂŒhekordselt tĂ€ieliku andmebaasi koopia ja seejĂ€rel teeb ainult inkrementaalseid koopiaid. TĂ€iendavad RMAN-moodulid vĂ”imaldavad koopiaid liita, luues uusi tĂ€ielikke koopiaid inkrementaalsetest.
Venemaa arendajate au on mÀrkida, et ka pg_probackup oskab inkrementaalseid koopiaid liita.

Erinevalt paljusid sarnaseid kĂŒsimusi, kĂŒsimusel 'milline varundusmeetod on parem' on ĂŒheselt mĂ”istetav vastus - parim on kĂ”ige sobivam oma kasutatava andmebaasi haldussĂŒsteemi (SĂB) utiliit, mis toetab inkrementaalset varundamist.
Andmebaasi administratori jaoks on palju olulisemad kĂŒsimused varundusstrateegia valik ja andmebaasi varundamise vahendite integreerimine ettevĂ”tte infrastruktuuri. Kuid need kĂŒsimused jÀÀvad selle artikli raamidest vĂ€lja.
Allikas: habr.com
