Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Componentele arhitecturii Oracle
Obiective:
Enumerarea structurilor implicate in conectarea unui utilizator la un server Oracle
Enumerarea stadiilor procesarii unei interogari
Enumerarea stadiilor procesarii unei instructiuni DML
Enumerarea stadiilor procesarii unei instructiuni COMMIT
Un utilizator al bazei de date se poate conecta la un server Oracle prin una din urmatoarele modalitati:
Prin logare directa la masina gazda (cea pe care ruleaza serverul Oracle);
Folosind o conexiune pe doua niveluri (client-server), atunci cind masina la care utilizatorul s-a logat este conectata direct la masina pe care ruleaza serverul Oracle (d.ex. un utilizator ce ruleaza o aplicatie Developer/2000 pe un pc sub Windows 95, acceseaza o baza de date de pe un server NT);
Folosind o conexiune pe trei niveluri, atunci cind masina utilizatorului comunica cu o aplicatie server sau un server de retea, iar acestea sint conectate prin retea la masina pe care ruleaza serverul Oracle.
Utilizatorii lanseaza comenzi SQL folosind un utilitar ca SQL*Plus sau folosind o aplicatie ce contine comenzi SQL. Serverul Oracle proceseaza comenzile si returneaza rezultatele utilizatorilor.
Pentru ca un utilizatorul sa poata comunica cu serverul Oracle, trebuie sa stabileasca o conexiune cu baza de date. Pasii pentru a realiza o conexiune cu baza de date sint urmatorii:
Utilizatorul porneste un utilitar ca SQL*Plus sau ruleaza o aplicatie dezvoltata cu un utilitar ca Developer/2000 Forms. Ca urmare este creat un proces utilizator. Intr-un model client-server, aplicatia sau utilitarul ruleaza pe masina client.
In configuratia elementara, autunci cind utilizatorul se logheaza la serverul Oracle specificind un nume de utilizator, o parola si o baza de date, un proces este creat pe masina pe care ruleaza serverul Oracle, procesul server. Acesta comunica cu serverul Oracle pentru procesul utilizator ce ruleaza pe client.
O conexiune este o cale de comunicare intre un proces utilizator si un server Oracle. Daca utilizatorul ruleaza utilitarul sau aplicatia pe aceeasi masina pe care ruleaza serverul Oracle, calea de comunicare este stabilita folosind mecanismele de comunicare interprocese disponibile pe masina. Daca utilizatorul ruleaza utilitarul pa o masina client, softul de retea este folosit pentru comunicarea intre utilizator si serverul Oracle folosind reteaua.
O sesiune este o conexiune specifica a unui utilizator la un server Oracle. Sesiunea incepe cind utilizatorul este validat de serverul Oracle si se termina atuci cind utilizatorul executa logout sau apare o terminare anormala. Pentru un anume utilizator al bazei de date sint posibile mai multe sesiuni concurente daca utilizatorul se logheaza din mai multe utilitare, aplicatii sau terminale in acelasi timp. Cu exceptia citorva utilitare specializate pentru administrarea bazei de date, pentru pornirea unei sesiuni este necesar ce serverul Oracle sa fie disponibil pentru folosire.
Mesajul de eroare "ORA-01304: Oracle not available" apare atunci cind un utilizator sau o aplicatie incearca sa se conecteze la un server Oracle ce nu este disponibil pentru folosire. Pentru aceasta DBA-ul trebuie sa porneasca serverul Oracle.
Ruleaza pe masina client
Este creat cind un utilitar sau o aplicatie este apelata
Include interfata de program utilizator (UPI)
Genereaza apeluri catre serverul Oracle
Un proces utilizator, denumit client, are urmatoarele proprietati:
Este creat atunci cind un utilizator ruleaza un utilitar sau o aplicatie ca d.ex. SQL*Plus, Server Manager sau o aplicatie Developer 2000;
Ruleaza pe client (masina la care utilizatorul s-a logat);
Este pornit cind este pornit utilitarul si este terminat cind este lansat exit sau cind este fortat sa se opreasca;
Folosind UPI, genereaza apeluri catre serverul Oracle ori de cite ori utilizatorul face o cerere.
Ruleaza pe masina serverului Oracle
Deserveste un singur proces utilizator intr-o configuratie cu server dedicat
Foloseste o PGA exclusiva
Include interfata program Oracle (OPI)
Proceseaza apelurile generate de client
Returneaza rezultatele clientului
Procesul server are urmatoarele caracteristici:
Ruleaza pe aceeasi masina cu serverul Oracle;
In cea mai simpla configuratie, cea cu server dedicat, orice proces server deserveste un singur proces utilizator. Procesul server este creat cind utilizatorul cere o conexiune si se incheie in general atunci cind utilizatorul se deconecteaza.
Orice proces server foloseste o zona de memorie denumita Program Global Area (PGA), descrisa in continuare.
Procesul server foloseste OPI (Oracle Program Interface) pentru a comunica cu serverul Oracle la cererea procesului utilizator.
Procesul server returneaza informatii de stare si rezultate procesului utilizator.
Instanta Oracle:
Este calea prin care este accesata o baza de date Oracle
Intotdeauna deschide o baza de date si numai una
Serverul Oracle consta intr-o instanta Oracle si o baza de date Oracle. O instanta Oracle consta intr-o structura de memorie denumita System Global Area (SGA) si procesele de background folosite de serverul Oracle pentru administrarea bazei de date. O instanta Oracle, identificata prin setarea varibilei de mediu ORACLE_SID la nivelul sistemului de operare, poate deschide si folosi o singura baza de date la un moment dat.
Structurile de memorie ale unei instante Oracle sint continute intr-o regiune de memorie denumita SGA care contine date si informatii de control pentru serverul Oracle. SGA este alocata in memoria virtuala a masinii in care rezida serverul Oracle. Cuprinde citeva structuri de memorie printre care:
Shared pool: folosita pentru a stoca informatii ca d.ex. comanda SQL cea mai recent executata sau datele din dictionarul de data cele mai recent folosite.
Database buffer cache: folosita pentru a stoca datele cele mai recent folosite.
Redo log buffer: folosit pentru a inregistra schimbarile efectuate asupra bazei de date prin intermediul instantei.
Procesele de background ale unei instante Oracle indeplinesc functiuni necesare pentru deservirea in mod concurent a cererilor venite de la diversi utilizatori, fara a compromite integritatea si performantele intregului sistem. O instanta Oracle poate folosi citeva procese de background, depinzind de configuratie, dar fiecare instanta cuprinde in mod implicit urmatoarele cinci procese de background:
Database Writer (DBWR): responsabil pentru scrierea datelor modificate in baza de date
Log Writer (LGWR): inregistreaza modificarile consemnate in redo log buffer, in baza de date
System Monitor (SMON): a carui principala functie este verificarea consistentei si initierea refacerii bazei de date cind baza de date este deschisa
Process Monitor (PMON): elibereaza resursele ocupate de un proces daca acesta esueaza
Checkpoint process (CKPT): responsabil pentru actualizarea informatiilor de stare ale bazei de date ori de cite ori modificarile din database buffer cache sint permanent inregistrate in baza de date.
O baza de date Oracle, identificata prin numele ei (DB_NAME), reprezinta structura fizica si este formata din fisiere ale sistemului de operare. Numele ei nu trebuie sa coincida cu ce al instantei.
Fisierele ce constituie o baza de date contin datele utilizatorilor si informatii suplimentare necesare executarii corespunzatoare a operatiilor asupra bazei de date.
O baza de date Oracle contine urmatoarele tipuri de fisiere:
Fisiere de date: stocheaza dictionarul de date, obiectele utilizatorilor si imagini anterioare ale datelor modificate de tranzactiile curente. O baza de date are cel putin un fisier de date.
Fisierele de redo log: contin inregistrarea schimbarilor operate asupra bazei de date pentru a asigura reconstructia datelor in caz de esecuri. Sint necesare cel putin doua fisiere de redo log.
Fisierele de control: contin informatii necesare mentinerii si verificarii integritatii bazei de date. O baza de date necesita cel putin un fisier de control.
In afara fisierelor bazei de date, un server Oracle foloseste si alte fisiere, cum ar fi:
Fisierul de parametri: defineste caracteristicile unei instante Oracle
Fisierul de parole: folosit pentru autentificarea utilizatorilor privilegiati ai bazei de date
Fisierele de redo log arhivate: copii offline ale fisierelor de redo log ce pot fi folosite in refacerea bazei de date dupa esecuri hardware
Urmatoarele sint etapele principale in procesarea unei interogari:
Parsarea: In aceasta etapa procesul utilizator trimite o interogare procesului server impreuna cu o cerere de parsare (compilare) a interogarii. Procesul server verifica validitatea comenzii si foloseste o zona de memorie din SGA (Shared Pool) pentru a compila instructiunea. La sfirsitul acestei etape procesul server returneaza starea (succesul sau esecul fazei de parsare) procesului utilizator.
Executia: Pe durata acestei faze de procesare a interogarii, procesul server se pregateste sa aporteze datele.
Incarcarea: Pe durata acstei faze, liniile aportate de interogare sint returnate de catre procesul server, procesului utilizator. Depinzind de cantitatea de memorie necesara transferului, una sau mai multe incarcari sint necesare pentru transferul rezultatelor procesului server.
Dimensiunea data de SHARED_POOL_SIZE
Library cache contine texte de instructiuni, cod parsat si planuri de executie
Data dictionary cache contine definitii de tabele, de coloane si privilegii asupra lor
Zona de memorie shared pool este parte a SGA (System Global Area) si este folosita pe durata fazei de parsare. Dimensiunea ei este data de parametrul de initializare SHARED_POOL_SIZE din fisierul de parametri. Componentele shared pool, descrise mai jos, sint folosite pentru parsarea unei instructiuni SQL.
Library Cache stocheaza urmatoarele informatii despre cele mai recent folosite instructiuni SQL:
Textul instructiunii
Arborele de parsare, care este forma compilata a instructiunii
Planul de executie, care descrie pasii de urmat in executia instructiunii, asa cum au fost ei determinati de optimizator
Cum library cache retine aceste informatii, daca o interogare este reexecutata inainte ca planul ei de executie sa fie scos din library cache, procesul server nu are nevoie sa parseze instructiunea din nou.
Data dictionary cache, cunoscut de asemenea drept dictionary cache sau row cache, este parte a zonei shared pool si retine cele mai recent folosite informatii din dictionarul de date ca d.ex. definitii de tabele si de coloane, nume de utilizatori, parole si privilegii.
Pe durata fazei de parsare, procesul server cauta informatii in dictionary cache pentru a rezolva numele de obiecte specificate in instructiunile SQL si pentru a valida privilegiile de acces. Daca este necesar, procesul server initiaza incarcarea informatiilor din fisierele de date.
Numarul de blocuri dat de DB_BLOCK_BUFFERS
Dimensiunea unui bloc data de DB_BLOCK_SIZE
Stocheaza cele mai recent folosite blocuri
Cind o interogare este procesata, procesul server cauta blocurile necesare in database buffer cache. Daca blocul nu este gasit in database buffer cache, procesul server citeste blocul din fisierul de date in care se gaseste si depune o copie a sa in database buffer cache. Cautari ulterioare ale aceluiasi bloc ar putea sa-l gaseasca deja in memorie, nemaifiind necesara citirea fizica a lui de pe disc.
Database buffer cache, sau buffer cache, este o zona a SGA destinata stocarii celor mai recent folosite blocuri de date. Dimensiunea fiecarui bloc in buffer cache este egala cu dimensiunea unui bloc de date si este data de parametrul DB_BLOCK_SIZE. Numarul de blocuri este dat de parametrul DB_BLOCK_BUFFERS. Serverul Oracle foloseste un algoritm LRU pentru a elimina din cache bufferele ce nu au fost recent accesate pentru a face loc pentru noi blocuri in buffer cache.
Program Global Area (PGA)
Nu este partajata si nu poate fi scrisa
Contine
zona de sortare
informatii privitoare la sesiune
starea cursoarelor
spatiu stiva
Program Global Area (PGA) este o regiune de memorie ce contine informatii referitoare la un singur proces server sau la un singur proces de background. In contrast cu SGA care este partajata si scrisa de citeva procese, PGA, denumita si process global area, este o zona folosita de un singur proces. Cind configuratia folosita este cea cu server dedicat, PGA contine:
zona de sortare: folosita pentru orice sortare necesara inainte ca liniile sa fie procesate sau returnate utilizatorilor
informatii privitoare la sesiune: d.ex. privilegii utilizator pentru sesiune
starea cursoarelor: indica stadiile in procesarea diferitelor cursoare folosite curent de sesiune
spatiul stiva: contine variabilele sesiunii
PGA este alocata cind un proces este creat si dealocata cind procesul se termina.
O instructiune DML necesita doua faze de procesare:
Parsarea, similara cu faza de parsare de la procesarea unei interogari
Executia
Fie un exemplu pentru cazul in care un utilizator executa o comanda update de forma urmatoare:
UPDATE emp
SET sal=sal*1.1
WHERE empno=7369;
Pasii urmatori sint cei parcursi in executarea instructiunii DML:
Procesul server citeste blocurile de date si de rollback din fisierele de date, daca ele nu sint deja in buffer cache.
Copiile blocurilor citite sint depuse in buffer cache.
Procesul server plaseaza lacate asupra datelor.
Procesul server inregistreaza modificarile de indeplinit in rollback (imaginea anterioara) si in date (valoarea noua) in bufferul de redo log.
Procesul server inregistreaza imaginea anterioara in blocul de rollback si actualizeaza blocul de date, ambele in database buffer cache. Ambele blocuri sint marcate ca blocuri alterate (dirty buffers: bufferele nu mai coincid cu blocurile corespunzatoare lor de pe disc).
Procesarea comenzilor INSERT sau DELETE presupune pasi asemanatori. Imaginea anterioara pentru o comanda delete contine valorile coloanelor din linia stearsa, in timp ce pentru insert este necesar sa fie stocata in rollback doar informatii privind localizarea liniei inserate.
Inainte de a efectua o modificare, procesul server salveaza valoarea anterioara intr-un segment de rollback. Aceasta imagine este folosita pentru:
A anula modificarile initiate data se executa rollback pentru tranzactie
A asigura ca alte tranzactii nu vad modificari efectuate de o instructiune DML pentru care nu s-a executat commit (consistenta citirii)
A reface baza de date pina la o stare consistenta in caz de esecuri
Segmentele de rollback, ca si tabelele si indecsii, se afla in fisierele de date si parti ale lor sint aduse in database buffer cache cind este necesar.
Dimensiunea data de LOG_BUFFER
Inregistreaza modificarile facute prin intermediul instantei
Este folosit secvential
Este un buffer circular
Procesul server inregistreaza schimbarile facute prin intermediul instantei in bufferul de redo log, care este parte a SGA. Bufferul de redo log are urmatoarele caracteristici:
Dimensiunea sa in octeti este data de parametrul LOG_BUFFER.
Stocheaza inregistrari undo - anume: blocul modificat, locatia unde se face modificarea si valoarea noua. O intrare de redo inregistreaza o schimbare, dar nu face nici o distinctie referitoare la tipul de bloc care este modificat. Deci nu poate distinge d.ex. intre o modificare a unui bloc de date si o modificare a unui bloc de index sau de rollback.
Bufferul de redo log este folosit secvential si modificarile efectuate de o tranzactie se pot intretese cu modificarile facute de alte tranzactii
Este un buffer circular ce este refolosit dupa ce este umplut, dar numai dupa ce toate intrarile de redo log vechi sint inregistrate in fisierele de redo log.
Database Writer (DBWR)
Procesul server modifica blocuri de date si de rollback in database buffer cache. Procesul de background database writer (DBWR) scrie bufferele modificate din database buffer cache in fisierele de date. El asigura ca un numar suficient de buffere libere - buffere ce pot fi suprascrise atunci cind procese server au nevoie sa citeasca in ele blocuri din fisierele de date - sint disponibile in database buffer cache. Performanta bazei de date este imbunatatita pentru ca procesul server face schimbari doar in database buffer cache iar DBWR amina scrierea in fisierele de date pina cind unul din urmatoarele evenimente apare:
Numarul de buffere modificate atinge o valoare de prag.
Un proces parcurge un numar de blocuri in cautarea de buffere libere si nu gaseste nici unul.
Apare un timeout.
Apare un eveniment de checkpoint (acesta poate fi declansat de diferite evenimente cum ar fi inchiderea bazei de date). Evenimentul de checkpoint este o modalitate de a sincroniza database buffer cache cu fisierele de date.
Log Writer (LGWR)
Log writer (LGWR) este un proces de background care scrie intrarile din bufferul de redo log in fisierele de redo log in fisierele de redo log. LGWR executa scrieri secventiale in fisierele de redo log in urmatoarele situatii:
Cind bufferul de redo log este o treime plin.
Cind apare un timeout.
Inainte ca DBWR sa scrie blocurile modificate din database buffer cache in fisierele de date.
Cind o tranzactie este comisa.
Oracle foloseste un mecanism rapid de commit care asigura ca modificarile comise pot fi refacute in caz de esec.
Ori de cite ori o tranzactie este comisa, serverul Oracle ii asigneaza un numar, System Change Number (SCN), care este monoton incrementat si este unic in cadrul bazei de date. SCN este folosit de serverul Oracle ca o marca de timp interna pentru a sincroniza datele si a oferi consistenta la citire atunci cind datele sint aportate din fisierele de date. Folosirea SCN permite serverului Oracle sa faca verificari de consistenta fara a depinde de data si timpul sistemului de operare.
Cind un COMMIT este intilnit, se executa urmatorii pasi:
Procesul server depune un articol commit impreuna cu SCN in bufferul de redo log.
LGWR executa o scriere secventiala a tuturor intrarilor din bufferul de redo log pina la si incluzind inregistrarea commit in bufferul de redo log. Dupa acest punct serverul Oracle poate garanta ca modificarile nu vor fi pierdute chiar in caz de esec.
Utilizatorul este informat ca instructiunea commit este indeplinita.
Procesul server inregistreaza informatii indicind ca tranzactia este completa si ca lacatele depuse pe resurse pot fi inlaturate.
Scrierea bufferelor modificate pe disc este indeplinita independent de DBWR si poate avea loc fie inainte fie dupa commit.
Executia unui rollback pentru o tranzactie nu determina LGWR sa scrie pe disc. Serverul Oracle executa intotdeauna rollback pentru modificarile pentru care nu s-a executat commit atunci cind reface baza de date in urma unor esecuri. Daca exista un esec dupa un rollback, esec petrecut inainte ca intrarile de rollback (cele din database buffer cache) sa fie scrise pe disc, absenta unei inregistrari commit asigura ca pentru toate modificarile initiate de tranzactie se va executa rollback.
Scrierile secventiale in fisierele de redo log sint mai rapide decit scrierea in blocuri diferite in fisierele de date.
Doar informatia minimala care este necesara pentru inregistrarea modificarilor este scrisa in fisierele de log, pe cind scrierea in fisierele de date ar necesita scrierea unor blocuri intregi de date.
COMMIT scrie o singura data inregistrarile de redo log din mai multe tranzactii care cer sa fie comise in acelasi timp.
Dimensiunea unei tranzactii nu afecteaza necesarul de timp pentru executarea unei operatii COMMIT.
Context |
Referinta |
Procese |
Proces utilizator Proces server Procese de background DBWR LGWR |
Structuri de memorie |
SGA: Shared pool Database buffer cache Bufferul de redo log PGA |
Structura fizica (fisiere) |
Fisiere ale bazei de date Fisierele de date Fisierele de control Fisierele de redo log Alte fisiere Fisierul de parametri Fisierul de parole Fisierele de redo log arhivate |
Parametri |
SHARED_POOL_SIZE DB_BLOCK_BUFFERS LOG_BUFFER |
Copyright © 2024 - Toate drepturile rezervate