Un instantaneu este un tabel care contine rezultatele unei interogari asupra unuia sau mai multor tabele, numite tabele principale (master tables), sau vederi care în general sau gasesc într-un nod situat la distanta. In esenta, instantaneul este o copie locala a 13113r1716n unei baze de date situate la distanta. Una dintre caracteristicile instantaneului este ca acesta reprezinta o imagine statica a datelor, de unde si numele de instantaneu.
Un instantaneu este un tabel read-only. Instantaneul nu poate fi actualizat; numai tabelele principale pot fi actualizate. Odata ce datele au fost surprinse în instantaneu, ele vor ramâne neschimbate pâna în momentul în care vor fi reîmprospatate de ciclul de reîmprospatare al instantaneului. Aceasta înseamna ca daca tabelele principale se modifica, instantaneul nu va reflecta aceste modificari pâna când nu este reîmprospatat.
În reprezentarea interna a serverului Oracle, un instantaneu este o colectie de obiecte ale schemei. Pentru utilizatori, aceste obiecte functioneaza împreuna dând impresia prezentei unui singur obiect - tabelul instantaneu. Printre obiectele create în timpul crearii unui instantaneu se numara urmatoarele:
În nodul situat la distanta, este creat un tabel de baza care urmeaza sa pastreze rezultatele interogarii care defineste instantaneul.
Este creata o vedere read-only bazata pe acest tabel de baza care va fi utilizata atunci când sunt interogate tabelele de baza.
În nodul local, este creata o vedere bazata pe tabelele principale care va fi utilizata în timpul procesului de reîmprospatare periodica a instantaneului.
în general, pentru datele din nodurile situate la distanta care sunt accesate frecvent, este creata o copie (replica) în baza de date locala. Existând aceasta copie locala a 13113r1716n datelor, numita instantaneu, baza de date distribuita nu trebuie sa transmita datele prin intermediul retelei în mod repetat; în acest fel se reduce traficul în retea si se îmbunatatesc performantele aplicatiei, în plus, instantaneul va protejeaza împotriva pierderii accesului la baza de date situata la distanta, punându-va întotdeauna la dispozitie o copie locala a 13113r1716n datelor. De exemplu, daca ati fi copiat datele cu comanda select, ati fi ramas în pana în cazul caderii retelei care va conecteaza la baza de date sursa. Prin contrast, un instantaneu local al datelor va da posibilitatea sa continuati lucrul, indiferent de starea retelei.
Instantaneele va ofera cele mai mari avantaje în urmatoarele situatii:
Atunci când tabelele principale sunt actualizate rar, însa sunt accesate masiv
Atunci când tabelele principale sunt accesate de multi utilizatori situati la distanta
Creatorul aplicatiei si administratorul bazei de date trebuie sa conlucreze pentru a crea instantaneele adecvate. Existenta instantaneelor prezinta si unele dezavantaje. Pentru fiecare asociere tabel principal-instantaneu, serverul Oracle trebuie sa efectueze procesari suplimentare pentru asigurarea reîmprospatarii periodice a instantaneului. La aceasta se adauga o crestere a necesarului de spatiu de stocare datorata prezentei instantaneului. Utilizarea nerationala a instantaneelor compromite performantele serverului si ale aplicatiei, în schimb, utilizarea rationala a instantaneelor are o influenta benefica asupra performantelor acestora.
Pentru a beneficia de avantajele instantaneelor în Oracle, trebuie sa parcurgeti urmatoarele etape: crearea unui instantaneu, utilizarea instantaneului, reîmprospatarea acestuia si stabilirea privilegiilor adecvate.
În functie de complexitatea interogarii care defineste instantaneul, exista doua tipuri de instantanee: instantanee simple si instantanee complexe. Instantaneele simple interogheaza un singur tabel, pe cârid instantaneele complexe pot interoga tabele si vederi multiple.
În timpul crearii bazei de date, sunt rulate o serie de script-uri SQL care configureaza mediul necesar utilizarii instantaneelor. Aceste script-uri sunt rulate
În mod prestabilit în timpul crearii bazei de date pentru bazele de date cu optiune procedurala.
Pentru bazele de date care nu utilizeaza optiunea procedurala, trebuie sa rulati urmatoarele script-uri:
catsnap.sql
dbmssnap.sql
Aceste script-uri trebuie executate atât pe baza de date care contine tabelele principale, cât si pe baza de date care contine instantaneul.
Pentru a crea un instantaneu, folositi comanda create snapshot. Comanda urmatoare creeaza un instantaneu numit UK_ang care sa prezinte angajatii birourilor din Marea Britanie. Aceasta comanda stabileste parametrii de stocare ai instantaneului, rata de reîmprospatare a instantaneului si interogarea care defineste continutul instantaneului.
create snapshot UK_ang
pctfree 15
pctused 55
tablespace user_01
storage (
initial 50K
next 50K
pctincrease 10)
refresh fast
start with sysdate
next sysdate + l
As select * from ang@uk
Ori de câte ori este creat un instantaneu, acesta este populat cu rezultatele interogarii care defineste instantaneul. Acest instantaneu este o imagine statica a datelor pâna în momentul în care este reîmprospatat la intervalul de reîmprospatare specificat.
Instantaneele sunt create în schema utilizatorului. Numele instantaneului trebuie sa fie distinct fata de numele celorlalte obiecte din schema. Pentru a crea un instantaneu, trebuie sa posedati privilegiile de sistem create snapshot, create table si create view.
De asemenea, trebuie sa posedati privilegii select pentru tabelele principale.
Atunci când creati un instantaneu, comanda create snapshot contine o instructiune de definire a instantaneului. Aceasta instructiune poate fi orice interogare valida a unui tabel, a unei vederi sau a altui instantaneu. In cazul unui instantaneu simpju, fiecare dintre liniile acestuia se bazeaza pe un singur tabel situat la distanta, în consecinta, un instantaneu simplu nu poate sa contina nici una dintre urmatoarele elemente SQL:
Clauza group by
Clauza connect by
Subinterogari
Reuniuni
Operatori de atribuire (de tip set)
Un instantaneu complex poate fi definit ca fiind unul pentru care interogarea instantaneului contine unul sau mai multe elemente care nu sunt permise într-un instantaneu simplu.
Instantaneele simple, spre deosebire de cele complexe, tind sa fie mai eficiente atunci când sunt reîmprospatate, însa în general sunt mai lente în timpul executiei interogarii. Instantaneele complexe sunt de obicei mai eficiente în timpul executiei interogarii, însa nu la fel de eficiente ca instantaneele simple în timpul executiei reîmprospatarii.
Modul de stocare a instantaneului trebuie stabilit pentru a asigura un spatiu disponibil adecvat, în general, necesitatile de spatiu de stocare pentru im instantaneu sunt comparabile cu cele ale tabelului principal. Daca instantaneul nu contine toate coloanele tabelului principal, modificati parametrii de stocare ai instantaneului în mod corespunzator.
si în cazul unui instantaneu complex necesitatile de stocare ar trebui sa fie identice cu cele ale tabelului principal. Singura diferenta este ca parametrului pctfree al unui instantaneu complex trebuie sa i se atribuie valoarea O, iar parametrului pctused valoarea 100 pentru a obtine eficienta maxima în timpul reîmprospatarii complete.
Instantaneele sunt accesate la fel ca tabelele si vederile. De exemplu, urmatoarea instructiune interogheaza instantaneul dept:
select nr_dept, nume_dept from dept
Instantaneul este un obiect read-only; în consecinta acesta nu poate face obiectul instructiunilor update, insert sau delete. Aveti în vedere faptul ca tabelele principale ale unui instantaneu pot sa sufere modificari în mod continuu. Instantaneul nu va reflecta aceste modificari decât în momentul în care survine o operatie de reîmprospatare.
Puteti defini o vedere sau un sinonim bazate pe un instantaneu. Instructiunea urmatoare creeaza sinonimul emp bazat pe instantaneul UK_ANG:
create synonym emp FOR uk_ang:
Jurnalele instantaneelor sunt folosite pentru diminuarea cantitatii de procesari si timpului necesar efectuarii unei reîmprospatari a instantaneelor simple. Jurnalefe instantaneelor sunt folosite exclusiv pentru instantaneele simple.
Jurnalul instantaneului este un tabel care este asociat cu tabelul principal al instantaneului. Acest tabel tine evidenta modificarilor datelor tabelului principal. Oracle adauga în tabelul-jurnal al instantaneului linii care descriu modificarile tabelului principal. Ulterior, atunci când are loc o reîmprospatare, sistemul Oracle utilizeaza liniile acestui tabel pentru reîmprospatarea rapida a instantaneului. Procesul de reîmprospatare a instantaneului pe baza jurnalului instantaneului se numeste reîmprospatare rapida. Reîmprospatarea fara utilizarea jurnalului instantaneului înseamna re-executarea interogarii de definire a instantaneului si este cunoscuta sub numele de reîmprospatare completa.
Jurnalul instantaneului este stocat în aceeasi schema ca si tabelul principal al instantaneului. Puteti crea un singur jurnal de instantaneu pentru un tabel principal. De aceea, daca aveti mai multe instantanee simple create prin interogarea aceluiasi tabel, toate aceste instantanee vor utiliza în comun acelasi jurnal de instantaneu.
Jurnalele de instantaneu sunt create folosind comanda create snapshot. Ca si în cazul declaratiei instantaneului, trebuie sa specificati parametrii de stocare ai jurnalului. Exemplul urmator creeaza un jurnal pentru instantaneul UK_ANG:
create snapshot log on UK_ang
tablespace ang_01
storage (initial 20k next 20k pctincrease 25);
Daca sunteti proprietarul tabelelor principale, trebuie sa posedati privilegiile de sistem create table si create trigger pentru a crea un jurnal al instantaneului. Daca tabelele principale se gasesc în alta schema, trebuie sa posedati privilegiile de sistem create any table si create any trigger
Cu timpul, jurnalul instantaneului va atinge dimensiuni foarte mari si va avea alocate multe extinderi. Golirea jurnalului prin eliminarea liniilor nu reduce cantitatea de spatiu alocat jurnalului. Pentru a reduce spatiul alocat, trebuie fie sa goliti, fie sa distrugeti jurnalul, dupa care sa-1 re-creati. Programul Oracle poseda o procedura stocata în pachetul drop_snapshot care goleste jurnalul. De exemplu, comanda urmatoare elimina din instantaneu liniile utilizate pentru cele mai vechi (mai putin recente) trei instantanee reîmprospatate. execute dbms-snapshot.purge_log('master_table', 3, 'DELETE');
Daca trunchiati un jurnal de instantanee, prima reîmprospatare care urmeaza a fi efectuata trebuie sa fie o reîmprospatare completa. In continuare, pot fi reluate reîmprospatarile rapide.
Orice utilizator poate vida un instantaneu prin executarea procedurii purge_log daca poseda privilegiul de sistem dele t e any table.
Pentru a îmbunatati performanta unei interogari a unui instantaneu, trebuie sa creati un index pentru una (oricare) dintre coloanele instantaneului. Pentru a crea indexul, trebuie sa utilizati tabelul de baza snap$. . . creat pentru pastrarea liniilor instantaneului. Exemplul urmator creeaza un index pentru coloana nr_dept a instantaneului UK_EMP: create index i uk ang on snap$uk_emp (nr_dept);
Conform definitiei anterioare, un instantaneu este o imagine statica a tabelului principal al acestuia. Instantaneul nu valoreaza cine stie ce daca tabelul de baza se modifica, în practica, tabelele de baza se modifica frecvent. Iata de ce instantaneul trebuie actualizat cu date proaspete pentru a reflecta fidel tabelele principale. Procesul de actualizare a instantaneului se numeste reîmprospatarea instantaneului. Folosind clauza refresh în comanda create snapshot, specificati intervalul de timp si modul în care programul Oracle va reîmprospata automat instantaneul.
Pentru a permite programului Oracle sa efectueze reîmprospatarea automata, trebuie parcurse urmatoarele etape:
Specificati parametrii start with si next în instructiunea create snapshot. Clauza start with stabileste momentul primului ciclu de reîmprospatare automata. Clauza next defineste intervalul dintre reîmprospatarile automate.
Sistemul Oracle evalueaza parametrii start with si next si stocheaza aceste informatii în dictionarul de date. Rezultatul evaluarii parametrilor start with si next trebuie sa reprezinte momente oarecare în viitor; în caz contrar, va fi generata o eroare.
Exemplul urmator ilustreaza instructiunea care creeaza un instantaneu simplu. Aceasta instructiune specifica faptul ca instantaneul va fi reîmprospatat a doua zi la ora 9 a.m. si în continuare în fiecare luni la ora 3 a.m.
create snapshot principal_ang
pctfree 15
pctused 25
tablespace user_03
storage (initial 50k next 50k pctincrease 10)
refresh start with round(sysdate + 1) + 9/24
fast next (trunc(sysdate, 'monday1) + 3/24
as select * from ang;
Puteti modifica timpul si modul de reîmprospatare prin folosirea comenzii alter snapshot. Exemplul urmator modifica modul de reîmprospatare la fast (rapid) pentru instantaneul principal_articole:
alter snapshot principal_articole mode fast;
Cele doua moduri de reîmprospatare disponibile sunt fast si complete. Pentru a efectua o reîmprospatare rapida, programul Oracle utilizeaza informatiile din jurnalul instantaneului pentru a actualiza instantaneul. Acesta este modul mai rapid de reîmprospatare. Reîmprospatarea rapida are loc numai daca urmatoarele afirmatii sunt adevarate:
Instantaneul este un instantaneu simplu
Tabelul principal poseda un jurnal de instantanee
Jurnalul de instantanee a fost creat înainte de crearea sau de ultima reîmprospatare a instantaneului
Daca oricare dintre afirmatiile anterioare este falsa, programul Oracle nu efectueaza reîmprospatarea si returneaza un mesaj de eroare.
în timpul unei reîmprospatari complete programul Oracle executa interogarea de definire a instantaneului si plaseaza rezultatele în instantaneu. Acest mod de reîmprospatare este în general mai lent decât reîmprospatarea rapida deoarece este preluat întregul continut al tabelelor principale, este transmis prin retea si plasat în baza de date a instantaneului.
Puteti de asemenea sa specificati optiunea f or ce a instructiunii ref resh pentru a permite programului Oracle'sa decida în momentul reîmprospatarii care este modul optim de reîmprospatare. Daca este posibila o reîmprospatare rapida, programul Oracle va o va efectua automat; în caz contrar, programul va efectua o reîmprospatare completa.
Pentru a elimina un instantaneu din schema dumneavoastra, lansati comanda drop snapshot
drop snapshot uk_emp;
Daca instantaneul este un instantaneu simplu, toate informatiile din jurnalul de instantanee necesare reîmprospatarii instantaneului distrus sunt eliminate. Distrugerea instantaneului duce salvarea tuturor modificarilor aferente în baza de date a instantaneului.
Atunci când distrugeti numai tabelele principale ale unui instantaneu, programul Oracle nu distruge automat instantaneul bazat pe aceste tabele. De aceea, atunci când programul va încerca sa efectueze urmatoarea reîmprospatare, va surveni o eroare întrucât tabelele principale au fost eliminate.
Puteti distruge orice instantaneu din schema dumneavoastra; pentru a distruge alte instantanee, trebuie sa posedati privilegiul de sistem drop any snapshot.
Pentru a distruge un jurnal de instantanee, lansati comanda drop snapshot log. Exemplul urmator distruge jurnalul de instantanee asociat tabelului PRINCIPAL_ANG
drop snapshot log on principal-ang;
Dupa ce ati distrus jurnalul de instantanee, programul Oracle nu mai poate efectua o reîmprospatare rapida. Instantaneul va trebui reîmprospatat complet.
Pentru a distruge un jurnal de instantanee din schema altui utilizator, trebuie sa posedati privilegiile de sistem drop any table si drop any trigger.
Ati aflat ca un instantaneu este un tabel care contine rezultatele unei interogari asupra unuia sau mai multor tabele. Acest tabel rezultant pastreaza o imagine statica a datelor din tabelele principale. Programul va permite sa reîmprospatati datele instantaneului la intervale regulate.
Instantaneele prezinta avantajul accesului rapid la date situate la distanta. De asemenea, ele va protejeaza datele prin reproducerea în instantaneul dumneavoastra a unor date situate la distanta. Aceasta caracteristica va protejeaza împotriva pierderii datelor în cazul caderii retelei.
Instantaneele sunt create la fel ca tabelele, însa cu o serie de parametri suplimentari care specifica necesitatile de stocare si perioada ciclului de reîmprospatare. Accesarea instantaneelor este asemanatoare accesarii tabelelor.
|