• Nie Znaleziono Wyników

Transformace je za n´ama a nyn´ı se m ˚uˇzeme pustit do obnovy dat zpˇet na server. V pˇr´ıkazov´em ˇr´adku se pˇremistˇete opˇet do sloˇzky s aplikac´ı a najdˇete d´avkov ´y soubor ob-nova.dat. Opˇet jej spust’te stejn ´ym zp ˚usobem jako v pˇredeˇsl´em pˇr´ıpadˇe pˇri spouˇstˇen´ı d´avkov´eho souboru zaloha.dat. Pˇr´ıkaz tedy bude vypadat velice podobnˇe.

obnova nazev serveru nazev databaze login heslo

V tomto bodˇe m ˚uˇze nastat nˇekolik situac´ı. V pˇr´ıpadˇe zad´an´ı ˇspatn ´ych ´udaj ˚u v´as apli-kace informuje o ne ´uspˇechu pˇripojen´ı na server a vypne se. M ˚uˇze tak´e nastat takov´a situace, ˇze se ´uspˇeˇsnˇe pˇrihl´as´ıte na sv ˚uj server, ale z nˇejak´eho d ˚uvodu nen´ı jeˇstˇe vy-tvoˇren ´y ˇz´adn ´y z´aloˇzn´ı XML dokument. Aplikace by nemˇela s ˇc´ım pracovat a cel ´y proces by skonˇcil chybou a spadnut´ım cel´e aplikace. K oˇsetˇren´ı tohoto pˇr´ıpadu v´as aplikace in-formuje o t´eto situaci a mus´ıte nejprve vytvoˇrit z´alohu.

V pˇr´ıpadˇe ´uspˇeˇsn´eho pˇripojen´ı na server a existence z´alohy v´as aplikace informuje o

´uspˇechu a ihned v´as vyzve k zad´an´ı n´azvu souboru k obnovˇe dat. Po spr´avn´em zad´an´ı n´azvu souboru v´as syst´em informuje o tabulk´ach, kter´e byly obnoveny. Zde se projev´ı v ´yˇse zm´ınˇen´a transformace datab´aze naˇseho uk´azkov´eho pˇr´ıkladu.

Je dobr´e se pod´ıvat tak´e na sch´ema datab´aze k lepˇs´ımu porozumˇen´ı. V pˇredstaven´ı ubyl sloupec poˇcet l´ıstk ˚u. S t´ım si dok´aˇze n´astroj poradit. Pˇri ˇcten´ı XML dokumentu bude tento sloupec ignorov´an ve vˇsech z´aznamech t´eto tabulky. Sloupec ˇc´ıslo sedadla, kter ´y pˇribyl v tabulce rezervace podporuje NULL hodnoty. Tento sloupec n´astroj ˇreˇsit nemus´ı.

Ovˇsem v tabulce uˇzivatel ˚u pˇribyl sloupec adresa, kter ´y nepodporuje NULL hodnoty. U tˇechto sloupc ˚u mus´ıme rozliˇsovat, zda m´a nebo nem´a nastavenou v ´ychoz´ı hodnotu. V prvn´ım pˇr´ıpadˇe se n´astroj zachov´a stejnˇe jako u sloupce s NULL hodnotami. Pˇri obnovˇe dat se automaticky dopln´ı jeho nastaven´a v ´ychoz´ı hodnota do vˇsech novˇe vloˇzen ´ych z´aznam ˚u dan´e tabulky. T´ım se pˇredejde chyb´am a n´astroj tento sloupec nemus´ı ˇreˇsit.

Ovˇsem v druh´em pˇr´ıpadˇe S ˇRBD pˇri obnovˇe nezn´a v ´ychoz´ı hodnotu dan´eho sloupce.

Vyˇreˇs´ı to t´ım zp ˚usobem, ˇze pˇri obnovˇe vloˇz´ı do vˇsech novˇe vloˇzen ´ych z´aznam ˚u dan´e tabulky NULL hodnotu, coˇz automaticky vy ´ust´ı v chybu a obnova se neprovede.

