Sunteți pe pagina 1din 11

SERVERE DE DATE

CURS 1.
Instanta Oracle
Serverul Oracle este un sistem de gestiune a bazelor de date relaţionale şi
obiectual-relationale. El este produsul principal al firmei Oracle Corporation.
Un server Oracle consta dintr-o instant Oracle si o baza de date Oracle.
Folosirea unei baze de date:
 pornirea unei instanţe Oracle,
 montarea unei baze de date,
 deschiderea unei baze de date.
După parcurgerea acestor etape, în memoria internă:

 este alocată o zonă sistem globală (SGA - System Global Area) –


aceasta contine datele necesare pt executia instantei Oracle.
 sunt pornite anumite procese în background

Pentru fiecare proces este rezervată o zonă globală a procesului(PGA –


Program Global Area).
Zone de memorie:
1. Shared Pool - se foloseşte în timpul fazei de analiză a unei comenzi
utilizator. Se descompune în două părti:
a. Library cache - păstrează textul ultimelor comenzi utilizator,
împreună cu arborele de analiză şi planul de execuţie a comenzii.
b. Data dictionary cache - ăstrează ultimele date folosite din dicţionarul
de date (definiţii de coloane, nume şi privilegii pentru utilizatori, etc.)
2. Zona de buffere pt BD - La execuţia unei comenzi sunt necesare unele date
memorate în fişiere. Dacă ele sunt deja aici, atunci se pot folosi şi se câştigă
timp la execuţie. Dimensiunea unui buffer din această zonă este egală cu
dimensiunea unui bloc.
3. Zona de buffere pentru fişierele jurnal. O modificare în baza de date se
poate efectua imediat sau mai târziu, când se ia această decizie. Pentru a
gestiona aceste situaţii, modificările se păstrează in fişiere jurnal. Pentru
gestiunea acestor fişiere se foloseşte o zonă de buffere.
Procesele sistem care sunt lansate în execuţie la crearea unei instanţe Oracle:
 Database Writer (DBWR) - care scrie date în baza de date şi asigură accesul
concurent la baza de date
 Log Writer (LGWR) - care scrie înregistrările schimbate din baza de date
 Process Monitor (PMON) - care reface o stare implicită dacă o resursă s-a
terminat eronat
 Checkpoint process (CKPT) - care actualizează baza de date la decizia de a
păstra modificările în baza de date
 Archiver process (ARCH) - care se foloseşte pentru arhivarea fişierelor
jurnal

O bază de date are o structură fizică şi o structură logică, care se


gestionează separat.

Structura logică a bazei de date este formată din:


I. obiectele (componentele) schemei bazei de date
1. Tabele, coloane, restricţii - de la bazele de date relaţionale şi obiectual-
relaţionale
2. Indexuri
3. Tipuri de date definite de utilizatori
4. View-uri
5. Proceduri şi funcţii memorate
6. Pachete (conţin variabile, proceduri, funcţii)
7. Secvenţe
8. Sinonime
9. Declanşatoare (triggere)
10.Legături spre alte baze de date
11.Utilizatori, privilegii, roluri
12.Altele
II. unul sau mai multe spaţii pentru tabele (numite tablespace) cu urmatoarele
caracteristici:
a. O bază de date are cel puţin spaţiul tabel System unde se memorează
dicţionarul întregii baze de date (proceduri, functii, pachete, definitii
de tabele, etc.)
b. La crearea unui tabel sau index se precizează şi spaţiul tabel la care se
alocă această componentă (există opţiunea TABLESPACE în
instrucţiunea CREATE). Dacă opţiunea lipseşte, atunci se foloseşte un
spaţiu tabel implicit.
c. Capacitatea de memorare a bazei de date este formată din suma
capacităţilor de memorare a spaţiilor tabel.
d. Conţinutul unui spaţiu tabel se memorează în unul sau mai multe
fişiere la nivel fizic. Atât în spaţiul tabel cât şi în fişierele de pe suport
alocarea zonelor de memorie se face în structura de blocuri, extensii,
segmente.
e. Actiuni legate de spatiile de table: crearea unui spatiu tabel, marirea
spatiului alocat initial pt un spatiu de tabel, stergerea unui tablespace.

Spatiul de memorie folosit de o BD Oracle este structurat in urmat, unitati logice:


 Bloc de date – are cea mai mica dimensiune si este unitatea de schimb
dintre support si memoria interna.
 Extensie - zonă formată din mai multe blocuri de date consecutive pe suport.
