Sunteți pe pagina 1din 43

BD Baze de date distribuite 1

Baze de date distribuite



Baze de date distribuite 2
BD
Caracteristici BD distribuite
Beneficiaza de spatii de stocare si procesoare multiple, dar si
memorie extinsa
Inglobeaza componente eterogene si in acelasi timp autonome
Datele stocate in locatii diverse fiecare locatie fiind gestionata de
un DBMS ce poate rula independent
Utilizatorii nu cunosc locul in care datele sunt pastrate (extinde
conceptul independentei fizice si logice a datelor)
Utilizatorii pot scrie tranzactii accesand multiple siteuri similar cu
tranzactiile locale.
Tipuri de BD distribuite
Omogene acelasi DBMS la fiecare site
Eterogene diverse DBMS pe siteuri


Geteway Geteway
Geteway
DBMS1
DBMS2 DBMS3
infrastructura
Baze de date distribuite 3
BD

Gateway piesa software utilizata pentru compatibilizarea datelor
pentru SGBD eterogene ce accepta cereri pe care le trimite la DBMS
local si returneaza raspunsul celui care a furnizat cererea
Probleme specifice ce trebuie rezolvate
Ce date si unde se pastreaza
Accesul aplicatiilor la date
Fragmentare si alocare
Optimizarea interogarilor, la baze centralizate minimizarea
numarului operatiilor de intrare/iesire
Adaugarea costului comunicatiilor
Oportunitatea paralelizarii prelucrarilor
Concurenta accesului la date duce la multiplicarea nodurilor
Copiile multiple ale datelor creaza probleme de sincronizare la
update
Functionalitate partiala cand un site este nefunctional
Impactul pierderi conexiunii sistemelor de comunicatii
Baze de date distribuite 4
BD

Implementari
1. Servere colaborative





2. Middleware system
Client Server
Server
Server
query
Client Middleware
Server
Server
Server
query
Baze de date distribuite 5
BD
2. Fragmentarea si stocarea datelor
Fragmentarea descompunerea unei relatii in relatii mai mici sau
fragmente si pastrarea fragmentelor ca o singura relatie
Orizontala - separarea n-uplurilor relatiei
Primara functie de atribute locale
Derivata functie de atribute din relatii straine
Verticala descompunere join, cu posibilitatea refacerii relatiei
Hibrida combinatie fragmentare orizontala, verticala

R
R
1
R
2

R
11
R
12
R
21
R
22

H
H
V
V V V
>< ><
R
11
R
12
R
21
R
22

U
Baze de date distribuite 6
BD
Problema alocarii
Fie:
F = {F
1
,F
2
,.F
n
} setul de fragmente
S = {S
1
,S
2
,.S
m
} setul de siteuri
Q = {Q
1
,Q
2
,.Q
p
} setul posibil de cereri
Problema alocarii cere determinarea distributiei optime a setului de
fragmente F la setul de locatii S.
Criterii:
Cost minim agregat ca fiind costul stocarii fiecarui fragment F
i
la un
site S
k
, costul executiei unei cereri la siteul S
k
, costul unei operatii
de tip update la F
i
acolo unde este stocat si costul comunicatiei.
Performanta determinata de minimizarea timpului de raspuns si de
maximizarea fiabilitatii
Fie pentru exemplificare urmatoarea structura a tabelelor in baza de
date:
Angajat(nume, ) Lucreaza(responsabil, nume,..)
Baze de date distribuite 7
BD