Avˇsak n´astroj tuto situaci dok´aˇze oˇsetˇrit. V takov´eto situaci v´as pˇred obnovou n´astroj vyzve k zad´an´ı v ´ychoz´ı hodnoty. Informativnˇe je v z´avork´ach uveden i datov ´y typ dan´eho sloupce, kter ´y m´a b ´yt zad´an. Pot´e po zad´an´ı v ´ychoz´ı hodnoty sloupce n´astroj pozmˇen´ı sch´ema datab´aze a nic uˇz nebr´an´ı kompletn´ı obnovˇe dat.

Obr´azek 9: Obnova dat

Obr´azek demonstruje bˇeh n´astroje bˇehem obnovy. M ˚uˇzeme vidˇet informativn´ı zpr´avy o ´uspˇeˇsnˇe obnoven ´ych tabulk´ach a hlavnˇe v ´yzvu k zad´an´ı v ´ychoz´ı hodnoty pro sloupec adresa v tabulce uˇzivatel ˚u. Po potvrzen´ı se objev´ı zpr´ava o ´uspˇeˇsn´e obnovˇe dat tabulky uˇzivatel ˚u a aplikace se vypne. T´ımto je obnova kompletn´ı.

Pro kontrolu funkˇcnosti n´astroje se m ˚uˇzete pˇrihl´asit na v´aˇs server a zkontrolovat data v tabulk´ach. V tabulce uˇzivatel ˚u ve vˇsech z´aznamech ve sloupci adresa by mˇela b ´yt v´ami zadan´a v ´ychoz´ı hodnota. Ve sloupci ˇc´ıslo sedadla v tabulce rezervac´ı by mˇela b ´yt ve vˇsech z´aznamech NULL hodnota.

Pro udrˇzen´ı konzistence z´alohy a dat na serveru se po procesu obnovy spust´ı znova z´alohov´an´ı cel´e datab´aze i jej´ıho sch´ematu. Uˇzivatel to bˇeˇznˇe nepozn´a, protoˇze n´astroj o tom nijak neinformuje. Pot´e pˇri dalˇs´ı obnovˇe by cel ´y proces probˇehl bez transformace plnˇe automaticky. M ˚uˇzete si opˇet zkontrolovat v ´ystupn´ı XML soubor a pod´ıvat se na zmˇeny vznikl´e transformac´ı.

Datab´aze byla pro tento uk´azkov ´y pˇr´ıklad vybr´ana z´amˇernˇe trivi´aln´ı. Aplikace je schopna pracovat s mnohem vˇetˇs´ı a robustnˇejˇs´ı datab´az´ı s nˇekolika tis´ıci z´aznamy v po-rovn´an´ı s datab´az´ı v tomto textu.

Pokud by jste spustili d´avkov´e soubory pro z´alohov´an´ı a obnovu znova, probˇehlo by to automatizovanˇe bez zad´av´an´ı v ´ychoz´ıch hodnot. V tomto bodˇe by uk´azkov ´y pˇr´ıklad probˇehl bez zam ´yˇslen´e transformace, protoˇze aplikace m´a v t´eto f´azi uloˇzen´e nov´e sch´ema datab´aze vznikl´e transformac´ı. Pro spuˇstˇen´ı cel´eho procesu znova spust’te nejprve skript pro smaz´an´ı tabulek smazat.sql a pak vˇse opakujte podle jednotliv ´ych krok ˚u znova.

4 Transformace datab ´aze

C´ılem t´eto kapitoly je detailnˇejˇs´ı rozbor transformace datab´aze, kter´a byla zm´ınˇena v pˇredchoz´ı kapitole. ˇCten´aˇr by mˇel po pˇreˇcten´ı t´eto kapitoly plnˇe porozumˇet transformaci i jej´ı realizaci ve zdrojov´em k ´odu.

4.1 Na ˇcten´ı sch ´emat tabulek

Nejprve by bylo dobr´e porozumˇet celkov´emu ˇreˇsen´ı transformace ve zdrojov´em k ´odu aplikace a potom se m ˚uˇzeme pustit do ˇreˇsen´ı jednotliv ´ych situac´ı ubyt´ı a pˇrid´an´ı sloupce.