In general o componentă din baza de date a unui utilizator nu se poate
memora într-un singur bloc şi sunt necesare mai multe blocuri (consecutive)
 Segment - format dintr-o mulţime de extensii (care nu trebuie sa fie
consecutive) şi este folosit pentru a memora un anumit tip de date.
o Segment tabel – memoreaza tabele, clustere, instantanee
o Segment index – pastreaza continutul unui indexului
o Segment de revenire - unde se memorează datele necesare refacerii
bazei de date dacă este necesară anularea modificărilor.
o Segment temporar - unde se păstrează diverse date de lucru, necesare
la execuţia următoarelor instrucţiuni SQL:
 CREATE INDEX
 SELECT ... ORDER BY
 SELECT DISTINCT ...
 SELECT ... GROUP BY
 SELECT ... UNION
 SELECT ... INTERSECT
 SELECT ... MINUS
pctfree (care precizează procentul de spaţiu care rămâne liber iniţial).
Pctused – spatiu ocupat
Pctfree + pctused =< 100%

Structura fizica este formata din mai multe fisiere ale SO. Tipuri de
fisiere:

 fişiere de date: dicţionarul BD, obiectele utilizatorilor, date necesare


pentru tranzacţii (segmente rollback),
 fişiere redo-log (jurnal): date cu modificările efectuate în BD pentru
recuperarea la o eventuală eroare (se gestionează în tranzacţii),
 fişiere de control: date necesare verificării integrităţii BD (localizarea
fişierelor din sistem şi starea acestora). Aceste fişiere sunt consultate la
fiecare sesiune de lucru.
 alte fişiere: fişier de parametri (definesc caracteristicile instantei
Oracle), fişiere redo-log arhivate

EXECUTIA INSTRUCTIUNILOR SQL

Modalitati de executie a instr. SQL sau a blocurilor PL/SQl:

 SQL*PLUS – mediu de executie mod text, aici exista mai multe comenzi
de editare.
 iSQL*PLUS – prin folosire de aplicatii web. Se pot vizualiza parametrii
unei sesiuni de lucru
 SQLDeveloper – aplicatie create in Java pt gestiunea Oracle,
SQLServer, MySQL, Access
 Aplicatii proprii – create in php, java, .NET

DICTIONARUL BD contine:

 definiţia componentelor din schema bazei de date


 spaţiul alocat pentru unele obiecte din schema bazei de date
 valorile implicite ale coloanelor din tabele
 informaţii despre restricţiile de integritate definite
 informaţii despre utilizatorii bazei de date
 privilegiile şi rolurile definite şi modul de alocare a acestora
 informaţii de audit (cine accesează şi actualizează obiectele schemei)
 alte informaţii despre baza de date

Toate datele din dicţionarul bazei de date sunt memorate în spaţiul SYSTEM.
Modificarea datelor din dicţionar se poate face numai prin instrucţiuni SQL.
Un utilizator nu poate modifica altfel dicţionarul, deci aceste tabele sunt "read
only". Informaţiile din dicţionar se pot obţine prin anumite view-uri definite de
sistem.

ROLUL dictionarului:

 se utilizează de sistem pentru a verifica dreptul utilizatorilor de a


executa diversele instrucţiuni SQL
 se modifică de sistem la execuţia unor instrucţiuni de definire/modificare
a obiectelor din schema bazei de date
 oferă informaţii utilizatorilor

CURS 2 – PL/SQL (Procedural Language si SQL)


 Este un limbaj procedural pentru sistemul Oracle
 Se pot folosi instrucţiuni SQL şi construcţii din limbajele de programare
 Este orientat pe blocuri
 Nu există un produs destinat exclusiv pentru execuţia acestui limbaj

Pt a EXTRAGE VALORI dintr-un bloc/procedura/functie se pot folosi:

1. Prin parametrii de iesire


2. Prin variabile globale – in SQL*Plus sau iSQL*Plus:
a. Se poate defini prin variabile de substitutie: DEFINE, ACCEPT,
macrosubstitutie si denumire
b. Variabile legate – VARIABLE
3. Prin inserarea valorilor intr-un tabel
4. Prin utilizarea pachetului dbms_output în sql*plus

DECLARAREA VARIABILELOR SI CONSTANTELOR


identificator [CONSTANT] tip_data [NOT NULL] [:= expresie];

Tipuri de date:

 Tipuri si subtipuri de date scalare


o Numerice
o Character
o Boolean
o Data calendaristica
 Valori binare – BLOB, CLOB, BFILE
 Compuse – inregistrari, colectii
 Cursor,referinta
 Tipuri definite de user
 Tipul unei variabile - Variabila%TYPE
 Tipul unei coloane dintr-un tabel: [schema.]table.coloana%TYPE
 Tipul unei înregistrări dintr-un tabel sau dintr-un cursor: [schema.]
{tabel | cursor}%ROWTYPE