Sa consideram cererea:
SELECT A.Nume
FROM Angajat A, Lucreaza L
WHERE A.Nume = L.Nume and L.Responsabil =Popescu
Adica: P
nume
(S
responsabil = Popescu
(Lucreaza >< Angajat)
Daca vom considera baza fragmentata orizontal in fragmentele Ang1,
Ang2, Lucr1, Lucr2 ce sunt stocate pe locatiile 1, 2, 3, 4 si cererea
este furnizata de locatia 5 se obtine urmatoarea schema de
executie:
Site 5
Ang11 U Ang21
Ang11=Ang1><Lucr11
Ang21=Ang2><Lucr21
Lucr11= S
responsabil =Popescu
(Lucr1) Lucr21= S
responsabil =Popescu
(Lucr2)
Site 1
Site 2
Site 3
Site 4
Baze de date distribuite 8
BD

O alta varianta poate fi:
P
Nume
((Ang1 U Ang2) >< (S
responsabil = Popescu
(Lucr1 U Lucr2)))
In general o procesare a cererii urmeaza schema:
Decompozitie cerere
Realizare cerere in alg. relationala pentru relatii dustribuite
Localizarea datelor
Cerere pe fragment
Otimizare globala
Cerere optimizata pe fragmente
Otimizare locala
Cerere optimizata local
Schema globala
Schema fragmente
Schema locala
Statistica fragmentelor
Baze de date distribuite 9
BD

Decompozitia:
Scrierea in forma normalizata (forma conjunctiva)
Analiza sintactica
Simplificarea (eliminarea predicatelor redondante)
Restructurare in forma algebrica
Proprietati dorite pentru fragmentare:
Fie o relatie R si colectia de fragmente F = {F
1
,F
2
,.F
n
} obtinuta din
fragmentarea relatiei R
Completitudinea pentru fiecare atribut x R exista F
j
astfel incat
x F
j

Neredondanta oricare ar fi x F
j
nu exista F
k
astfel incat x F
k

pentru j#k.
Reconstructia exista o functie g astfel incat R = g(F
1
,F
2
,.F
n
)

Baze de date distribuite 10
BD
3. Replicarea
Stocarea copiilor unei relatii sau fragmente ale relatiei. O intreaga
relatie poate fi replicata la unul sau mai multe siteuri. In acest mod
se asigura o disponibilitate mai mare a datelor daca un server nu
poate beneficia de serviciile unui alt server. In plus poate fi evaluata
rapid o cerere prin utilizarea datelor locale.
Daca R este fragmentat in R
1
, R
2
si R
3
, datele sunt pastrate pe site A si
site B cu R
1
replicat se obtine

R
1
R
3

R
1
R
2

Site A
Site B
Baze de date distribuite 11
BD

Gestiunea catalogului distribuit
Trebuie sa pastreze traiectoria distributiei datelor la siteuri
Trebuie sa fie capabil sa numeasca fiecare replica a fiecarui
fragment
<local_name, site_referinta>
<local_name, site_referinta, replica_id>
Site catalog descrie toate obiectele (fragmente, replici) ale
siteului si pastreaza traseele replicilor relatiilor create pe acest
site (pentru a gasi o relatie cu site_referinta, catalogul nu se
modifica daca relatia este mutata)
Tipuri de replicare
Replicare sincrona toate copiile relatiilor sau fragmentelor
modificate trebuiesc updatate sincron la COMMIT
Replicare asincrona copiile sunt periodic updatate, exista
diferente intre date la anumite momente.
Baze de date distribuite 12
BD

Tehnici de replicare sincrona
Votarea tranzactia trebuie sa scrie majoritatea copiilor la
modificarea unui obiect si trebuie citite mai multe copii pentru a fi
sigur ca utilizeaza o copie recenta. Ex: 10 copii, 7 scrise pentru
update, 4 copii citite.
Read any Write all citirea de oriunde scrierea la toate pentru a
pastra consistenta.
Obs:
Inainte de update trebuie sa se obtina blocarea tuturor copiilor
modificate
Transmite cerere lock la siteuri si asteapta raspunsul ce poate fi
intarziat de alte blocari.
Daca se pierde legatura cererea nu poate fi comisa
Chiar si la succes este necesar un protocol COMMIT expansiv
Baze de date distribuite 13
BD

Caracteristici replicare asincrona
Permite comiterea modificarii inainte ca toate copiile sa fi fost
modificate, utilizatorii trebuie sa cunoasca ce copie utilizeaza, unele
fiind out-of-sync
Metode
Primary site o singura locatie reprezinta copia master
Replicile nu sunt direct updatate. Schimbarile in master copy se
executa in doi pasi: captura si aplicare.
Peer to peer mai mult de o copie a unui obiect poate fi master
Schimbarile la master copy trebuiesc propagate la toate copiile. Daca
doua master copy sunt schimbate intr-o maniera conflictuala este
nevoie de un mecanism de rezolvarea conflictului. Metoda este
buna daca nu sunt conflicte - un singur master la un moment de
timp.

Baze de date distribuite 14
BD
Exemple cereri distribuite
Fragmentare orizontala
Fie fragmentarea tabelei angajat pastrand la Bucuresti angajatii cu
salariu >500 si la Iasi angajatii cu salariu <500
Cererea
SELECT AVG(VARSTA)
FROM ANGAJAT
WHERE SALARIU >300 AND SALARIU < 700
Necesita pentru executie SUM(VARSTA) si COUNT(VARSTA) la
ambele siteuri dupa care se va agrega pentru a obtine informatia
dorita. Descompunerea in cele doua subcereri este dificila.
Daca cererea doreste media varstei angajatilor cu salariu mai mare de
600 executia cererii se face la un singur site.
Fragmentare verticala
La Bucuresti: titlu, salariu, id, la Iasi: nume, varsta, id.
Join dupa id reconstruieste relatia
Baze de date distribuite 15
BD

Join distribuit
Consideram doua tabele Angajat avand 80 inregistrari pe pagina si 500
pagini si Lucreaza avind 100 inregistrari pe pagina si 1000 pagini.
Angajat 80*500 = 40000 inregistrari stocate la Bucuresti
Lucreaza 100*1000 = 100000 inregistrari stocate la Iasi.
Vom nota costul operatiei de citire/scriere pe pagina cu D si costul
transportului unei pagini cu S
Operatia de join facuta de la Bucuresti
Cost = 500*D+500*1000*(D+S)
Transport Lucreaza la Bucuresti
Cost = 1000*S+1500*D
Transport Angajat la Iasi
Cost = 500*S+1500*D
Alte posibilitati
Semijoin - la Bucuresti se efectueaza o operatie Project pentru a
pastra coloanele de interes si transport rezultat la Iasi pentru JOIN
(sau invers).
Baze de date distribuite 16
BD

Blommjoin
La Bucuresti se produce un vector de biti de dimensiune k, initializat cu
0. Se aplica o functie hash la coloana dupa care se face join,
functie ce intoarce valori in gama [0, k-1]. Daca rezultatul aplicarii
functiei hash este i se seteaza bitul i al vectorului. In vectorul
rezultat avem bitul i cu valoarea 1 daca exista cel putin o valoare
a campului de join pentru care functia hash a intors rezultatul i.
Vectorul rezultat se transmite la Iasi.
La Iasi se utilizeaza aceeasi functie hash pe campul de join al tabelei
Lucreaza. Se creaza o tabela Lucreaza redusa in care se tin doar
inregistrarile la care rezultatul functiei hash este i si in bit vector la
pozitia i avem valoarea setata. Tabela redusa se trimite la
Bucuresti pentru join.
Obs:
Metoda se aplica doar pentru join cu conditie de egalitate
Eficienta depinde de gradul de reducere al tabelei.
Curs 10 17
SBDD
BD Distribuite Oracle
Pot fi: omogene sau eterogene
Un sistem omogen este format din doua sau mai multe baze de date ORACLE
instalate pe una sau mai multe masini. In fig. trei baze : hq, mfg si sales.
Curs 10 18
SBDD
Definire: Baze de date distribuite
procesare distribuita

Termenii de baze de date distribuite si procesare distribuita sunt
strans legati intre ei, chiar daca au semnificatii diferite. Pentru
fiecare dintre termeni exista o definitie generala:
Baze de date distribuite un set de baze de date intr-un sistem
distribuit ce poate fi vazut ca aplicatii ale unei singure surse de date.
Procesare distribuita operatii ce se executa cand o aplicatie
distribuie task-uri catre diferite calculatoare aflate in retea. De
exemplu, o baza de date distribuie taskuri de prezentare front-end
catre client si permite serverului de baze de date din spate sa
gestioneze accesul la bazele de date. In consecinta, un sistem de
procesare al aplicatiei de baze de date distribuite mai este numit si
un sistem de baze de date client/server.
Curs 10 19
SBDD
Arhitectura BD distribuita Oracle
Fiecare masina dintr-
o retea poate
gazdui una sau
mai multe baze
de date. Intr-un
sistem de baze
de date
distribuite, fiecare
nod poate fi
client, server sau
ambele, in functie
de situatie.
Curs 10 20
SBDD
Database link
O conexiune intre baze de date este un
pointer care defineste o cale de
comunicatie unidirectionala de la un
server de baze de date Oracle la un
alt server de baze de date. Pointer-
ul conexiunii este definit ca un
camp intr-o tabela dictionar de date.
O conexiune intre baze de date permite
utilizatorilor locali sa acceseze date
aflate intr-o baza de date remote.
Pentru initierea acestei conexiuni,
fiecare baza de date din sistemul
distribuit trebuie sa aiba un nume
global unic de baza de date in
domeniul respectiv de retea.
Curs 10 21
SBDD
Tipuri conexiuni
Connected user link. Utilizatorii se conecteaza la baza de date
remote in acelasi mod in care s-ar conecta local, ceea ce presupune
ca acestia sa aiba un cont de utilizator pentru baza de date remote
cu nume de utilizator si parola identice cu cele din contul aflat pe
baza de data locala.
Fixed user link. Utilizatorii se conecteaza folosind numele de
utilizator si parola referentiate prin conexiune. De exemplu, daca
Ioana utilizeaza o conexiune fixed user link care presupune
conectarea la baza de date hq cu numele de utilizator si parola
mihai/adcm1, ea conectandu-se ca mihai, va avea toate privilegiile
la hq atribuite lui mihai in mod direct si toate facilitatile care i-au fost
acordate lui mihai la baza de date hq.
Current user link. Un utilizator se conecteaza ca un utilizator global.
Un utilizator local se poate conecta ca utilizator global in contextul
unei proceduri stocate, fara a salva parola globala de utilizator in
definirea conexiunii. De exemplu, Ioana poate accesa o procedura
scrisa de Mihai, accesand contul de utilizator si schema lui Mihai in
cadrul bazei de date hq.
Curs 10 22
SBDD
Conexiuni shared intre baze de date
O conexiune shared intre baze de date reprezinta o legatura intre un
proces al serverului local si o baza de date remote. Conexiunea este
impartita (shared) pentru ca multiple procese client pot utiliza
aceeasi conexiune simultan.
Un dblink shared difera de un dblink standard prin:
Utilizatorii diferiti ce acceseaza acelasi obiect al unei scheme prin
intermediul unui dblink pot face parte din aceeasi retea;
Cand un utilizator trebuie sa realizeze o conexiune intre un server
remote si un proces al unui server particular, procesul poate refolosi
conexiunea deja existenta cu serverul remote. Aceasta reutilizare a
conexiunii poate fi posibila daca a fost stabilita pe acelasi proces al
serverului, cu acelasi dblink, dar intr-o alta sesiune. Pentru un dblink
standard, conexiunea nu poate fi folosita pentru sesiuni multiple.
Cand se foloseste un dblink shared intr-o configurare de tip shared a
serverului, o conexiune poate fi stabilita direct in afara procesului
serverului shared, in serverul local. Pentru un dblink standard, acest
tip de conexiune trebuie stabilita cu ajutorul unui dispecer local, prin
care vor trece toate datele.
Curs 10 23
SBDD
DB link
Fiecare baza de date
intr-un sistem
distribuit este
identificat unic prin
acest nume global.
Baza de date
formeaza numele
global prin prefixarea
domeniului retelei
bazei de date
respective, specificat
de parametrul de
initializare
DB_DOMAIN la
crearea bazei de
date, cu numele
individual al bazei de
date, specificat de
parametrul de
initializare
DB_NAME.
Ex:
mfg.division3.acme_t
ools.com

Curs 10 24
SBDD
Nume dblink-uri
Uzual, un dblink are acelasi nume ca numele global al bazei de date remote
care este referita. De exemplu, la sales.us.oracle.com, dblink-ul va fi
sales.us.oracle.com.
Atunci cand parametrul de initializare GLOBAL_NAMES este setat TRUE,
baza de date asigura ca numele dblink-ului este acelasi cu al bazei de date
remote. De exemplu, daca numele global al unei baze de date hq este
hq.acme.com si GLOBAL_NAMES este TRUE, atunci link-ul este
hq.acme.com. A se retine faptul ca baza de date verifica partea domeniu a
numelui global asa cum este stocat in dictionar, nu si setarea DB_DOMAIN
din fisierul de initializare al parametrilor.
Daca parametrul GLOBAL_NAMES este setat FALSE, atunci nu este
necesara utilizarea denumirii globale. Astfel, dblink-ul poate avea orice
nume. O recomandare Oracle este de a utiliza numele global, deoarece
multe optiuni, incuzand replicarea, necesita nume globale.
Dupa activarea numelor globale, dblink-urile sunt transparente utilizatorilor
unui sistem de baze de date distribuite.
De exemplu, urmatorul query creaza un dblink intr-o baza de date locala
pentru baza de date remote sales:
CREATE PUBLIC DATABASE LINK sales.divisional3.acme.com USING
SALES;
Curs 10 25
SBDD
Tipuri de conexiuni intre baze de date
Private. Utilizatorul care a creat conexiunea vede datele detinute prin:
DBA_DB_LINKS, ALL_DB_LINKS, USER_DB_LINKS. Creaza o
conexiune intr-o anumita schema a bazei de date locale. Doar
administratorul unui dblink privat sau al unui subprogram PL/SQL
din schema poate utiliza aceasta conexiune pentru a accesa
obiectele corespunzatoare bazei de date remote.
Public. Utilizator numit PUBLIC. Conexiune database-wide.Toti
utilizatorii si subprogramele PL/SQL din baza de date pot utiliza
conexiunea pentru a accesa obiectele din baza de date remote
corespunzatoare.
Global. Utilizator numit PUBLIC. Conexiune network-wide. Cand o
retea Oracle utilizeaza un server director, acesta creaza automat si
intretine dblink-urile globale. Utilizatorii si subprogramele PL/SQL
din orice baza de date pot utiliza o conexiune globala pentru a
accesa obiectele din baza de date remote corespunzatoare.
Curs 10 26
SBDD
Tipuri de utilizatori - conexiuni
Connected user. Un utilizator local ce acceseaza un dblink in care
nu a fost specificat nici un user sau parola fixata. Daca SYSTEM
acceseaza o conexiune publica intr-un query, atunci uilizatorul la
baza de date remote va fi SYSTEM. Ex: CREATE PUBLIC
DATABASE LINK hq USING 'hq';
Current user. Un utilizator global intr-un dblink CURRENT_USER.
Utilizatorul global trebuie autentificat de un certificat SSL sau o
parola si trebuie sa fie utilizator al ambelor baze de date ale
conexiunii. Acesta este un aspect al optiunii de securitate avansata
ORACLE. Ex: CREATE PUBLIC DATABASE LINK hq CONNECT
TO CURRENT_USER using 'hq';
Fixed user. Un utilizator ale carui nume si parola sunt precizate in
definitia conexiunii. Daca o conexiune include un fixed user, atunci
numele utilizatorului si parola vor fi folosite pentru conectarea la
baza de date remote. Ex: CREATE PUBLIC DATABASE LINK hq
CONNECT TO ioana IDENTIFIED BY acm1 USING 'hq';
Curs 10 27
SBDD
Denumirea obiectelor unei scheme
utilizand dblink-uri
Oracle utilizeaza numele global pentru a denumi global obiecte ale unei
scheme utilizand urmatorul tipar:
schema.schema_object@global_database_name
Unde:
schema colectie de structuri de date logice, sau obiecte ale
schemei. O schema este detinuta de un utilizator al bazei de date si
are acelasi nume ca acel utilizator. Fiecare utilizator detine o
singura schema.
schema_object o structura de date logica, precum tabel, index,
view, sinonim, procedura, pachet sau dblink
global_database_name numele care identifica in mod unic o baza
de date remote. Acest nume trebuie sa fie la fel ca si concatenarea
intre parametrul de initializare al bazei de date remote DB_NAME si
DB_DOMAIN.
Curs 10 28
SBDD

Ex:
SELECT * FROM mihai.emp@sales.division3.acme.com;
SELECT loc FROM mihai.dept@sales.division3.acme.com;
Autorizarea pentru accesarea obiectelor unei scheme remote
Pentru a accesa obiectele unei scheme remote, utilizatorul trebuie
sa aiba acces la obiectele remote.
Pentru operatii update, insert sau delete la un obiect remote,
utilizatorul trebuie sa aiba privilegiile: SELECT si UPDATE, INSERT
sau DELETE pe obiectul respectiv.
Spre deosebire de accesarea obiectelor locale, privilegiul de
SELECT este necesar pentru accesarea obiectelor remote intrucat
baza de date nu are capabilitatea de descriere remote.
Obs: Trebuie facut SELECT * pe obiectul remote pentru a determina
structura acestuia.
Curs 10 29
SBDD
Restrictii dblink
Nu se pot efectua urmatoarele operatii utilizand dblink:
Acordarea privilegiilor pentru obiecte remote
Executarea operatiilor DESCRIBE pe anumite obiecte remote. Urmatoarele
obiecte remote suporta insa operatii DESCRIBE:
Tabele
View-uri
Proceduri
Functii
Analiza obiectelor remote
Definirea sau fortarea integritatii referentiale
Acordarea de roluri utilizatorilor intr-o baza de date remote
Obtinerea de roluri non-default intr-o baza de date remote (nu se poate
folosi SET ROLE pentru obtinerea rolurilor non-default)
Executarea de cereri ce utilizeaza conexiuni shared ale serverului
Folosirea unui utilizator curent fara autentificare prin SSL sau macar parola.
Curs 10 30
SBDD
Caracteristici aplicatii distribuite Oracle
Transparenta in sistemele de baze de date distribuite Oracle
Prin transparenta un sistem distribuit apare ca si cand ar fi o singura baza
de date Oracle.
Transparenta localizarii, adica ascunderea localizarii fizice a obiectelor
bazei de date fata de aplicatie si utilizatori.
Accesul la datele remote este simplu, deoarece utilizatorii nu au nevoie
sa stie locatia fizica a obiectelor bazei de date;
Administratorii pot muta obiectele fara a afecta utilizatorii sau aplicatiile
existente.
Adiministratorii si programatorii utilizeaza sinonime pentru a asigura
transparenta locatiei pentru tabele si obiectele din schema aplicatiei. Ex:
CREATE PUBLIC SYNONYM emp FOR
scott.emp@sales.us.americas.acme_auto.com;
CREATE PUBLIC SYNONYM dept FOR
scott.dept@sales.us.americas.acme_auto.com;

Curs 10 31
SBDD
Exemple cereri
Query fara sinonim:
SELECT ename, dname
FROM scott.emp@sales.us.americas.acme_auto.com e,
scott.dept@sales.us.americas.acme_auto.com d
WHERE e.deptno = d.deptno;
Query cu sinonim:
SELECT ename, dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
Curs 10 32
SBDD
Transparenta pentru cereri si tranzactii
Instructiunile SQL standart precum SELECT, INSERT, UPDATE si DELETE
functioneaza la fel ca intr-un sistem centralizat.
Acelasi lucru este valabil si pentru tranzactii: COMMIT, SAVEPOINT si
ROLLBACK. Nu este nevoie de operatii speciale pentru a asigura controlul
tranzactiilor in medii distribuite.
O tranzactie poate referi oricate tabele locale sau remote
Oracle asigura ca la toate nodurile implicate intr-o tranzactie distribuita se
realizeaza acceasi actiune
Daca apare o eroare de retea sau de sistem in timpul unei operatii commit
intr-o tranzactie distribuita exista un mod de rezolvare automata. La
repornire, toate nodurile ori realizeaza operatia de commit ori pe cea de
rollback a tranzactiei.
Fiecare tranzactie de commit are asociat intern un SCN (system change
number) ce indentifica in mod unic modificarile realizate prin tranzactie.
Curs 10 33
SBDD

SCN-urile nodurilor ce comunica sunt coordonate cand:
Este realizata o conexiune folosind calea descrisa de unul sau mai multe
dblink-uri
Este executata o operatie SQL distribuita
Este comisa o tranzactie distribuita
Programatorii pot utiliza pachete PL/SQL sau proceduri pentru
aplicatii ce folosesc baze de date distribuite. Aplicatiile pot accesa
local procedurile pentru a lucra cu baza de date locala si RPC pentru
a lucra cu baza de date remote.
Cand un program apeleaza o procedura remote, serverul local
paseaza toti parametrii procedurii catre serverul remote.
Exemplu, in urmatorul program PL/SQL se transmite parametrul 1257:
BEGIN
emp_mgmt.del_emp@sales.us.americas.acme_auto.com(1257);
END;
Pentru un RPC, procedura apelata trebuie sa existe pe serverul
remote, iar utilizatorii sa aiba privilegiile de a executa acea
procedura
Curs 10 34
SBDD
Optimizarea cererilor distribuite
Optimizarea cererilor distribuite este o facilitate oferita de Oracle
pentru a reduce cantitatea de date transferata intre servere, atunci
cand o tranzactie aduce date dintr-o tabela remote referita intr-o
instructiune distribuita SQL.
Pentru optimizare se utilizeaza DRIVING_SITE, NO_MERGE si
INDEX, pentru a controla unde se proceseaza datele si cum sunt
accesate intr-un sistem distribuit Oracle.
DRIVING_SITE, forteaza executia cererii la un site selectat de
utilizator nu selectat de baza de date.
NO_MERGE, spune optimizatorului sa nu combine alte cereri si alte
vederi intr-o singura cerere.
Curs 10 35
SBDD
Tranzactii distribuite
O tranzactie distribuita include una sau mai multe instructiuni care, individual sau
grupate, modifica date in doua sau mai multe noduri distincte ale unei baze de date
distribuite
Curs 10 36
SBDD

Ex: tranzactie distribuita executata de utilizatorul scott modifica baza de date
locala sales, baza de date remote hq si baza de date remote maint:
UPDATE scott.dept@hq.us.acme.com
SET loc = REDWOOD SHORES
WHERE deptno = 10;
UPDATE scott.emp
SET deptno = 11
WHERE deptno = 10;
UPDATE scott.bldg@maint.us.acme.com
SET room = 1225
WHERE room = 1163;
COMMIT;
Daca toate instructiunile unei tranzactii sunt adresate unui singur nod
remote, tranzactia se numeste tranzactie remote nu distribuita.
Exista doua tipuri de operatii premise in tranzactiile distribuite:
Tranzactii DML si DDL
Instructiuni de control al tranzactiilor

Curs 10 37
SBDD

Operatii DML si DDL permise intr-o tranzactie distribuita:
CREATE TABLE AS SELECT
DELETE
INSERT
LOCK TABLE
SELECT
SELECT FOR UPDATE
Se pot executa instructiuni DML si DDL in parallel cu urmatoarele restrictii:
Toate operatiile remote trebuie sa fie instructiuni SELECT.
Aceste instructiuni nu trebuie sa fie clauze in alta tranzactie distribuita.
Daca tabela referentiata in table_expression_clause al unui INSERT,
UPDATE sau DELETE este remote, executia este mai degraba seriala
decat paralela.
Nu se pot efectua operatii remote dupa initierea operatiilor paralele
DML/DDL sau INSERT
Nu se poate efectua nici o operatie recursiva pe tranzactia initiata de
operatia paralela. De exemplu, nu se poate referi un obiect remote care
este de fapt sinonimul unui obiect local.
Daca se efectueaza o operatie distribuita alta decat un SELECT in
tranzactie, nici un DML nu este paralelizat.

Curs 10 38
SBDD
Control tranzactii
Pentru controlul tranzactiilor sunt utilizate:
COMMIT
ROLLBACK
SAVEPOINT
Arbori de sesiune pentru tranzactiile distribuite
Pe masura ce sunt executate instructiunile dintr-o tranzactie distribuita,
baza de date isi defineste un arbore de sesiune al tuturor nodurilor
participante la tranzactie. Un arbore de sesiune este un model ierarhic care
descrie relatia dintre sesiuni si rolul acestora.
Toate nodurile participante in arborele de sesiune al unei tranzactii
distribuite indeplinesc unul sau mai multe dintre urmatoarele roluri:
Client. Un nod care referentiaza informatia dintr-o baza de date
apartinand altui nod.
Server. Un nod care primeste cereri de informatii de la un alt nod.
Coordonator global. Nodul care initiaza tranzactia distribuita.
Coordonator local. Un nod care este obligat sa referentieze date situate
in alte noduri pentru a-si completa partea sa din tranzactie.
Commit point site. Nodul care face commit sau rollback pe tranzactie in
functie de cerintele coordonatorului global.
Curs 10 39
SBDD
Client un nod actioneaza ca un client
Database Servers. Nod ce gazduieste baza referita de client
Coordonator local. Nod care trebuie sa refere date de la alte
noduri ca parte a unei tranzactii distribuite. Este responsabil de
coordonarea tranzactiei cu nodurile cu care comunica:
Receptia starii tranzactiei de la acele noduri
Transmiterea cererilor la aceste noduri
Receptia cererilor de la noduri si inaintarea lor la alte noduri
Returnarea rezultatelor la nodurile initiatoare
Coordonator global. Nodul care initiaza tranzactia distribuita.
Coordonatorul global devine radacina arborelui sesiune si
efectueaza urmatoarele operatii:
Trimite RPC la nodurile referite
Instruieste toate nodurile referite in afara de commit point site sa faca
prepararea tranzactiei
Instruieste commit point site sa initieze commit global daca toate
nodurile raspund cu succes la preparare
Instruieste toate nodurile sa faca rollback global la tranzactie daca
exista un raspuns de abort
Curs 10 40
SBDD
Commit Point Site. Rol de a initia commit sau rollback dupa
instructiunile coordonatorului global. Administratorul asociaza o
pondere astfel ca nodul cu date critice sa fie selectat commit point
site. Un astfel de nod nu intra in prepare si este realizata inaintea
altor noduri pentru a putea fi usor revocata.
O tranzactie este distribuita daca include una sau mai multe instructiuni
care individual sau in grup actualizeaza date la doua sau mai multe
locatii. De exemplu tranzactia:
UPDATE scott.dept@sales.us.americas.acme_auto.com
SET loc = 'NEW YORK'
WHERE deptno = 10;
UPDATE scott.emp
SET deptno = 11
WHERE deptno = 10;
COMMIT;
Curs 10 41
SBDD
Tranzactii in doua faze
Spre deosebire de tranzactiile din baze de date locale tranzactiile
distribuite sunt mult mai complexe. Fie intreaga tranzactie este commit
fie rollback.
Asigurarea integritatii datelor utilizand mecanismul two-phase commit.
Faza prepare, nodul initiator cere altor noduri sa asigure commit sau
rollbacl la tranzactie
In faza commit, modul initiator cere tuturor participantilor sa comita
tranzactia. Daca nu este posibil la toate nodurile se cere rollback.
Monitorizare automata a efectuarii tranzactiilor distribuite pentru a
mentine integritatea datelor, mecanism cvomplet transparent fara sa
ceara programare de catre utilizator.
Mecanismul commit:
Faza preparare coordonatorul global cere tuturor participantilor in afara
de commit point site sa asigure commit sau rollback
Faza commit daca toti participantii raspund la preparare va cere la
commit point site operatia de commit. Dupa ce acesta face commit cere
la toate celelalte noduri sa commita tranzactia.
Faza forget coordonatorul global uita de tranzactie.
Curs 10 42
SBDD
Raspuns prepare
Cand un nod primeste prepare el poate raspunde:
Mesaj prepared. Nodul a inregistrat schimbarea in online log asa ca
este pregatit pentru commit sau rollback.
Raspuns Read-Only. Daca nodul solicitat nu necesita afectarea
datelor stocate ci doar selectii SQL. Ca urmare nodul nu participa la
faza de commit.
Raspuns Abort. Atunci cand nodul nu poate face prepared cu
succes va executa actiunile:
Elibereaza resursele pastrate pentru tranzactie si face rollback pentru
portiunea locala a tranzactiei.
Raspunde la nodul care la referit intr-o tranzactie distribuita cu un mesaj
abort.
Aceste actiuni se propaga la alte noduri pentru a face rollback la
tranzactii in scopul pastrarii integritatii globale. Ca urmare fie toate
nodurile commit, fie toate rollback la acelasi moment de timp logic.
Curs 10 43
SBDD
Pasi in faza prepare
Toate nodurile in afar de commit point site realizeaza urmatorii pasi:
Cere nodurilor descendente prepare to commit.
Nodul verifica daca afecteaza date ce ii apartin sau nu (raspunde cu
read-only).
Daca afecteaza datele detinute aloca resursele pentru commit
tranzactie.
Salveaza redo records corespunzand modificarilor facute de
tranzactie in redo log.
Nodul garanteaza ca blocarile pentru tranzactie sunt capabile sa
preintampine defectarile.
Nodul raspunde initiatorului cu prepared response daca s-a produs,
sau cu abort daca unul din descendentii sai nu poate face prepare
cu succes.
Actiunile garanteaza commit sau rollback la nod si asteapta pana
primeste COMMIT sau ROLLBACK de la coordonatorul global.

S-ar putea să vă placă și