Reˇsen´ı tranformace ve zdrojov´em k ´odu stoj´ı na funkci porovn´av´an´ı struktury. Nejprveˇ vˇsak mus´ı b ´yt nˇeco k porovn´an´ı.

Z´akladn´ım kamenem je funkce SchemaRestore, kter´a pˇri obnovˇe dat naˇc´ıt´a sch´ema datab´aze z XML dokumentu. Funkce nejprve naˇcte z dokumentu n´azvy tabulek. Pot´e podle pˇr´ıˇsluˇsn´eho n´azvu z´alohov´an´e tabulky z´arove ˇn tato funkce vytvoˇr´ı sch´ema t´eto tabulky i z SQL serveru a tyto dvˇe vytvoˇren´e tabulky pˇred´a jako 2 parametry funkci SchemaComparison, kter´a tyto dvˇe tabulky porovn´av´a.

COLUMN NAME IS NULLABLE COLUMN DEFAULT DATA TYPE

login NO varchar

jmeno YES varchar

prijmeni YES varchar

email NO (’seznam@cz’) varchar

Tabulka 2: Pˇr´ıklad tabulky se sch´ematem

Tato tabulka je kl´ıˇcov´a pro uskuteˇcnˇen´ı transformace. Pro jej´ı uloˇzen´ı pouˇzijeme v k ´odu tˇr´ıdu DataTable, kter´a je souˇc´ast´ı ADO.NET. Jako sloupce obsahuje pouze nutn´e atributy, kter´e jsou potˇrebn´e k realizaci transformace. Kompletn´ı sch´ema datab´aze je mnohem vˇetˇs´ı, ale pro n´aˇs pˇr´ıpad bude staˇcit pouze tohle. V podstatˇe tato tabulka ob-sahuje metadata o tabulce v datab´azi.

Tabulky se sch´ematem datab´aze se v aplikaci vytv´aˇrej´ı vˇzdy pro jednu tabulku v jed-nom pr ˚ubˇehu cyklu. Pot´e probˇehne porovn´an´ı ve funkci SchemaComparison. Pot´e na z´akladˇe porovn´an´ı obou tabulek probˇehnou nebo neprobˇehnou urˇcit´e operace, kter´e si pop´ıˇsem pozdˇeji a pot´e se zase vytvoˇr´ı nov´a tabulka se sch´ematem. K naˇcten´ı t´eto tabulky z XML dokumentu byl pouˇzit XmlTextReader. XmlTextReader je standardnˇe podporov´an v .NET frameworku. Je odvozen od abstraktn´ı tˇr´ıdy XmlReader. Pˇredstavuje dopˇredn ´y pˇr´ıstup k proudu dat XML. Jedn´a se o velice rychl ´y zp ˚usob ˇcten´ı dat z XML dokumentu.

Zp ˚usob ˚u ˇcten´ı dokumentu je v´ıce.

M ˚uˇzeme napˇr´ıklad pouˇz´ıt tˇr´ıdu XmlDocument a pot´e pouˇz´ıt selekci v podobˇe zad´an´ı XPath v ´yraz ˚u pro v ´ybˇer dat. Ovˇsem v tomto ohledu nemus´ı b ´yt tento zp ˚usob pˇr´ıliˇs efek-tivn´ı, protoˇze dokument se mus´ı naˇc´ıst do pamˇeti a pot´e s n´ım lze pracovat. Naˇc´ıt´an´ı do pamˇeti u tohoto zp ˚usobu je nutn´e, protoˇze je potˇreba zn´at stromovou strukturu XML do-kumentu k pouˇzit´ı XPath v ´yraz ˚u. XmlTextReader funguje opaˇcnˇe. Nemus´ı nic naˇc´ıtat do

pamˇeti a to jej dˇel´a velice rychl ´ym. Pouze se posouv´a od jednoho elementu k druh´emu a postupnˇe vˇsechny ˇcte.

1 while ( r .Read() && r.LocalName != tableName)

2 {

3 if ( r .LocalName.Equals(”Column”))

Powiązane dokumenty