EXPRESII

 Operanzi: constante, variabile, coloane din tabele sau cursoare, valori


ale funcţiilor utilizator sau system
 Operatori: aritmetici (+, -, *, /), concatenare (||), relaţionali (=, <, <=, >,
>=), logici (not, and, or)

In expresii se pot folosi şi operatorii:

 IS NULL(expresie) - care are valoarea de true dacă expresia argument


este null, şi false în caz contrar
 expresie_sir_caractere LIKE sablon
 expresie BETWEEN valmin AND valmax
 expresie IN (lista_de_valori)

CONVERSII:

 Explicite: prin folosirea unor funcţii de conversie


 Implite: la folosirea unor instrucţiuni de atribuire

INSTRUCTIUNI PL/SQL: http://www.cs.ubbcluj.ro/~horea/SD/fisiere/plsql03.htm

CURSOR IN PL/SQL
Instrucţiunile SQL se execută în PL/SQL folosind anumite zone de lucru,
numite cursoare. Tipuri de cursoare:

 implicite, declarate printr-o instrucţiune SELECT ce are ca rezultat o


singură linie, sau prin instrucţiuni de gestiune a datelor (INSERT,
UPDATE, DELETE). Un astfel de cursor se identifică prin
denumirea SQL
 explicite, declarate prin instrucţiuni

COLECTII – multime ordonata de elemente de acelasi tip.

Tipuri de colectii:

1. Vector – cu valori intre 1 si o valoare maxima prestabilita la definire


2. Tabel indexat – cu indicele reprezentat pe 4 octeti
3. Tabel – dimensiunea nu este fixate si poate creste

Etape pt utilizarea colectiilor:

1. Definirea unui tip de data colectie (vector, tabel indexat sau tabel)
2. Declararea unei variabile de tipul de date ales
3. Pt un vector sau un tabel este necesar utilizarea unui constructor, care
coincide cu numele colectiei

ELEMENTELE unei colectii:

 Un scalar
 Tipul unei variabile definite anterior
 Tipul unei coloane
 Tipul liniilor intr-un tabel sau cursor
 O inregistrare
 Un obiect
 Un tip de colectie

Execuţia subprogramelor:

1. In PL/SQL:
o Funcţiile definite de utilizator se pot folosi în acelaşi mod ca
funcţiile sistem, într-o expresie, prin precizarea numelui şi a
eventualilor parametri
o Procedurile se execută prin nume şi prin precizarea valorilor
pentru eventualii parametri
Observaţie. Transferul valorii unui parametru se poate face prin:

o poziţie
o numeparametru=>valoare
o mixtă, unde eventualul transfer prin nume se face numai la sfârşit

Observaţie. Dacă la definirea unui subprogram nu s-au precizat


parametri formali, atunci la apel nu se folosesc parantezele.
Observaţie. Parametrii care lipsesc la apelul unui subprogram primesc
valoarea implicită specificată la definire. Este indicat ca astfel de
parametri să fie pozitionaţi la sfârşitul listei în momentul definirii
subprogramelor.

2. In SQL*PLUS:
o Execute {apel_procedura | :variabila_legata := apel_functie}
[(parametri)];
o Begin
{apel_procedura | :variabila_legata := apel_functie} [(parametri)];
end;
3. In diverse limbaje de programare

CURS 3 – ORACLE PHP


Funcţia furnizează o eroare sau un identificator de conectare.
Funcţiile (extensia) OCI8 (Oracle Call Interface) permit accesul, din PHP, la
Oracle.

 oci_error([resource $resursa]) - furnizează un vector asociativ cu


eroarea apărută la execuţia ultimei funcţii (se pot obţine aceste
informaţii numai dacă a apărut o eroare). La execuţia unei funcţii care
nu furnizează erori se şterg informaţiile despre erori.
Poziţiile din vectorul furnizat sunt:
o code - un cod (număr) pentru eroare (cod Oracle)
o message - descrierea erorii (mesaj Oracle)
o offset - poziţia în instrucţiunea ce se execută de unde se produce
eroarea
o sqltext - instrucţiunea SQL care produce eroarea, sau şir vid
dacă nu există o instrucţiune (de exemplu, la conectare)
 oci_connect - conectarea la o bază de date Oracle
oci_new_connect - crează o nouă conecţiune la o bază de date Oracle

Datele dintr-o BD Oracle trebuie să fie folosite în PHP, deci sunt necesare
corespondenţe între tipurile de date din Oracle (baza de date, PL/SQL) şi
PHP.
 Datele de tipul CHAR, VARCHAR2 din Oracle se folosesc ca şiruri în
PHP
 Datele de tipul NUMBER din Oracle se memorează ca şiruri în PHP.
Această situaţie are implicaţii în cazul în care trebuie efectuate calcule
la serverul Oracle. Este posibil ca la serverul web marca zecimală să fie
"," şi nu ".".
 Datele de tipul DATE, TIMESTAMP, INTERVAL din Oracle se
memorează ca şiruri în PHP
 Pentru datele de tipul BLOB, CLOB, BFILE din Oracle se
folosesc descriptori în PHP
 Tipul XMLTypes se foloseşte ca şir de caractere sau LOB în PHP
 Pentru colecţiile de tip tabel indexat din Oracle se poate
folosi array în PHP
 Pentru colecţiile de tip vector sau tabel din Oracle se poate folosi
o resursă specială în PHP
 Pentru a putea folosi în PHP valorile furnizate de parametrii de
tip cursor de subprogramele PL/SQL, se defineşte o resursă
corespunzătoare în PHP
 Datele de tipul NCHAR, NVARCHAR2, NCLOB nu se pot folosi în PHP

Functii:

 oci_parse - pregăteşte o instrucţiune SQL sau un bloc


PL/SQL pentru execuţie. Această funcţie furnizează un identificator
de instrucţiune (ce va fi utilizat de alte funcţii care folosesc textul
analizat).
 oci_execute - execută un text sql pregătit de oci_parse. Al doilea
parametru precizează modul în care sunt tratate modificările în baza
de date (dacă se execută astfel de instrucţiuni), implicit se face un
COMMIT dacă nu au apărut erori.
Valoarea funcţiei este TRUE (textul s-a executat) sau FALSE (la
execuţie au apărut erori).
 Dacă instrucţiunea care se execută furnizează o colecţie de
înregistrări (de exemplu o instrucţiune SELECT), atunci rezultatul se
poate consulta cu acelaşi identificator de instrucţiune. Această
consultare (parcurgere) se poate face cu mai multe funcţii:
o oci_fetch - furnizează următoarea înregistrare din rezultatul
identificat de primul argument. Coloanele din rezultat se pot folosi
prin intermediul unor variabile precizate de
funcţia oci_define_by_name.
o oci_define_by_name - asociază o denumire de variabilă la o
coloană. O astfel de asociere este necesară dacă instrucţiunea
identificată de primul parametru furnizează un rezultat (de
exemplu avem o instrucţiune SELECT) şi rezultatul se consultă
cu oci_fetch.
o oci_fetch_row - furnizează într-un vector cu indici (precizaţi prin
numere, prima coloană are indicele 0) următoarea înregistrare din
rezultatul identificat de argument.
Valoarea funcţiei este false dacă nu există o următoare
înregistrare.
o oci_fetch_assoc - furnizează într-un vector associativ (indicii
pentru vector sunt denumirile coloanelor, precizate cu litere
mari) următoarea înregistrare din rezultatul identificat de
argument.
Valoarea funcţiei este false dacă nu există o următoare
înregistrare.
o oci_fetch_object - furnizează într-un obiect următoarea
înregistrare din rezultatul identificat de argument. Coloanele din
rezultat sunt proprietăţi ale acestui obiect (precizate cu litere
mari).
Valoarea funcţiei este false dacă nu există o următoare
înregistrare.
o oci_fetch_array - se furnizează într-un vector (associativ sau
cu indici numere) următoarea înregistrare din rezultatul
identificat de primul argument. Modul în care se pot folosi poziţiile
din vector este precizat de al doilea parametru:
 OCI_ASSOC - vector asociativ
 OCI_NUM - vectorul are indicii numere
 OCI_BOTH - vectorul rezultat se poate folosi în ambele
variante, deci OCI_ASSOC + OCI_NUM. Aceasta
este valoarea implicită a parametrului.
 OCI_RETURN_LOBS - furnizează un conţinut LOB
o oci_fetch_all - furnizează într-un array bidimensional (matrice)
toate înregistrările din rezultatul identificat de primul argument.
Funcţia se poate apela o singură dată după oci_execute.
In funcţie se pot include şi alţi parametrii pentru identificarea
înregistrărilor care se copiază în matrice.
Valoarea funcţiei poate fi false (dacă apare o eroare), sau
numărul de înregistrări din rezultat.
o oci_num_fields - furnizează numărul de coloane din rezultat
o oci_num_rows - care furnizează numărul de linii (înregistrări)
afectate de ultima instrucţiune.

In procedurile/funcţiile PL/SQL se pot folosi ca parametrii şi variabile care nu


sunt simple, deci în PHP ar trebui să se poată defini structuri de date
corespunzătoare:
1. Pentru colecţiile de tip tabel indexat din Oracle se poate folosi array în
PHP.

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