Sunteți pe pagina 1din 126

UNIVERSITATEA DIN BACU FACULTATEA DE INGINERIE

Gheorghe Hazi

BAZE DE DATE II (ORACLE)

CURS PENTRU UZUL STUDENILOR

Bacu - 2007

Baze de date Oracle

CUPRINS 1. Introducere ............................................................................................................4 1.1. Caracteristici principale ale bazei de date Oracle...........................................4 1.2. Concepte i faciliti ale bazei de date Oracle................................................6 2. Arhitectura bazei de date Oracle..........................................................................10 2.1. Structura fizic a bazei de date......................................................................10 2.2. Structura logic a bazei de date.....................................................................11 2.3. Instana Oracle..............................................................................................12 2.4. Procesarea instruciunilor SQL.....................................................................16 3. Unelte de baz pentru administrare......................................................................18 3.1. Oracle Universal Installer (OUI)...................................................................18 3.2. Oracle Database Configuration Assistant (DBCA).......................................19 3.3. SQL Plus........................................................................................................20 3.4. Oracle Enterprise Manager (OEM)...............................................................24 4. Managementul unei instane oracle .....................................................................26 4.1. Parametrii de iniializare...............................................................................26 4.2. Pornirea i oprirea bazei de date...................................................................29 5. Crearea unei baze de date.....32 5.1. Cerine pentru crearea unei baze de date.......................................................32 5.2. Crearea manual a bazei de date...................................................................33 6. Dicionarul bazei de date i vederi.......................................................................38 6.1. Obiecte ale bazei de date...............................................................................38 6.2. Vederi statice ale bazei de date......................................................................39 6.3. Vederi dinamice ale bazei de date.................................................................46 7. Managementul fiierelor bazei de date.................................................................50 7.1. Fiierele de control........................................................................................50 7.2. Fiierele jurnal (redo log)..............................................................................52 7.3. Tablespace i fiiere de date..........................................................................55 8. Managementul tabelelor i a datelor.....................................................................58 8.1. Tipuri de date.................................................................................................58 8.2. Tipuri de tabele.............................................................................................60 8.3. Crearea unei tabele.........................................................................................60 8.4. Specificarea clauzelor de stocare...................................................................62 8.5. Modificarea i tergerea tabelelor.................................................................63 8.6. Managementul indecilor..............................................................................65 9. Integritatea datelor i restricii n baza de date......................................................67 9.1. Metode de control a integritii datelor..........................................................67 9.2. Stri ale restriciilor........................................................................................67 9.3. Verificarea restriciilor...................................................................................68 9.4. Utilizarea cheilor n tabele.............................................................................68 9.5. Crearea, modificarea i tergerea restriciilor................................................68 Cuprins -2-

Baze de date Oracle 10. Managementul utilizatorilor i securitatea informaiilor....................................72 10.1. Utilizarea profilelor pentru utilizatori...............................................72 10.2. Scheme i utilizatori n baza de date.................................................76 10.3. Crearea i administrarea utilizatorilor..............................................77 10.4. Administrarea privilegiilor...............................................................79 10.5. Administrarea rolurilor.....................................................................81 11. SQL n ORACLE................................................................................................84 11.1. Oracle SQL Plus...............................................................................84 11.2. Particulariti SQL n Oracle............................................................86 12. Programe stocate n baza de date........................................................................95 12.1. Administrarea pachetelor de programe.............................................95 12.2. Mediul de programare PL/SQL.........................................................97 12.2.1. Structuri de control..........................................................................100 12.2.2. Executarea SQL n mediul PL/SQL................................................102 12.2.3. Tratarea erorilor n PL/SQL............................................................106 13. Utilitare ale bazei de date Oracle 13.1. Exportul datelor n ORACLE..........................................................108 13.2. Importul datelor n ORACLE..........................................................111 13.3. SQL LOADER.................................................................................113 14. Monitorizarea i optimizarea funcionrii bazei de date....................................115 14.1. Monitorizarea funcionrii bazei de date..........................................115 14.2. Managementul automat al stocrii....................................................117 14.3. Managementul automat al memoriei................................................118 14.4. Salvarea i restaurarea bazei de date................................................118 Bibliografie.........................................................................................................127

Cuprins -3-

Baze de date Oracle 1. INTRODUCERE n general, o baz de date reprezint o colecie de date tratate unitar. Scopul unei baze de date este acela de a stoca i regsi informaiile. Serverul de baz de date este soluia prin care se rezolv managementul informaiei. De cele mai multe ori un server manipuleaz o cantitate mare de informaii, cu acces simultan a mai multor utilizatori a acelorai informaii. Baza de date previne accesul neautorizat i ofer soluii eficiente pentru recuperarea informaiilor n cazul unor incidente. Baza de date Oracle a aprut n versiunea 1 n anul 1978. Ea a fost scris n limbaj de asamblare i rula pe sisteme PDP-11 (n Romnia Independent i Coral) pe sisteme de operare RSX cu 128 k memorie. Versiunea 2, prima versiune comercial, a aprut n 1979. Aceast versiune a fost prima baza de date relaional bazat pe SQL. Firma a luat numele de Oracle n 1982. Ultimele versiuni au aprut n 1998 (versiunea 8), 2001 (versiunea 9), 2003 (versiunea 10g). n acest curs vom studia versiunea 10 g. 1.1. Caracteristici principale ale bazei de date Oracle Cteva caracteristici sunt date n tabelele 1.11.5
Tabelul 1.1 Caracteristici principale baza de date Oracle 10 g - date Tip de dat Limite Observaii Fiier binar max 4 GB BLOB (Binary 8128 TB Numrul de coloane BLOB este Large OBject) limitat numai de numrul maxim de coloane dintr-un tabel VARCHAR2 4000 bytes (ir de caractere) NUMBER 10125 Cu reprezentarea mantisei pe 38 de bii Tabelul 1.2 Caracteristici principale baza de date Oracle 10 g Limite ale bazei d date Caracteristic Tip limit Valoare Mrimea blocului Minim 2048 bytes bazei de date Maxim 32 K Mrime fiier baz Maxim Limita maxim admis de SO de date uzual 222 x 4 M Fiiere de control Minim 1 Se recomand 2 sau mai multe stocate pe discuri fizice diferite Numr de fiiere al Maxim/tablespace 1022 bazei de date Maxim pe baza de 65533 date Tablespace (spaii Numr maxim pe 64 K pentru tabele) baz de date Nu poate depi numrul de fiiere al bazei de date

Introducere -4-

Baze de date Oracle


Tabelul 1.3 Caracteristici principale baza de date Oracle 10 g Limite logice ale bazei de date Caracteristic Tip limit Valoare Numr de coloane Maxim/tabel 1000 Restricii Maxim/coloan nelimitat Subqueries Maxim de nivele Nelimitat n clauza FROM ntr-o interogare 255 n clauza WHERE SQL Linii Numr maxim ntr- Nelimitat o tabel Numr tabele Maxim/baz de Nelimitat date Numr utilizatori Maxim 2147483638

n ceea ce privete sistemul de operare i serverul de baz de date, exist 18 variante pentru diverse sisteme de operare i platforme hardware. Avem variante pentru UNIX, LINUX, WINDOWS 32, WINDOWS 64, pe mai multe variante de procesoare i hardware. Oracle este o baz de date obiectual i relaional. Este o baz de date obiectual ntruct suport obiecte (componente care pot stoca date, efectua prelucrri i trimite mesaje ctre alte obiecte). Este o baz de date relaional ntruct n discionarul bazei de date sunt scrise relaiile ntre tablele i restriciile impuse cmpurilor. Baza de date are o structur logic i una fizic. ntruct structura logic este separat de cea fizic, se poate modifica structura fizic (din condiii de eficien) fr a afecta structura logic. Oracle 10g utilizeaz conceptul de grid computing. Se opereaz cu sisteme care sunt formate din mai multe entiti care funcioneaz ca un ntreg. Se realizeaz o balan ntre beneficiile unui sistem unic i un sistem flexibil rspndit n mai multe locaii. Resursele IT cuprind: infrastructura hardware i software care creeaz condiiile pentru stocarea datelor i mediu pentru execuia programelor aplicaii programele i fluxul specific procesului date (informaii). Grid computing se bazeaz pe urmtoarele principii: virtualizare resurse individuale (calculatoare, discuri, aplicaii i informaii) sunt grupate pentru a putea fi utilizate de utilizatori sau aplicaii oferirea de resurse atunci cnd se solicit acest lucru, cu optimizarea sistemului n ansamblu. Fiecare baz de date este constituit din unul sau mai multe fiiere fizice. Exist fiiere de date care stocheaz colecii de tabele numit tablespace. Baza de date cuprinde i fiiere de control care conin date despre structura fizic a acesteia: numele bazei de Introducere -5-

Baze de date Oracle date, fiierele de date, fiierele jurnal (redo log). De obicei, din motive de siguran, exist mai multe copii ale fiierului de control. Fiierele jurnal nregistreaz toate modificrile din baza de date cu scopul de a putea reface starea acesteia la un moment dat. i aceste fiiere pot avea mai multe copii pe mai multe discuri. Fiecare baz de date este mprit logic pe mai multe tablespaceuri. Exist dou tablespace utilizate de baza de date SYSTEM i SYSAUX. Obiectele bazei de date sunt reinute logic ntr-o schem. O schem reprezint toate obiectele din baza de date deinute de un utilizator al bazei de date. Principale obiecte coninute ntr-o schem sunt: tabele vederi sunt tabele virtuale rezultate ale unei interogri tip SQL indeci clustere o grupare de dou sau mai multe tabele care folosesc aceeai coloan secvene sistem automat de generare a unui ir de numere cu un anumit pas sinonime este un alias (un nume suplimentar) pentru tabele, secvene, proceduri, etc. 1.2. Concepte i faciliti ale bazei de date Oracle Oracle include cteva mecanisme pentru a realiza urmtoarele funcii de baz: acces concurent pentru mai muli utilizatori cu timpi ct mai mici informaiile trebuie citite i modificate ntr-o manier consistent o informaie vzut sau modificat de un utilizator nu poate fi modificat de ali utilizatori pn cnd utilizatorul nu ncheie lucrul cu acea informaie n acest scop baza de date asigur urmtoarele: - citirea consistent a informaiilor garanteaz c setul de date generat de o interogare respect un moment clar i c datele nu se modific n timpul integorrii asigur c cei care citesc baza de date nu ateapt ali utilizatori care acceseaz aceeai informaie asigur c cei care scriu date nu ateapt pe cei care citesc aceeai informaie asigur c cei care scriu o informaie n baza de date ateapt numai ali utilizatori care ncearc s modifice aceeai linie dintr-un tabel al bazei de date Metoda simpl prin care se asigur aceste lucruri este crearea unei imagini pariale a bazei de date pentru fiecare utilizator. - utilizarea unor nregistrri temporare (undo records) atunci cnd un utilizator modific o informaie modificarea este vzut numai de acel utilizator atta timp ct el nu realizeaz comiterea (scrierea n baza de date). Atta timp ct informaiile rmn n memorie sau n

Introducere -6-

Baze de date Oracle tablespace specific ca informaii necomise, ceilali utilizatori vd informaiile nemodificate. - tranzacii numai n citire de obicei interogrile reflect situaia la un moment dat al bazei de date. Totui dac vrem s efectum mai multe interogri pe o baz de date, toate reflectnd acelai moment, se utilizeaz tranzacii n citire. - mecanisme de blocare dac o dat este modificat de un utilizator se blocheaz modificarea de ctre ali utilizatori pn la comiterea ei cu scopul ca toi utilizatorii s vad datele modificate de utilizatorii precedeni. Blocarea este automat, fr intervenia utilizatorilor. Pentru activiti de administrare baza de date poate fi trecut n mod restrictiv prin oprire i deschidere cu restricii. Principalele faciliti oferite de baza de date Oracle sunt: - Real Appliation Clusters (RAC) cuprinde cteva instane Oracle care ruleaz n mai multe calculatoare care funcioneaz n grup, baza de date fiind vzut logic ca una singur. - portabilitate aa cum am artat mai sus bazele de date Oracle au fost dezvoltate pe mai multe platforme software i hardware. La trecerea unei baze de date de pe o platform pe alta aplicaiile ruleaz fr nici o modificare. Acest lucru este asigurat de faptul c codul de baz (PL/SQL) este identic pe toate platformele. - faciliti de administrare administrarea de ctre administratori (DBA Data Base Administrator) presupune pe, lng crearea bazei de date, monitorizarea i asigurarea funcionri cu vitez ct mai mare. Pentru a uura munca de administrare s-a creat un utilitar Oracle Enterprise Manager. De la distan se pot efectua urmtoarele activiti: - administrarea complet a bazei de date - diagnosticarea, modificarea i customizarea mai multor baze de date - programarea lucrrilor n baza de date - monitorizarea funcionrii bazei de date n reea - SQL *Plus este un mediu text sau grafic care permite introducerea i testarea procedurilor SQL. Permite executarea interogrilor SQL i a blocurilor PL/SQL (module de program). Permite efectuarea multor alte task-uri adiionale. - controlul automat al stocrii fiierelor de date, control i de jurnal Automatic Storage Management (ASM) permite controlul automat al stocrii datelor pe mai multe discuri ataate bazei de date. Redistribuirea fiierelor se face ori de cte ori dimensiunea unuia dintre ele se modific. - programatorul de lucrri permite un sistem complex de planificarea a lucrrilor n baza de date - faciliti de salvare i restaurare a bazei de date - recuperarea bazei de date dup diverse incidente - flexibile posibiliti de salvare - disponibilitatea bazei de date pe perioada salvrii Baza de date dispune de un utilitar forte puternic RMAN (Recovery Manager) care asigur restaurarea automat a datelor n caz de incident utiliznd fiierele jurnal Introducere -7-

Baze de date Oracle (redo log) i ultima salvare valid. Alte utilitare n acest sens sunt Oracle Flashback i Oracle Data Gurad. Prin Oracle Flashback (figura 1.1) se asigur protecia n cazul incidentelor umane (de exemplu tergerea voit a unei tabele) prin stocarea unor copii pariale ale bazei de date direct pe discurile active. La un incident nu mai este nevoie de restaurare. Prin Oracle Data Guard se ntreine o baz de date suplimentar, situat n alt loc. Salvarea suplimentar se face automat (figura 1.2). Alte faciliti ale bazei de date Oracle sunt: - Data Warehousing un modul utilizat pentru stocarea i regsirea datelor cu caracter istoric. Fa de bazele de date obinuite, n acest caz actualizarea informaiilor nu reprezint o prioritate ci regsirea, dup ct mai multe criterii - vederi materializate reprezint rezultatul unei interogri stocat ntr-o schem separat - procesarea paralel a interogrilor permite mprirea unei interogri n mai Figura 1.1 multe componente care se execut n Oracle Flashback paralel - online analytical processing (OLAP) reprezint o facilitate prin care prelucrrile sunt fcute o dat cu actualiazrea bazei de date n scopul generrii rapide a unor informaii. Se ofer o serie de funcii pentru prelucrri complexe.

Figura 1.2 Oracle Data Guard

Introducere -8-

Baze de date Oracle - partiionarea tabelelor permite segmentarea tablelor dup mai multe criterii fapt ce permite cutarea paralel n mai multe segmente care pot fi stocate n tablespace diferite. - cmpuri BLOB, CLOB n care se pot stoca fiiere binare, nestructurate de mari dimensiuni (video, muzic, imagini, diverse documente) - Oracle Text ofer un motor pentru indexarea i regsirea documentelor, util pentru realizarea unor baze de date pentru stocarea i regsirea documentelor - Oracle Intermedia ofer obiecte i metode pentru stocarea i manipularea informaiilor tip sunet, video, text. - Oracle Spatial ofer o serie de obiecte i metode pentru stocarea i prelucrarea informaiilor geografice - module de securitate - permit o serie de funcii avansate cum ar fi: prevenirea accesului neautorizat auditarea accesului la informaii (pe ore, tabele, etc); limitarea resurselor pentru un utilizator drepturi de acces pe obiecte, mergnd pn la nivel de coloan din tabel sau chiar la nivel de linie (row level security RLS) drepturi de acces pe tipuri de operaii (citire, scriere, tergere) - controlul integritii informaiilor prin restriciile scrise n dicionarul bazei de date. Restriciile permise sunt: NOT NULL cmpul trebuie completat obligatoriu UNIQUE KEY un cmp al unei coloane dintr-un tabel nu poate avea dou valori identice PRIMARY KEY cheie primar n tabel, valori unice i nenule FOREIGN KEY valoarea trebuie s se regseasc ca o cheie primar n alt tabel, numit tabel printe CHECK permite stabilirea unor limite pentru valorile unui cmp. Cmpul trebuie s satisfac o expresie logic. - trigere sunt proceduri care se activeaz automat atunci cnd au loc evenimente n baza de date (citire, scriere, nserare, modificare) - interogri distribuite optimizeaz volumul de date transferat atunci cnd se efectueaz interogri pe mai multe baze de date distribuite n spaiu - replicarea datelor proceduri automate pentru replicarea unor informaii n mai multe baze de date - dezvoltarea de aplicaii se bazeaz pe SQL i PL/SQL care poate fi scris n proceduri stocate, n medii de dezvoltare proprii (Oracle Developper) dar i interfee avansate pentru Java, C++, Vizual Basic, XML, COBOL. - utilizarea unui numr mare de variant de limb, inclusiv romn. Introducere -9-

Baze de date Oracle 2. ARHITECTURA BAZEI DE DATE ORACLE O baz de date Oracle conine: un server de baz de date rulnd un sistem de operare (UNIX, LINUX, WINDOWS) fiierele bazei de date o instan Oracle cuprinznd procesele care gestioneaz accesul la baza de date. 2.1. Structura fizic a bazei de date Fiierele bazei de date au o structur fizic i o structur logic. Structura fizic cuprinde un set de fiiere ale sistemului de operare (figura 2.1).
BAZA DE DATE ORACLE Fisiere de date Fisiere de control Fisiere jurnal (Redo log) Arhiva jurnale

Fisier cu parametrii Fisier parole

Figura 2.1 Structura fizic a bazei de date

Fiierele de date conin datele stocate n baza de date. Exist dou fiiere care sunt utilizate de baza de date: SYSTEM01.DBF i SYSAUX01.DBF i care sunt create automat o dat cu generarea bazei de date. n fiierul SYSTEM01.DBF se stocheaz structura logic tablespace SYSTEM care conine dicionarul bazei de date (n mai multe tabele) i procedurile stocate ale bazei de date. SYSAUX01.DBF conine tablespace SYSAUX n care se stocheaz structuri mari de date utilizate intern de ORACLE. De obicei, pentru utilizatori se creeaz tablespace USERS stocat n fiierul UERS01.DBF. n procesul de funcionare datele nu sunt scrise imediat n baza de date ci sunt stocate n memorie (pentru rapiditate), scrierea n fiiere fcndu-se n background. Fiierele de control conin informaiile necesare pentru a menine i pentru a verifica integritatea bazei de date. Au implicit denumirea CONTROL01.CTL, CONTROL02.CTL, CONTROL03.CTL, cele trei fiiere fiind identice. Numrul de fiiere de control poate fi mai mare sau mai mic i se recomand stocarea lor n locuri (harddiscuri diferite). Informaiile stocate sunt date despre fiierele de date ale bazei de date, fiierele redo log, numele bazei de date, etc. Sunt utilizate la deschiderea bazei de date. De asemenea sunt utilizate la recuperarea bazei de date dup incidente. Fiierele jurnal (redo log) sunt utilizate pentru nregistrarea modificrilor efectuate Arhitectura bazei de date Oracle - 10 -

Baze de date Oracle asupra datelor. Exist dou sau mai multe asemenea fiiere identice i au rolul de a recupera datele n caz de incident. Operaiile asupra bazei de date se scriu rapid n aceste fiiere. Fiierul de parametrii conine parametrii dinamici de configurare a bazei de date care sunt stabilii la pornirea bazei de date. Principalii parametrii se refer la configurarea zonelor de memorie. De obicei este un fiier ASCII. Fiierul cu parole conine parolele utilizatorilor privilegiai care pot starta sau opri baza de date. Fiierele arhiv cu jurnale conin arhive ale fiierelor jurnal mai vechi. Prezena lor este opional. Pe lng fiierele de mai sus baza de date mai genereaz fiiere cu mesaje de eroare i cu nregistrri privind funcionarea bazei de date. Acestea sunt fiiere ASCII i sunt utile administratorilor pentru depanarea unor erori i pentru mbuntirea funcionrii bazei de date. 2.2. Structura logic a bazei de date Baza de date este divizat din punct de vedere logic n mai multe uniti numite tablespace. Acestea grupeaz informaii logice legate de obiecte la un loc. De exemplu un tablespace grupeaz toate obiectele unei aplicaii. Tablesapce pot fi gestionate de administratori sau automat de ctre procesele din baza de date. Blocurile de date sunt entitile cele mai mici cu care opereaz baza de date. Un bloc de date conine un numr de blocuri ale sistemului de operare (de obicei 4 K). Valorile uzuale ale dimensiunii blocului de date sunt 4096 sau 8192 bytes. Structura unui bloc de date este dat n figura 2.2. Extensiile sunt urmtorul nivel de alocare a spaiului n baza de date. Ele reprezint numrul de blocuri alturate cu care crete spaiul alocat ntr-un singur pas. Segmentul reprezint un set de extensii. Toate datele sunt stocate n segmente. O tabel reprezint cel puin un segment de date. Un caz particular l reprezint segmentul de rollbak utilizat pentru stocarea micrilor necomise. Legtura ntre blocuri de date extensii i segment este artat n figura 2.3. Schema i obiectele ei. O schem reprezint o colecie de obiecte ale bazei de Figura 2.2 date. O schem este proprietatea unui Structura unui bloc de utilizator al bazei de date. Nu exist o legtur date obligatorie ntre tablespace i schema, n sensul c o schem poate fi stocat n mai multe tablespace. O schem poate conine: - tabele reprezint unitatea de baz n care Oracle stocheaz date accesibile direct utilizatorilor. Fiecare tabel conine coloane i linii. Arhitectura bazei de date Oracle - 11 -

Baze de date Oracle - indeci reprezint structuri opionale asociate tabelelor care permit regsirea rapid a informaiilor. Sunt create din una sau mai multe coloane ale tabelei asociate. Modificarea unei tabele, n sensul adugrii sau tergerii de rnduri, conduce automat la modificarea indecilor. - vederi reprezint o prezentare customizat a unor informaii din una sau mai multe tabele. Ele reprezint rezultatul unei interogri n baza de date. Ca i tabelele, vederile pot fi modificate cu unele restricii. Ofer un nivel de securitate superior, ascunznd unele informaii (linii sau coloane) din tabele. - clustere grupeaz una sau mai multe tabele care au n comun o coloan i care adesea sunt utilizate mpreun. Ca i indecii, clusterele nu afecteaz aplicaiile, ns utilizarea lor crete performana. - sinonime sunt nume suplimentare alocate pentru tabele, vederi, secvene, proceduri, funcii, pachete de programe. - secvene reprezint un generator automat de numere, cu un anumit pas. - proceduri, funcii, pachete module de program scris n PL/SQL - legturi ctre alte baze de date sunt Figura 2.3 definiii ale unor legturi ctre o baz de date Legtura ntre segment, extensii i situat n reea (local sau internet) blocuri de date - trigere sunt proceduri stocate n baza de date care se activeaz la evenimente specifice (nserare, modificare, tergere, vizulalizare) - vederi materializate sunt vederi care sunt stocate n baza de date, ntr-o schem separat, utilizate pentru calcule efectuate n tabele, distribuirea informaiei, etc. 2.3. Instana Oracle Reprezint procesele care ruleaz n background i buferele de date. Pentru a-i ndeplini funciunile baza de date utilizeaz dou structuri importante de memorie: System Global Area (SGA) i Program Global Area (PGA), figura 2.4. System Global Area reprezint o zon de memorie care conine date i informaii de control pentru o instan Oracle. Memoria este alocat la pornirea instanei i este eliberat la oprirea ei. Utilizatorii care acceseaz baza de date utilizeaz n comun date stocate n SGA. Pentru performane bune este necesar ca SGA s aib o dimensiune ct mai mare (peste 200 MB). SGA este structurat n mai multe zone : - zon de manevr pentru date din baza de date - zona de manevr pentru fiiere jurnal Arhitectura bazei de date Oracle - 12 -

Baze de date Oracle - shared pool zon de memorie care conine biblioteci de programe, buffere pentru execuia paralel, structuri de control

Figura 2.4 Structura memoriei utilizat de o baz de date Oracle

java pool utilizat pentru execuia sesiunilor Java (date i cod) buffer chache - pentru date din dicionarul bazei de date streams pool zon opional pentru managementul sistemului de transmitere a datelor n flux - large pool zon de memorie opional pentru diverse operaii cum ar fi legturi cu alte baze de date sau operaii de intrare/ieire. - alte informaii O parte din SGA conine informaii despre starea bazei de date, despre procesele din backgound care sunt active. Aceast zona este zona fix a SGA. Program Global Area reprezint zona de memorie alocat aplicaiei utilizator. Zona depinde de modul de configurare a bazei de date cu utilizatorii (zon de memorie folosit n comun de mai muli utilizatori sau alocare de memorie separat pentru fiecare utilizator). Este utilizat pentru execuia lucrrilor specifice utilizatorilor: SQL (inclusiv sortri) , cursoare, informaii despre sesiunea utilizatorului. Fiecare utilizator conectat la baza de date ruleaz dou module de cod: codul specific aplicaiei i codul executat n baza de date. n figura 2.5 sunt reprezentate procesele executate pentru un server configurat cu memorie dedicat fiecrui utilizator. Oracle ruleaz o serie de procese proprii pentru a asigura satisfacerea cerinelor necesare proceselor utilizator. Procesele de pe server n combinaie cu cele ale clientului Oracle realizeaz urmtoarele funcii: desface n componente comanda SQL trimis de aplicaie Arhitectura bazei de date Oracle - 13 -

Baze de date Oracle

Figura 2.5 Procese n baza de date Oracle

citete blocurile de date n zone de memorie comune din SGA, dac blocurile nu erau deja ncrcate n memorie returneaz datele aplicaiei care a emis cererea. Pentru a realiza funciile necesare, baza de date ruleaz cteva procese numite procese background. O instan Oracle poate avea mai multe procese background, ns nu toate sunt prezente n acelai timp. Procesele background pot include urmtoarele: Database Writer Process (DBWn) Log Writer Process (LGWR) Checkpoint Process (CKPT) System Monitor Process (SMON) Process Monitor Process (PMON) Recoverer Process (RECO) Job Queue Processes Archiver Processes (ARCn) Queue Monitor Processes (QMNn) Alte procese n multe sisteme de operare procesele sunt pornite o dat cu lansarea instanei Oracle. n figura 2.6 sunt prezentate interaciunea ntre diferite procese ale bazei de date. Database Writer Process (DBWn) scrie n fiierele de date nregistrrile din memorie care au fost modificate. Dac, n urma monitorizrii, scrierea se face greu, atunci pot fi activate mai multe procese de scriere (pn la 20). Scrierea pe disc se face urmnd urmtoarele reguli: - dac nu exist spaiu liber n memoria cache atunci se d o comand de scriere - scrierea se face periodic pentru a se apropia de checkpoint (punct de salvare), adic apropierea ntre scrierea n fiiere jurnal i scrierea n baza de date Arhitectura bazei de date Oracle - 14 -

Baze de date Oracle - se urmrete scrierea simultan a unui numr ct mai mare de blocuri pentru a crete eficiena

Figura 2.6 Legtura ntre procese

Log Writer Process (LGWR) este responsabil cu managementul scrierii jurnalelor bazei de date pe disc. Redo log buffer are un caracter circular, adic informaiile legate de manevrele n baza de date sunt scrie dup principiul primul sosit, primul servit. Se urmrete asigurarea unui spaiu permanent n zona de manevr de memorie. LGWR scrie zone continue din memorie, ceea ce asigur o vitez mrit de scriere. Scrierea se realizeaz: - atunci n utilizatorul comite tranzaciile sale - la fiecare 3 secunde - atunci cnd buferele din memorie sunt pline - atunci cnd DBWn scrie bufere; dac DBWn constat c exist bufere redo log aferente nregistrrilor nescrise, d comanda LGWR s scrie aceste nregistrri - dac exist mai multe fiiere redo log, ele se scriu simultan Checkpoint Process (CKPT) este o comand care se d bazei de date pentru a scrie toate datele aferente acelui moment. Acest lucru este util pentru restaurri. Scrierea datelor se face de ctre procesele specifice (DBWn, LGWR). Arhitectura bazei de date Oracle - 15 -

Baze de date Oracle System Monitor Process (SMON) realizeaz recuperarea datelor dac este necesar. Procesul este responsabil pentru tergerea segmentelor temporare care nu ncap n spaiul alocat n tablespace temporar. Dac un tablespace este offline procesul ncearc recuperarea atunci cnd este posibil. n modul Real Application Clusters, SMON ncearc recuperarea atunci cnd un procesor cade sau cnd o instan Oracle cade. Process Monitor Process (PMON) realizeaz recuperarea datelor dac procesele utilizator dau eroare. Elibereaz memoria ocupat de datele aferente procesului utilizator blocat. Verific periodic starea proceselor i le repornete dac sau oprit accidental. Recoverer Process (RECO)- este un proces utilizat n cazul bazelor de date distribuite care rezolv automat incidentele. Asigur conectarea automat la alt baz de date n cazul unor probleme n sisteme distribuite. Este prezent numai n instanele care permit tranzacii distribuite. Job Queue Processes Se utilizeaz n cazul prelucrrilor serie care ruleaz lucrri programate pentru utilizatori (de obicei periodic). Sunt administrate dinamic. Archiver Processes (ARCn) Copiaz fiierele jurnal ntr-un spaiu de stocare separat, pentru arhivare. Pot exista mai multe procese de arhivare n paralel, pn la 10. LGWR starteaz automat numrul de procese necesar. Procesul este activ dac baza de date este setat n modul ARCHIVELOG. Queue Monitor Processes (QMNn) - este un proces opional pentru dac se utilizeaz facilitatea de lucru n flux. Pot fi pn la 10 procese. 2.4. Procesarea instruciunilor SQL Cele 5 instruciuni SQL: SELECT, UPDATE, MERGE (selecia datelor din din una sau mai multe surse i pentru a modifica sau nsera date ntr-un tabel sau ntr-o vedere), INSERT i DELETE se execut n mod diferit. Pe lng aceste instruciuni care intr n categoria DML (Data Manipulation Language), mai sunt instruciuni pentru definirea structurilor de date DDL (Data Definition Language). Paii la executarea unei interogri (SELECT) sunt: Analiza o Caut o instruciune identic o Verific sintaxa, numele obiectelor vizate i privilegiile (drepturile utilizatorului) o Blocheaz obiectele pe perioada analizei o Creeaz i stocheaz un plan de execuie Execut legtura ntre date i variabile Execut interogarea propriu-zis Returneaz rndurile procesului utilizator n cazul instruciunilor DML paii sunt - Analiza i legtura cu variabile sunt similare interogrilor - Execuie Arhitectura bazei de date Oracle - 16 -

Baze de date Oracle o Dac datele i blocurile undo nu sunt n memorie, atunci procesele din server aduc aceste informaii din fiierele de date n zona de manevr pentru date. o Procesele de pe server blocheaz rndurile care urmeaz a fi modificate. Blocurile undo sunt utilizate pentru stoca imaginea iniial a datelor, care pot fi restaurate ulterior o Blocurile de date din memorie nregistreaz noile valori o Procesele de pe server nregistreaz blocurile undo i modific blocurile de date. Ambele modificri au loc n zona de manevr pentru date (Database Buffer Cache). n cazul instruciunilor DDL (crearea de obiecte, acordarea de drepturi, etc) este specific faptul c utilizatorul acceseaz dicionarul bazei de date. Paii de execuie sunt analiza, blocarea dicionarului de date (zona modificat) i execuia.

Arhitectura bazei de date Oracle - 17 -

Baze de date Oracle

3. UNELTE DE BAZ PENTRU ADMINISTRARE


Oracle ofer o mai multe variante de administrare cum ar fi utilizarea comenzilor SQL Plus sau utilizarea unor utilitare puternice care uureaz munca de administrare. Aceste utilitare de administrare sunt o parte uneltele oferite de Oracle 10g. n acest capitol vom studia urmtoarele utilitare: - Oracle Universal Installer - Oracle Database Configuration Assistant - SQL Plus - Oracle Enterprise Manager 3.1. Oracle Universal Installer (OUI) Este un utilitar bazat pe tehnologia WEB care permite instalarea/configurarea componentelor Oracle (baze de date, dezvoltator de aplicaii, etc) utiliznd ca surs un CD sau o locaie http. Funciile principale sunt: instalarea produselor Oracle dezinstalare produselor Oracle clonarea unei instalri dintr-o surs ctre o alt destinaie pstrnd configuaia completarea i modificarea unor componente pentru eliminarea unor deficiene trecerea unei instalri la o versiune superioar Specific unei instalri oracle este Oracle Home. Oracle Home este un context n sistemul n care se execut componenta respectiv, iar n sistemul de operare WINDOWS are un folder separat. Contextul coninut de Oracle Home se refer la urmtoarele: directorul n care produsul Oracle este instalat setarea cii respective n variabila de mediu PATH grupul de programe asociate cu produsul respectiv serviciile de sistem care ruleaz pentru acest produs Exist mai multe moduri de instalare a unui produs Oracle: - modul interactiv utilizeaz o interfa grafic (GUI) n care utilizatorul trebuie s specifice, pas cu pas, configurrile solicitate. Se utilizeaz atunci cnd se instaleaz un numr mic de produse Oracle, pe un numr redus de calculatoare gazd. - modul interactiv cu rspunsuri preluate dintr-un fiier ASCII. Se utilizeaz atunci cnd configurrile instalrilor sunt comune pentru toate sistemele pe care se face instalarea. - modul tcut semn cu modul precedent, ns interfaa grafic nu mai este afiat Unelte pentru administrarea bazei de date - 18 -

Baze de date Oracle - modul de instalare cluster se utilizeaz atunci cnd se utilizeaz o baz de date n cluster (mai multe servere fizice care se comport n ansamblu ca o baz de date Oracle unic) OUI utilizeaz Java Runtime Environment (JRE) care trebuie s fie instalat, n versiunea solicitat, pe sistemul respectiv. De asemenea necesit minim 32 MB memorie i 60-70 MB spaiu pe disc. OUI se bazeaz pe un inventar al componentelor unui produs oracle. Inventarul este stocat n format XML (Extensible Markup Language). n sistemele WINDOWS inventarul este stocat n \Program Files\Oracle\Inventory. Exist un inventar central (pentru toate produsele Oracle) i inventare pe produse. 3.2. Oracle Database Configuration Assistant (DBCA) Este un utilitar puternic care permite crearea interactiv a unei baze de date. Se recomand a fi utilizat pentru crearea bazelor de date customizate, pentru un numr redus de instalri. Paii pentru crearea bazei de date sunt: 1. Conectarea la sistem cu drepturi de administrare. 2. Lansare DBCA WINDOWS Start > Programs > Oracle - home_name > Configuration and Migration Tools > Database Configuration Assistant UNIX la prompt dbca 3. Apare pagina Welcome. Se d click Next. 4. Se selecteaz Create a Database i se apas Next. 5. n pagina Database Templates se poate alege Data Warehouse, General Purpose sau Transaction Processing Data Warehouse se utilizeaz pentru stocarea volumelor de date de mari dimensiuni, avnd de obicei un caracter istoric. Accesul utilizatorilor la date este de obicei n citire. Transaction Processing se utilizeaz pentru baze de date cu un numr mare de utilizatori care modific datele n mod concurent. 6. n pagina Database Identification se introduce numele global al bazei de date sub forma nume_global.nume_domeniu i SID-ul bazei de date (Oracle system identifier). Numele (SID-ul) bazei de date trebuie s fie unic n domeniu. Se tasteaz Next. 7. n pagina Management Options se permite instalarea i configurarea Oracle Enterprise Manager. Dac este instalat Oracle Management Agent, atunci se poate selecta Use Grid Control for Database Management (adic managementul centralizat a tuturor bazelor de date din domeniu). Se apas Next. 8. Se introduce parola pentru administratorii bazei de date (SYS proprietarul bazei de date i SYSTEM). Poate fi setat o parol unic sau parole separate. Unelte pentru administrarea bazei de date - 19 -

Baze de date Oracle 9. Se selecteaz opiunea de stocare a datelor File System, Automatic Storage Management (dac sunt mai multe discuri fizice alocate bazei de date), sau Raw Devices (discuri neformatate administrate de Oracle). 10. Se specific locaiile pentru fiierele bazei de date. Opiunile sunt: Use Database File Locations from TemplatePermite stocarea fiierelor bazei de date n locaia specificat n model. Aceast opiune permite modificarea ulterioar a fiierelor bazei de date i a locaiilor. Use Common Location for All Database FilesPermite stabilirea unui nou home pentru fiierele bazei de date. i n acest caz se poate modifica ulterior locaia. Use Oracle-Managed FilesSe permite DBCA managemetul direct al fiierele bazei de date. 11. Se configureaz opiunile de restaurare a bazei de date. Se poate seta Flash Recovery Area (spaiu de manevr pentru salvarea unei zone intermediare de date) util pentru recuperare. Se poate seta opiunea de arhivarea a fiierelor jurnal. 12. Se selecteaz generarea schemelor de date tip exemplu utile pentru nvare i testare. 13. Se seteaz configurarea memoriei. Se poate alege: Typical se seteaz numai procentul din memoria fizic alocat bazei de date i se poate afia alocarea pentru SGA i PGA. Custom se poate configura mai detaliat memoria alocat 14. Se seteaz dimensiunea blocului de date care este unitatea de msur pentru transferul datelor. Implicit 8 kB. Se seteaz numrul maxim de procese utilizator conectate simultan la baza de date. Minim este 6, implicit 150. 15. Se seteaz setul de caractere utilizat n baza de date. Acesta este specific rii. Pentru Romnia se alege EE8ISO8859P2 sau EE8MSWIN1250. 16. Se seteaz modul de conectare a utilizatorilor la baza de date: Dedicated Server Mode se aloc spaiu de memorie separat pentru fiecare utilizator. Acest mod este util dac numrul de utilizatori este mic sau utilizatorii au sesiuni cu timpi mari de conectare. Shared Server Mode se aloc zon de memorie comun pentru mai muli utilizatori care pot fi servii n serie. Se precizez numrul de zone utilizator create la pornirea instanei. 17. Se afieaz configurarea fiierelor de stocare i se d comanda de creare a bazei de date. Modulul permite tergerea i modificarea bazei de date. 3.3. SQL Plus Este o component foarte important a bazei de date care se instaleaz cu orice variant de baz de date. Exist trei variante a componentei: Unelte pentru administrarea bazei de date - 20 -

Baze de date Oracle - varianta cu linie de comand - variant grafic (GUI) - varianta web (iSQL Plus). SQL Plus are propriile comenzi i mediu de lucru i ofer accesul la baza de date pentru administrare, configurare i testare. Permite introducerea i executarea comenzilor SQL, procedurilor PL/SQL i a comenzilor proprii SQL Plus. Pot fi executate urmtoarele operaii: generarea i executarea interogrilor SQL, cu formatarea rezultatelor examinarea structurilor i obiectelor bazei de date dezvoltarea i executarea unor pachete de comenzi SQL i proceduri PL/SQL administrarea bazei de date Lansarea SQL Plus se face din start menu. Dup activare trebuie introduse numele utilizatorului, parola i irul de conectare (figura 3.1):

Figura 3.1 Macheta pornire SQL Plus

irul de conectare este definit n fiierul tnsnames.ora situat n calea <oracle_home>\network\admin. Coninutul acestui fiier ASCII este de forma: ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.229)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) ) irul de conectare fiind ORCL. n acest fiier sunt precizate: - protocolul (de obicei TCP/IP) - gazda (host) se introduce numele serverului care gzduiete baza de date sau adresa de IP - portul de acces implicit 1521 - tipul accesului DEDICATED pentru situaia n care PGA este alocat fiecrui utilizator sau SHARED - numele instanei care gestioneaz baza de date n cazul nostru ORCL Unelte pentru administrarea bazei de date - 21 -

Baze de date Oracle Dup introducerea datelor de mai sus apare mediul GUI SQL Plus (figura 3.2)

Figura 3.2 Mediul SQL Plus

Dup conectare se poate schimba utilizatorul cu comenzi de forma: SQL> connect utilizator/parol@ir_de_conectare, de exemplu SQL> connect system/george@orcl Ieirea din mediu se face cu c-da: SQL> EXIT SQL Plus permite manevrarea comenzilor potrivit tabelului 3.1:
Tabelul 3.1 Comenzi din tastatur SQL Plus

Comanda Home End Page Up Page Down CTRL + Page Up CTRL + Page Down ALT+F3 F3 CTRL+C CTRL+C CTRL+V SHIFT+DEL

Descriere Deplasarea la nceputul buferului ecran Deplasarea la sfritul buferului ecran Afiare pagin precedent bufer ecran Afiare pagin urmtoare bufer ecran Afiare partea stng ecran curent Afiare partea dreapt ecran curent Cutare Continu cutarea Copiere (dac nu este n execuie o comand) Oprete comanda n curs de execuie Paste terge buferul ecran

Introducerea i executarea comenzilor SQL Plus Exist comenzi proprii ale mediului i comenzi adresate bazei de date la care suntem conectai. Comenzile adresate bazei de date se termin cu caracterul ;. De exemplu: Unelte pentru administrarea bazei de date - 22 -

Baze de date Oracle


SQL> connect hr/hr@orcl SQL> select * from departments;
DEPARTMENT_ID ------------10 20 30 40 50 60 70 80 90 100 110 DEPARTMENT_NAME MANAGER_ID LOCATION_ID ------------------------------ ---------- ----------Administration 200 1700 Marketing 201 1800 Purchasing 114 1700 Human Resources 203 2400 Shipping 121 1500 IT 103 1400 Public Relations 204 2700 Sales 145 2500 Executive 100 1700 Finance 108 1700 Accounting 205 1700

Principalele comenzi proprii ale mediului sunt:


Tabelul 3.2 Comenzi proprii ale mediului SQL Plus
Comanda @ @@ Descriere Execut fiierul script specificat Execut fiierul script specificat care lanseaz alte scripturi cutate n acelai folder Execut ultima c-d SQL sau bloc PL/SQL Citete de la consol o linie i stocheaz ntr-o variabil Specific formatri care se vor efectua n rapoarte Calculeaz i afieaz linii de sumar sau afieaz definiiile COMPUTE Exemplu @d:\oracle\test.sql @@d:\oracle\test_nou.sql

/ ACCEPT BREAK COMPUTE

CONNECT CLEAR COLUMN

Conectarea unui utilizator la baza de date terge definiii anterioare pentru BREAK, COMPUTE, SQL Specific atributele afirii pentru coloane, cum ar fi: - text cap coloan - alinierea text cap coloan - formatarea numerelor - scrierea coninutului coloanei pe mai multe linii Descrie structura unui obiect al bazei de date Deconectarea utilizatorului curent de la baza de date Editeaz (cu un editor text) ultima c-d SQL sau un fiier ASCII

Accept nume char prompt "Introduceti numele:" BREAK ON DEPARTMENT_ID SKIP PAGE BREAK ON JOB_ID SKIP 1; COMPUTE SUM LABEL 'TOTAL' OF SALARY ON JOB_ID; SELECT JOB_ID, LAST_NAME, SALARY FROM EMP_DETAILS_VIEW WHERE JOB_ID IN ('AC_MGR', 'SA_MAN') ORDER BY JOB_ID, SALARY; CONN sys/george@orcl AS SYSDBA CLEAR BREAKS COLUMN last_name HEA Nume salariat JUS C COLUMN salary HEA Salariu JUS C format 99999.99 SELECT last_name, salary from employees order by salary desc; DESCR employeees DISC ED

DESCRIBE DISCONNECT EDIT

Unelte pentru administrarea bazei de date - 23 -

Baze de date Oracle


EXECUTE Execut o instruciune PL/SQL Variable xxx varchar2(50) Execute select last_name into :xxx from employees where employee_id=100 GET d:\Oracle\tes.sql HELP ACCEPT HOST dir PASSWORD hr PAU <Tastati ENTER> PRINT xxx PROMPT Acum introduceti x RECOVER DATABASE REMARK Acum testez procedura SQL SAVE TEST SET PAUSE ON SET PAUSE Tastati <ENTER> SPOOL raspuns.txt SPOOL OFF START test.sql STARTUP PFILE=D:\Oracle\orcl.ini OPEN SHUTDOWN VARIABLE xxx varchar2(50)

GET HELP HOST PASSWORD PAUSE PRINT PROMPT RECOVER REMARK RUN SAVE SET SPOOL START STARTUP SHUTDOWN VARIABLE

ncarc un fiier din sistem n buferul SQL Plus Ofer informaii despre comenzile proprii ale mediului Transmite o comand sistemului de operare Modific parola unui utilizator Afieaz un test atunci cnd utilizatorul trebuie s apese o tast Afieaz valoarea unei variabile de legtur Afieaz un mesaj pe ecran Recuperarea datelor pentru una sau mai multe tablespace, fiiere de date sau ntrega baz de date Comentariu ntr-un script Echivalent cu / Salveaz buferul SQL ntr-un fiier sistem Seteaz caracteristicile mediului SQL Plus Permite salvarea rspunsurilor ntr-un fiier al sistemului de operare Similar @, @@ Pornete o instan Oracle Oprete o instan Oracle Definete o variabil de legtur util pentru proceduri PL/SQL

3.4. Oracle Enterprise Manager (OEM) Este o component important pentru administrarea bazei de date Oracle care utilizeaz tehnologia web. Principalele activiti care pot fi efectuate sunt: - crearea i modificarea obiectelor bazei de date cum ar fi tablespace, tabele, indeci - administrarea utilizatorilor bazei de date - salvri i recuperri ale bazei de date - importul i exportul de date - monitorizarea bazei de date Pentru funcionarea OEM trebuie s fie activat serviciul aferent n sistemul de operare. Pentru WINDOWS acesta are numele: OracleDBConsoleORACLE_SID. Lansarea OEM se face din Internet Explorer la adresa:
http://hostname:portnumber/em

unde hostname este gazda bazei de date (IP sau nume server), iar portnumber numrul portului pentru care a fost configurat (implicit 1158). Unelte pentru administrarea bazei de date - 24 -

Baze de date Oracle

Figura 3.3 Pagina de nceput OEM

Dup lansare se afieaz pagina din figura 3.3 din care se pot activa opiunile dorite.

Unelte pentru administrarea bazei de date - 25 -

Baze de date Oracle

4. MANAGEMENTUL UNEI INSTANE ORACLE


4.1. Parametrii de iniializare Configurarea unei baze de date Oracle i funcionalitile de baz sunt stabilite n parametrii de iniializare. Acetia sunt ncrcai o dat cu pornirea instanei. Unii dintre ei sunt setai la crearea bazei de date, alii pot fi modificai ulterior. Parametrii de iniializare se mpart ntr-o serie de grupuri de iniializare. Principalele funciuni pentru parametrii de iniializare sunt: setarea limitelor pentru ntreaga baz de date setarea limitelor pentru utilizatori i procese setarea limitelor resurselor pentru baza de date mbuntirea performanelor bazei de date (parametrii variabili) Administratorii bazei de date pot utiliza parametrii de iniializare pentru: optimizarea performanei prin ajustarea structurii memoriei cum ar fi numrul de bufere de memorie setarea limitelor bazei de date cum ar fi numrul maxim de utilizatori specific numele de fiierelor sau directoarelor cerute de baza de date Parametrii de iniializare pot fi stocai n dou variante: - fiier de parametrii server (SPFILE), binar - fiier de iniializare independent (PFILE), ASCII Parametrii de iniializare sunt memorai implicit n SPFILE. SPFILE este \stocat de obicei n <Oracle_home>\dbs. La crearea bazei de date se genereaz un fiier ASCII cu parametrii de iniializare ASCII dar ulterior el nu mai este actualizat. Avantajul utilizrii SPFILE este acela c la pornirea de la distan a unei baze de date nu este necesar existena unei copii locale (pe sistemul de pe care se face startarea). La pornirea manual se poate ns specifica un fiier de iniializare separat (ASCII) tip PFILE. De asemenea se poate crea o copie ASCII a SPFILE cu o c-d de forma: SQL> create pfile='D:\Oracle\product\10.2.0\db_1\dbs\Hazi_init.ora' from SPFILE='D:\Oracle\product\10.2.0\db_1\dbs\spfileHazi.ora'; Afiarea valorilor curente ai parametrilor se face cu c-da: SQL> SHOW PARAMETERS Parametrii care sunt modificabili pot fi schimbai cu una din comenzile:
ALTER SESSION SET parameter_name = value ALTER SYSTEM SET parameter_name = value [DEFERRED]

Parametrii de baz sunt dai n tabelul 4.1. Mangementul unei instane Oracle - 26 -

Baze de date Oracle


Tabelul 4.1 Parametrii de iniializare principali Nr. Crt. 1. 2. 3. 4. Nume parametru CLUSTER_DATABASE COMPATIBLE CONTROL_FILES DB_BLOCK_SIZE Descriere Specific dac baza de date funcioneaz n modul Real Application Clusters Specific compatibilitatea cu versiuni mai vechi Specific fiierele de control ale bazei de date Specific dimensiunea blocurilor de date care reprezint unitatea de pentru manipularea datelor Specific locaia pentru fiierele de date Oracle. Se specific calea sau grupul de discuri Prezint locaia logic a bazei de date n reea Specific identificatorul bazei de date (pn la 8 caractere) Specific locaia pentru zona de restaurare a bazei de date. Se specific calea sau grupul de discuri. Specific n bytes dimensiunea spaiului alocat pentru zona de recuperare Specific numrul maxim de procese care pot fi create pentru executarea unei lucrri Specific fiierul curent care stocheaz arhiva de jurnale Specific limba implicit pentru mesajele bazei de date. Specific numele rii pentru numerotarea zilelor i sptmnilor Specific numrul maxim de cursoare deschise simultan Specific dimensiunea pentru operaii de manevr n zona Valoare/ Implicit True/false False minim 9.2.0 10.0.0 1-8 nume de fiiere 2048 -32768 8192 \Oracle\ product\ 10.2.0\orada ta\SID Nu \Oracle\prod uct\10.2.0\fl ash_recover y_area\SID Da Modifica bil Nu Nu Nu Nu

5.

DB_CREATE_FILE_DE ST DB_DOMAIN DB_NAME DB_RECOVERY_FILE _DEST DB_RECOVERY_FILE _DEST_SIZE JOB_QUEUE_PROCES SES LOG_ARCHIVE_DEST _n NLS_LANGUAGE NLS_TERRITORY OPEN_CURSORS PGA_AGGREGATE_T ARGET

Da

6. 7. 8.

Nu

9. 10. 11. 12. 13. 14. 15.

Da 0-999 0 Da Da Pentru Romnia: romanian La noi Romania 0-65535 50 10 MB sau 20% Da Da Da Da

Mangementul unei instane Oracle - 27 -

Baze de date Oracle


16. 17. 18. PROCESSES REMOTE_LISTENER REMOTE_LOGIN_PAS SWORDFILE ROLLBACK_SEGMEN TS SESSIONS utilizator (de ex. Sortri) Specific numrul maxim de procese utilizator Specific numele sistemului n care ruleaz LISTENER-ul (dac acesta nu ruleaz local) Specific dac se verific fiierul de parole. Pentru NONE accesul este acordat de sistemul de operare Specific (dup nume) un segment pentru operaiile nedefinitive care va fi utilizat de instan Parametru derivat din PROCESSES care indic numrul maxim de sesiuni (exist i sesiuni sistem) Specific dimensiunea maxim pentru procesele din SGA. Dac este precizat, dimensiunile proceselor Buffer cache (DB_CACHE_SIZE) Shared pool (SHARED_POOL_SIZE) Large pool (LARGE_POOL_SIZE) Java pool (JAVA_POOL_SIZE) Streams pool (STREAMS_POOL_SIZE) sunt alocate automat Specific numrul de procese utilizator alocate la pornirea instanei dac modul de lucru este SHARED Specific modul n care se aplic optimizarea interogrilor bazei de date SGA Min. 6 implicit 40 Nu Da NONE sau SHARED Nu

19.

Nu

20.

Nu

21.

SGA_TARGET

Da

22.

SHARED_SERVERS

MAX_SHA RED_ SERVERS

Da

23.

STAR_TRANSFORMA TION_ENABLED UNDO_MANAGEMEN T UNDO_TABLESPACE

24. 25.

TRUE FALSE TEMP_DIS ABLE Specific modul de alocare a AUTO segmentelor pentru tranzaciile MANUAL nedefinitive Specific numele pentru Primul liber tablespace n care se aloc automat segmentele UNDO

Da

Nu Da

Mangementul unei instane Oracle - 28 -

Baze de date Oracle 4.2. Pornirea i oprirea bazei de date Dup instalarea bazei de date pe sistemul gazd se creeaz o serie de servicii care pot fi gestionate de sistemul de operare. De exemplu pe sistemele WINDOWS, aceste servicii sunt date n figura 4.1.

Figura 4.1 Servicii aferente BD Oracle pentru platformele WINDOWS

Serviciile artate n figur au urmtoarele funciuni: - DBConsole serviciu utilizat de OEM - ClrAgent este utilizat n modul .NET pentru proceduri externe cu mai multe ramuri executate simultan (control i configurare) - JobScheduler programarea lucrrilor n baza de date - TNSListener serviciu de ascultare pentru conectarea clienilor la baza de date - ServiceSID baza de date propriu-zis Pentru funcionarea bazei de date sunt necesare ultimele dou. Rezult c un mod comod pentru pornirea/oprirea bazei de date este acela de a porni/opri aceste servicii. Pornirea/oprirea se poate face din sistemul de operare (figura 4.2).

Figura 4.2 Pornire servicii n baza de date n WINDOWS

Pornirea se poate face manual prin click pe Start. Pornirea se poate face i automat, la ncrcarea sistemului de operare, setnd Startup type pe Automatic. Oprirea se poate face manual prin click pe Stop.

Mangementul unei instane Oracle - 29 -

Baze de date Oracle O alt variant de a porni/opri baza de date este utilizarea SQL Plus. Varianta este mai flexibil oferind mai multe opiuni necesare pentru administrare. ns pentru a funciona din SQL Plus instana trebuie s aib serviciul rezident. Pornirea se face cu c-da startup (figura 4.3):

Figura 4.3 Pornire baza de date cu SQL Plus

Exist cteva opiuni ale comenzii: - nomount utilizat n procesul de creare a bazei de date - mount utilizat pentru operaii de administrare cum ar fi restaurarea bazei de date dup un incident, sau pentru activarea sau dezactivarea arhivrii fiierelor jurnal - open deschidere pentru lucru - restrict baza de date deschis dar nu se permite conectarea utilizatorilor obinuii, lucru util pentru salvri sau alte aciuni de administrare. Dac s-a pornit baza de date cu c-da nomount, montarea bazei de date se face cu c-da: SQL> ALTER DATABASE MOUNT; Apoi: SQL> ALTER DATABASE OPEN; Trecerea la o sesiune cu restricii se face cu c-da: SQL> ALTER SESSION ENABLE RESTRICTED SESSION; Oprirea se face cu c-da shutdown (figura 4.4):
Figura 4.4 Oprire baza de date cu SQL Plus

Alte opiuni de oprire sunt: - abort se abandoneaz tranzaciile n curs i se oprete baza de date. La urmtoarea pornire se activeaz procedura de recuperare. - immediate nu se permite noi conexiuni, tranzaciile necomise se abandoneaz se deconecteaz utilizatorii i se oprete baza de date; - transactional se permite nchiderea tranzaciilor ncepute nainte de oprire. Baza de date poate fi pornit/oprit i cu ajutorul utilitarului Recovery Manager, RMAN. Mangementul unei instane Oracle - 30 -

Baze de date Oracle De asemenea pornirea/oprirea bazei de date se poate face i cu OEM (figura 4.5).

Figura 4.5 Oprire baza de date cu OEM

La utilizarea OEM, pornirea, oprirea se face cu confirmarea parolei pentru sistemul pe care este instalat baza de date. O instan Oracle poate fi pornit i cu o c-d dat din sistemul de operare: > ORADIM STARTUP SID nume_sid SPFILE iar serviciul de listener se pornete cu c-da: > LSNRCTL START Oprirea cu utilitarul ORADIM: > ORADIM SHUTDOWN SID nume_sid SHUTMODE IMMEDIATE > LSNRCTL STOP.

Mangementul unei instane Oracle - 31 -

Baze de date Oracle

5. CREAREA UNEI BAZE DE DATE


5.1. Cerine pentru crearea unei baze de date Exist mai multe variante pentru crearea unei baze de date: Utilizarea Database Configuration Assistant (DBCA) aa cum am artat la paragraful 3.2. Utilizarea comenzii CREATE DATABASE. n aceast variant sunt necesare cteva aciuni suplimentare cum ar fi crearea utilizatorilor, crearea tablespace temporar, generarea vederilor din dicionarul bazei de date, precum i instalarea pachetelor de proceduri stocate n baza de date. Toate acestea se realizeaz prin lansarea unor scripturi, majoritatea dintre ele fiind livrate cu baza de date. Asemenea scripturi pot fi generate opional cu DBCA. Ele pot fi editate ulterior pentru a fi generat o baz de date customizat. De asemenea o baz de date ntr-o versiune mai veche (de exemplu 7,8,9) poate fi upgradat la versiunea 10g. nainte de crearea unei baze este necesar planificarea dimensiunilor i structurii acesteia. Principalele activiti n acest sens sunt: estimarea spaiului necesar pentru tabele de date i indeci; stabilirea amplasamentului pe harddiscuri a fiierelor bazei de date; stabilirea numelui global al bazei de date, prin stabilirea variabilelor de iniializare DB_NAME, DB_DOMAIN; analiza i stabilirea datelor din fiierul de iniializare stabilirea setului de caractere pentru stocarea datelor. Dac utilizatori diferii utilizeaz seturi de caractere diferite (de exemplu englez i romn) atunci trebuie ales un set care include toate caracterele. Se recomand setul AL32UTF8 care acoper tipurile de date XML. stabilirea dimensiunii blocului de date DB_BLOCK_SIZE. Acesta nu poate fi modificat ulterior. La crearea unor tablespace-uri noi poate fi stabilit i o alt dimensiune a blocului de date. stabilirea dimensiunii pentru tablespace sistem SYSAUX. Acesta conine date auxiliare din tablespace SYSTEM (faciliti extensii). stabilirea unui tablespace implicit pentru utilizatori pentru a evita accesul utilizatorilor la tablespace SYSTEM. Automat se creeaz tablespace USERS. planificarea realizrii unui tablespace pentru segmentele UNDO. proiectarea unui sistem de salvri i restaurri pentru evitarea pierderii datelor. studierea opiunilor de lansare i oprire a unei instane ORACLE. naintea de crearea unei baze de date trebuie s fie ndeplinite urmtoarele condiii: modulele ORACLE necesare trebuie s fie instalate (ORACLE_HOME, cile i utilitarele necesare) Crearea unei baze de date - 32 -

Baze de date Oracle utilizatorul trebuie s aib drepturi de administrare pe sistemul respectiv sistemul respectiv s aib memorie suficient (de obicei >= 1 GB RAM) pentru ca instana s porneasc suficient spaiu pe disk pentru stocarea fiierelor de date. Crearea automat a bazei a fost prezentat la prezentarea DBCA. 5.2. Crearea manual a bazei de date La crearea manual a bazei de date se scriu scripturi manual sau automat dup care acestea se lanseaz secvenial, urmrind la fiecare pas rezultatele. nainte de lansarea procesului de creare a bazei de date trebuie creat un fiier de iniializare. Coninutul unui fiier de iniializare:
######################################################################## # Copyright (c) 1991, 2001, 2002 by Oracle Corporation ######################################################################## ########################################### # Cache and I/O ########################################### db_block_size=8192 db_file_multiblock_read_count=16 ########################################### # Cursors and Library Cache ########################################### open_cursors=300 ########################################### # Database Identification ########################################### db_domain="" db_name=test ########################################### # Diagnostics and Statistics ########################################### background_dump_dest=D:\oracle\product\10.2.0\admin\test\bdump core_dump_dest=D:\oracle\product\10.2.0\admin\test\cdump user_dump_dest=D:\oracle\product\10.2.0\admin\test\udump ########################################### # File Configuration ########################################### control_files=("D:\oracle\product\10.2.0\oradata\test\control01.ctl", "D:\oracle\product\10.2.0\oradata\test\control02.ctl", "D:\oracle\product\10.2.0\oradata\test\control03.ctl") db_recovery_file_dest=D:\oracle\product\10.2.0\flash_recovery_area db_recovery_file_dest_size=2147483648 ########################################### # Job Queues ########################################### job_queue_processes=10 ########################################### # Miscellaneous ########################################### compatible=10.2.0.1.0 ########################################### # NLS ########################################### nls_language="ROMANIAN" nls_territory="ROMANIA"

Crearea unei baze de date - 33 -

Baze de date Oracle


########################################### # Processes and Sessions ########################################### processes=150 ########################################### # SGA Memory ########################################### sga_target=167772160 ########################################### # Security and Auditing ########################################### audit_file_dest=D:\oracle\product\10.2.0\admin\test\adump remote_login_passwordfile=EXCLUSIVE ########################################### # Shared Server ########################################### dispatchers="(PROTOCOL=TCP) (SERVICE=testXDB)" ########################################### # Sort, Hash Joins, Bitmap Indexes ########################################### pga_aggregate_target=16777216 ########################################### # System Managed Undo and Rollback Segments ########################################### undo_management=AUTO undo_tablespace=UNDOTBS1

n continuare prezentm un exemplu de script pentru crearea unei baze de date. A. Fiierul de comenzi (BAT) principal: mkdir D:\oracle\product\10.2.0\admin\test\adump mkdir D:\oracle\product\10.2.0\admin\test\bdump mkdir D:\oracle\product\10.2.0\admin\test\cdump mkdir D:\oracle\product\10.2.0\admin\test\dpdump mkdir D:\oracle\product\10.2.0\admin\test\pfile mkdir D:\oracle\product\10.2.0\admin\test\udump mkdir D:\oracle\product\10.2.0\db_1\cfgtoollogs\dbca\test mkdir D:\oracle\product\10.2.0\db_1\database mkdir D:\oracle\product\10.2.0\flash_recovery_area mkdir D:\oracle\product\10.2.0\oradata\test set ORACLE_SID=test D:\oracle\product\10.2.0\db_1\bin\oradim.exe -new -sid TEST -startmode manual -spfile D:\oracle\product\10.2.0\db_1\bin\oradim.exe -edit -sid TEST -startmode auto srvcstart system D:\oracle\product\10.2.0\db_1\bin\sqlplus /nolog @D:\oracle\product\10.2.0\admin\test\scripts\test.sql Se observ c primele linii creeaz folderele necesare pentru crearea i stocarea bazei de date. - adump (audit dump) conine fiiere ASCII de auditare a bazei de date - bdump (background dump) mesaje de alertare a emise de baza de date Crearea unei baze de date - 34 -

Baze de date Oracle - cdump (core dump) mesaje emise de procesele din baza de date cnd sunt probleme grave - pfile folderul care conine pfile generat la crearea bazei de date - udump (user dump) mesaje generate de utilizatori DBA sau dezvoltatori Comenzile care lanseaz ORADIM creeaz efectiv instana Oracle (prima) i o reconfigureaz (a doua). Ultima linie lanseaz SQLPLUS i scriptul test.sql care lanseaz succesiv scripturile pentru crearea i configurarea bazei de date. B. Scriptul test.sql set verify off PROMPT specify a password for sys as parameter 1; DEFINE sysPassword = &1 PROMPT specify a password for system as parameter 2; DEFINE systemPassword = &2 PROMPT specify a password for sysman as parameter 3; DEFINE sysmanPassword = &3 PROMPT specify a password for dbsnmp as parameter 4; DEFINE dbsnmpPassword = &4 host D:\oracle\product\10.2.0\db_1\bin\orapwd.exe file=D:\oracle\product\10.2.0\db_1\database\PWDtest.ora password=&&sysPassword force=y @D:\oracle\product\10.2.0\admin\test\scripts\CreateDB.sql @D:\oracle\product\10.2.0\admin\test\scripts\CreateDBFiles.sql @D:\oracle\product\10.2.0\admin\test\scripts\CreateDBCatalog.sql @D:\oracle\product\10.2.0\admin\test\scripts\JServer.sql @D:\oracle\product\10.2.0\admin\test\scripts\odm.sql @D:\oracle\product\10.2.0\admin\test\scripts\context.sql @D:\oracle\product\10.2.0\admin\test\scripts\xdb_protocol.sql @D:\oracle\product\10.2.0\admin\test\scripts\ordinst.sql @D:\oracle\product\10.2.0\admin\test\scripts\interMedia.sql @D:\oracle\product\10.2.0\admin\test\scripts\cwmlite.sql @D:\oracle\product\10.2.0\admin\test\scripts\spatial.sql @D:\oracle\product\10.2.0\admin\test\scripts\emRepository.sql @D:\oracle\product\10.2.0\admin\test\scripts\netExtensions.sql @D:\oracle\product\10.2.0\admin\test\scripts\postDBCreation.sql Linia host orapwd lanseaz utilitarul orapwd.exe i nregistreaz utilizatorul sys ca avnd drepturi de administrare (SYSDBA). Urmtoarele linii lanseaz alte scripturi pentru crearea i configurarea bazei de date. C. Scriptul pentru crearea bazei de date, CreateDB.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool D:\oracle\product\10.2.0\admin\test\scripts\CreateDB.log startup nomount pfile="D:\oracle\product\10.2.0\admin\test\scripts\init.ora"; CREATE DATABASE "test" MAXINSTANCES 8 Crearea unei baze de date - 35 -

Baze de date Oracle MAXLOGHISTORY 1 MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 DATAFILE 'D:\oracle\product\10.2.0\oradata\test\system01.dbf' SIZE 300M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE 'D:\oracle\product\10.2.0\oradata\test\sysaux01.dbf' SIZE 120M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE 'D:\oracle\product\10.2.0\oradata\test\temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE 'D:\oracle\product\10.2.0\oradata\test\undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED CHARACTER SET EE8ISO8859P2 NATIONAL CHARACTER SET AL16UTF16 LOGFILE GROUP 1 ('D:\oracle\product\10.2.0\oradata\test\redo01.log') SIZE 51200K, GROUP 2 ('D:\oracle\product\10.2.0\oradata\test\redo02.log') SIZE 51200K, GROUP 3 ('D:\oracle\product\10.2.0\oradata\test\redo03.log') SIZE 51200K USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword"; spool off D. Scriptul pentru crearea fiiere de date CreateDBFiles.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool D:\oracle\product\10.2.0\admin\test\scripts\CreateDBFiles.log CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE 'D:\oracle\product\10.2.0\oradata\test\users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; ALTER DATABASE DEFAULT TABLESPACE "USERS"; spool off E. Scriptul pentru crearea vederilor din baza de date CreateDBCatalog.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool D:\oracle\product\10.2.0\admin\test\scripts\CreateDBCatalog.log @D:\oracle\product\10.2.0\db_1\rdbms\admin\catalog.sql; @D:\oracle\product\10.2.0\db_1\rdbms\admin\catblock.sql; @D:\oracle\product\10.2.0\db_1\rdbms\admin\catproc.sql; @D:\oracle\product\10.2.0\db_1\rdbms\admin\catoctk.sql; @D:\oracle\product\10.2.0\db_1\rdbms\admin\owminst.plb; connect "SYSTEM"/"&&systemPassword" @D:\oracle\product\10.2.0\db_1\sqlplus\admin\pupbld.sql; Crearea unei baze de date - 36 -

Baze de date Oracle connect "SYSTEM"/"&&systemPassword" set echo on spool D:\oracle\product\10.2.0\admin\test\scripts\sqlPlusHelp.log @D:\oracle\product\10.2.0\db_1\sqlplus\admin\help\hlpbld.sql helpus.sql; spool off F. Script pentru configurarea serverului pentru a lula Java JServer.sql connect "SYS"/"&&sysPassword" as SYSDBA set echo on spool D:\oracle\product\10.2.0\admin\test\scripts\JServer.log @D:\oracle\product\10.2.0\db_1\javavm\install\initjvm.sql; @D:\oracle\product\10.2.0\db_1\xdk\admin\initxml.sql; @D:\oracle\product\10.2.0\db_1\xdk\admin\xmlja.sql; @D:\oracle\product\10.2.0\db_1\rdbms\admin\catjava.sql; @D:\oracle\product\10.2.0\db_1\rdbms\admin\catexf.sql; spool off G. Scripul pentru configurarea final a bazei de date onnect "SYS"/"&&sysPassword" as SYSDBA set echo on spool D:\oracle\product\10.2.0\admin\test\scripts\postDBCreation.log connect "SYS"/"&&sysPassword" as SYSDBA set echo on create spfile='D:\oracle\product\10.2.0\db_1\database\spfiletest.ora' FROM pfile='D:\oracle\product\10.2.0\admin\test\scripts\init.ora'; shutdown immediate; connect "SYS"/"&&sysPassword" as SYSDBA startup ; alter user SYSMAN identified by "&&sysmanPassword" account unlock; alter user DBSNMP identified by "&&dbsnmpPassword" account unlock; select 'utl_recomp_begin: ' || to_char(sysdate, 'HH:MI:SS') from dual; execute utl_recomp.recomp_serial(); select 'utl_recomp_end: ' || to_char(sysdate, 'HH:MI:SS') from dual; host D:\oracle\product\10.2.0\db_1\bin\emca.bat -config dbcontrol db -silent DB_UNIQUE_NAME test -PORT 1521 -EM_HOME D:\oracle\product\10.2.0\db_1 LISTENER LISTENER -SERVICE_NAME test -SYS_PWD &&sysPassword -SID test -ORACLE_HOME D:\oracle\product\10.2.0\db_1 -DBSNMP_PWD &&dbsnmpPassword -HOST hga -LISTENER_OH D:\oracle\product\10.2.0\db_1 LOG_FILE D:\oracle\product\10.2.0\admin\test\scripts\emConfig.log -SYSMAN_PWD &&sysmanPassword; spool D:\oracle\product\10.2.0\admin\test\scripts\postDBCreation.log exit; Dup crearea bazei de date reconfigurarea acesteia se face prin comenzi SQL, cele mai utilizate fiind ALTER DATABASE, ALTER SYSTEM, ALTER SESSION. Crearea unei baze de date - 37 -

Baze de date Oracle

6. DICIONARUL BAZEI DE DATE I VEDERI


6.1. Obiecte ale bazei de date Pe lng date, o baz de date Oracle conine o serie de obiecte necesare administrrii i bunei funcionri. Cele mai importante dintre acestea sunt: dicionarul bazei de date cuprinde descrierea obiectelor coninute n baza de date tablele cu performana dinamic conine informaii folosite de administratorii bazei de date pentru monitorizare i mrirea performanelor acesteia pachete PL/SQL stocate uniti de program care completeaz funcionalitile bazei de date. Ele sunt create cu pachetul catproc.sql, rulat dup crearea bazei de date. trigere proceduri lansate la diferite evenimente n baza de date, cum ar fi modificarea tabelelor de date sau a vederilor. Dicionarul bazei de date cuprinde un set de tabele i vederi read only care conin informaii despre baza de date. Dicionarul este actualizat atunci cnd se execut comenzi de definire sau modificare a structurilor de date (DDL Data definition language). De asemenea execuia comenzilor DML (Data manipulation language), care pot duce la extinderea tabelelor, conduc la modificarea dicionarului. Dicionarul este important nu numai pentru administratori, ci i pentru utilizatori obinuii i proiectanii de aplicaii. Pentru a se accesa dicionarul bazei de date se utilizeaz comenzi SQL. Dicionarul bazei de date cuprinde dou pri: tabele de baz conin informaii despre baza de date. Aceste tabele sunt create o dat cu baza de date (comanda CREATE DATABASE). n aceste tabele datele sunt scrise numai de ctre serverul Oracle. Multe dintre informaii sunt stocate criptat. Un exemplu de tabele de baz este IND$ care conine informaii despre indecii din baza de date. Toate informaiile sunt stocate n tablespace SYSTEM. vederi ale bazei de date acestea sunt interogri ale tabelelor de baz care ofer informaii pentru utilizatori. Vederile din baza de date sunt create de scriptul catalog.sql, script rulat dup crearea bazei de date. Vederile bazei de date ofer informaii despre: structura logic i fizic a bazei de date; definiia i alocarea de spaiu pentru obiecte (tabele, vederi, indeci, sinonime, secvene, proceduri, funcii, pachete, trigere, etc) valori implicite ale coloanelor; restriciile bazei de date; utilizatori; roluri; privilegii ale utilizatorilor; Dicionarul bazei de date i vederi - 38 -

Baze de date Oracle rezultate ale auditrii bazei de date, cum ar fi cine a accesat sau modificat obiecte ale bazei de date. Dicionarul bazei de date este utilizat de Oracle pentru a gsi informaii despre utilizatori, obiectele din scheme i structuri de stocare. Orice utilizator Oracle poate accesa n citire dicionarul pentru informaii despre baza de date. Pentru vederile bazei de date s-au create sinonime publice. Mare parte din dicionar este reinut n SGA pentru acces rapid. O parte dintre vederile bazei de date sunt accesibile tuturor utilizatorilor, pe cnd altele sunt accesibile numai unor utilizatori. Vederile bazei de date sunt statice i dinamice. 6.2. Vederi statice ale bazei de date Se refer la informaiile statice ale bazei de date, care sunt reflectate de tabele. Exist trei seturi de vederi statice, prefixate ca atare: - DBA arat informaii despre ntreaga baz de date. Sunt accesibile numai utilizatorilor cu privilegiul SELECT ANY TABLE. Acest privilegiu este acordat utilizatorilor care au atribuit rolul DBA. - ALL arat informaii despre toate obiectele la care utilizatorul are acces, cuprinznd obiectele din schema proprie ct i din alte scheme asupra crora are drepturi n citire. - USER arat informaii numai despre obiectele utilizatorului curent. Nu sunt necesare privilegii pentru a fi accesate. n continuare vom prezenta cteva vederi utilizate mai des. 1. DBA_USERS afieaz informaii despre utilizatorii bazei de date. Vederea conine urmtoarele cmpuri:
Coloana USERNAME USER_ID PASSWORD Tip cmp VARCHAR2(30) NUMBER VARCHAR2(30) NULL NOT NULL ID utilizator Parola criptat NOT NULL Starea contului:

Descriere

NOT NULL Nume utilizator

ACCOUNT_STATU VARCHAR2(32) S

OPEN EXPIRED EXPIRED(GRACE) LOCKED(TIMED) LOCKED EXPIRED & LOCKED(TIMED) EXPIRED(GRACE) & LOCKED(TIMED) EXPIRED & LOCKED

Dicionarul bazei de date i vederi - 39 -

Baze de date Oracle


Coloana Tip cmp NULL

Descriere EXPIRED(GRACE) & LOCKED

LOCK_DATE EXPIRY_DATE

DATE DATE

Data la care contul a fost blocat dac starea lui este LOCKED Data expirrii contului NOT NULL Tablespace implicit pentru date NOT NULL Tablespace temporar implicit NOT NULL Data crerii utilizatorului NOT NULL Numele profilului utilizatorului Grupul n care este ncadrat utilizatorul din punt de vedere al alocrii resurselor Nume extern al utilizatorului

DEFAULT_TABLE VARCHAR2(30) SPACE TEMPORARY_TAB VARCHAR2(30) LESPACE CREATED PROFILE DATE VARCHAR2(30)

INITIAL_RSRC_CO VARCHAR2(30) NSUMER_GROUP EXTERNAL_NAME VARCHAR2(400 0)

Exemplu
SQL> select username, user_id, account_status, default_tablespace, temporary_tablespace from dba_users;
USERNAME USER_ID ACCOUNT_STATUS DEFAULT_TABLESPACE TEMPORARY_ TABLESPACE -----------------------------------------------------------------------------SYS 0 OPEN SYSTEM TEMP SYSTEM 5 OPEN SYSTEM TEMP ANONYMOUS 28 OPEN SYSAUX TEMP HR 33 OPEN USERS TEMP MDSYS 32 EXPIRED & LOCKED SYSTEM TEMP OUTLN 11 EXPIRED & LOCKED SYSTEM TEMP DIP 18 EXPIRED & LOCKED SYSTEM TEMP TSMSYS 20 EXPIRED & LOCKED SYSTEM TEMP FLOWS_FILES 34 EXPIRED & LOCKED SYSAUX TEMP CTXSYS 25 EXPIRED & LOCKED SYSAUX TEMP DBSNMP 23 EXPIRED & LOCKED SYSAUX TEMP FLOWS_020100 35 EXPIRED & LOCKED SYSAUX TEMP XDB 27 EXPIRED & LOCKED SYSAUX TEMP 13 nregistrri selectate.

2. DBA_TABLESPACES Afieaz informaii despre tablespace componente ale bazei de date Informaiile afiate sunt:

Dicionarul bazei de date i vederi - 40 -

Baze de date Oracle


Coloan TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS PCT_INCREASE MIN_EXTLEN STATUS Tip dat VARCHAR2(30) NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER VARCHAR2(9) NULL Descriere NOT NULL Nume tablespace NOT NULL Dimensiunea blocului Valoarea iniial extent size Valoarea incremental extent size NOT NULL Numrul minim de extensii Numrul maxim de extensii Valoarea procentului de cretere pentru extent size Numrul minim de extensii pentru acest tablespace Stare tablespace: ONLINE OFFLINE READ ONLY Coninut tablespace: UNDO PERMANENT TEMPORARY Existena unor fiiere log LOGGING NOLOGGING S-a forat modul log? (YES) sau (NO) Indic dac extinderile sunt gestionate prin dicionar (DICTIONARY) sau local (LOCAL)

CONTENTS

VARCHAR2(9)

LOGGING

VARCHAR2(9)

FORCE_LOGGING

VARCHAR2(3)

EXTENT_MANAGEME VARCHAR2(10) NT

ALLOCATION_TYPE

VARCHAR2(9)

Tip de alocare a extensiilor


SYSTEM UNIFORM USER

RETENTION

VARCHAR2(11)

Specific reinerea segmentelor undo: GUARANTEE NOGUARANTEE NOT APPLY Fiier de mari dimensiuni sau nu (YES/NO)

BIGFILE

VARCHAR2(3)

Dicionarul bazei de date i vederi - 41 -

Baze de date Oracle Exemplu :


SQL> select tablespace_name, block_size, initial_extent, status, contents,segment_space_management from dba_tablespaces; TABLESPACE_NAME BLOCK_SIZE INITIAL_EXT STATUS CONTENTS SEGMEN -----------------------------------------------------------------SYSTEM 8192 65536 ONLINE PERMANENT MANUAL UNDOTBS1 8192 65536 ONLINE UNDO MANUAL SYSAUX 8192 65536 ONLINE PERMANENT AUTO TEMP 8192 1048576 ONLINE TEMPORARY MANUAL USERS 8192 65536 ONLINE PERMANENT AUTO EXAMPLE 8192 65536 ONLINE PERMANENT AUTO 6 nregistrri selectate.

3. DBA_DATA_FILES afieaz informaii despre fiierele bazei de date Informaii afiate:


Coloan FILE_NAME FILE_ID Tip dat VARCHAR2(513) NUMBER NULL Descriere Nume fiier al bazei de date NOT NULL ID al fiierului bazei de date NOT NULL Nume Dimensiune n bytes NOT NULL Dimensiunea blocului Oracle Stare: AVAILABLE sau INVALID (INVALID de exemplu un fiier al tablespace a fost ters) Numrul relativ al fiierului Indicator auto extensibilitate Dimensiunea maxim n bytes Dimensiunea maxim n blocuri Numrul de blocuri utilizat la autoextindere Dimensiunea din fiier disponibil pentru date (bytes) Numr de bocuri disponibile pentru date Starea on line: SYSOFF SYSTEM OFFLINE

TABLESPACE_ VARCHAR2(30) NAME BYTES BLOCKS STATUS NUMBER NUMBER VARCHAR2(9)

RELATIVE_FN NUMBER O AUTOEXTENSI VARCHAR2(3) BLE MAXBYTES MAXBLOCKS NUMBER NUMBER

INCREMENT_B NUMBER Y USER_BYTES NUMBER

USER_BLOCKS NUMBER ONLINE_STAT VARCHAR2(7) US

Dicionarul bazei de date i vederi - 42 -

Baze de date Oracle


Coloan Tip dat NULL Descriere

ONLINE RECOVER

Exemplu:
SQL> select * from dba_data_files; FILE_NAME FILE_ID T_NAME BYTES BLOCKS STATUS REL_FNO AUT MAXBYTES MAXBLOCKS INCR_BY USER_BYTES USER_BLOCKS ONLINE -----------------------------------------------------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\USERS01.DBF 4 USERS 125829120 15360 AVAILABLE 4 YES 3,4360E+10 4194302 160 125763584 15352 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSAUX01.DBF 3 SYSAUX 251658240 30720 AVAILABLE 3 YES 3,4360E+10 4194302 1280 251592704 30712 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\UNDOTBS01.DBF 2 UNDOTBS1 31457280 3840 AVAILABLE 2 YES 3,4360E+10 4194302 640 31391744 3832 ONLINE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSTEM01.DBF 1 SYSTEM 503316480 61440 AVAILABLE 1 YES 3,4360E+10 4194302 1280 503250944 61432 SYSTEM D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\EXAMPLE01.DBF 5 EXAMPLE 104857600 12800 AVAILABLE 5 YES 3,4360E+10 4194302 80 104792064 12792 ONLINE 4. DBA_DB_LINKS afieaz legturile cu alte baze de date

Coloan OWNER DB_LINK

Tip dat VARCHAR2(30) VARCHAR2(128)

NULL NOT NULL NOT NULL

Descriere Proprietarul database link Numele database link Numele utilizatorului din baza de date strin irul de conectare Oracle

USERNAME VARCHAR2(30) HOST CREATED VARCHAR2(2000) DATE NOT NULL

Data crerii legturii

5. DBA_VIEWS afieaz vederile bazei de date 6. USER_OBJECTS afieaz obiectele aflate n proprietatea utilizatorului curent
Coloan OBJECT_NAME Tip dat NULL Descriere Nume obiect Nume subobiect (de examplu, partiie) NOT ID obiect n dictionar VARCHAR2(30) NOT NULL

SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NUMBER

Dicionarul bazei de date i vederi - 43 -

Baze de date Oracle


Coloan DATA_OBJECT_ID Tip dat NUMBER NULL NULL ID obiect n dicionar pentru segmental care conine obiectul Tipul obiectului (de ex. TABLE, INDEX) NOT NULL NOT NULL Data crerii obiectului Data ultimei modificri prin DDL (inclusiv grant i revoke) Data i ora modificrii (ir caractere) Stare obiect (VALID, INVALID, sau N/A) Dac obiectul este temporar (Y/N) Dac a fost generat de sistem (Y) sau (N) Descriere

OBJECT_TYPE CREATED LAST_DDL_TIME

VARCHAR2(19) DATE DATE

TIMESTAMP STATUS TEMPORARY GENERATED

VARCHAR2(20) VARCHAR2(7) VARCHAR2(1) VARCHAR2(1)

Exemplu
SQL> conn hr/hr@hazi Conectat. SQL> select rpad(object_name,30), object_type, created from user_ RPAD(OBJECT_NAME,30) -----------------------------REGIONS REG_ID_PK COUNTRIES COUNTRY_C_ID_PK LOCATIONS LOC_ID_PK LOC_CITY_IX LOC_STATE_PROVINCE_IX LOC_COUNTRY_IX DEPARTMENTS DEPT_ID_PK DEPT_LOCATION_IX JOBS JOB_ID_PK EMPLOYEES EMP_EMAIL_UK EMP_EMP_ID_PK OBJECT_TYPE ------------------TABLE INDEX TABLE INDEX TABLE INDEX INDEX INDEX INDEX TABLE INDEX INDEX TABLE INDEX TABLE INDEX INDEX CREATED ---------13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007

Dicionarul bazei de date i vederi - 44 -

Baze de date Oracle


EMP_DEPARTMENT_IX EMP_JOB_IX EMP_MANAGER_IX EMP_NAME_IX JOB_HISTORY JHIST_EMP_ID_ST_DATE_PK JHIST_JOB_IX JHIST_EMPLOYEE_IX JHIST_DEPARTMENT_IX LOCATIONS_SEQ DEPARTMENTS_SEQ EMPLOYEES_SEQ EMP_DETAILS_VIEW SECURE_DML SECURE_EMPLOYEES ADD_JOB_HISTORY UPDATE_JOB_HISTORY 34 nregistrri selectate. INDEX INDEX INDEX INDEX TABLE INDEX INDEX INDEX INDEX SEQUENCE SEQUENCE SEQUENCE VIEW PROCEDURE TRIGGER PROCEDURE TRIGGER 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007 13-05-2007

7. USER_TABLES afieaz tabelele utilizatorului curent Exemplu:


SQL> select table_name, tablespace_name from user_tables; TABLE_NAME -----------------------------REGIONS LOCATIONS JOBS COUNTRIES DEPARTMENTS EMPLOYEES JOB_HISTORY 7 nregistrri selectate. TABLESPACE_NAME -----------------------------EXAMPLE EXAMPLE EXAMPLE EXAMPLE EXAMPLE EXAMPLE

8. USER_TAB_COLUMNS afieaz informaii despre coloanele unei tabele Exemplu:


SQL> select column_name, rpad(data_type,20), data_length from user_tab_columns where table_name='EMPLOYEES'; COLUMN_NAME -----------------------------EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT RPAD(DATA_TYPE,20) DATA_LENGTH -------------------- ----------NUMBER 22 VARCHAR2 20 VARCHAR2 25 VARCHAR2 25 VARCHAR2 20 DATE 7 VARCHAR2 10 NUMBER 22 NUMBER 22

Dicionarul bazei de date i vederi - 45 -

Baze de date Oracle


MANAGER_ID DEPARTMENT_ID 11 nregistrri selectate. NUMBER NUMBER 22 22

6.3. Vederi dinamice ale bazei de date Sunt prefixate cu V$ i ofer informaii actualizate dinamic despre starea bazei de date. Denumirile V$ sunt sinonime publice ale vederilor care au prefixul V_$, acestea din urm fiind accesibile numai utilizatorului SYS. n cazul sistemelor n RAC (Real Application Clusters) se utilizeaz GV$ (de la global). Acestea conin n plus o coloan INST_ID care indic instana la care se refer. n continuare vom prezenta cteva vederi dinamice mai uzuale. 1. V$DATABASE ofer informaii despre baza de date curent. Numrul de informaii este foarte mare. Exemplu:
SQL> select dbid, name, open_mode,platform_name from v$database log_mode,version_time,
DBID NAME LOG_MODE VERSION_TI OPEN_MODE PLATFORM_NAME --------------------------------------------------------------------------2572575511 HAZI NOARCHIVELOG 13-05-2007 READ WRITE Microsoft Windows IA (32-bit)

2. V$DATAFILE afieaz informaii despre fiierele bazei de date Exemplu:


SQL> select rpad(name,50),file#, status, enabled from v$datafile RPAD(NAME,50) FILE# STATUS ENABLED -------------------------------------------------- ---------- ----D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSTEM01.DBF 1 SYSTEM READ WRITE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\UNDOTBS01.DBF2 ONLINE READ WRITE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSAUX01.DBF 3 ONLINE READ WRITE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\USERS01.DBF 4 ONLINE READ WRITE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\EXAMPLE01.DBF5 ONLINE READ WRITE

3. V$INSTANCE afieaz informaii despre instana curent Exemplu:


SQL> select instance_number, instance_name, host_name, version, startup_time from v$instance; INSTANCE_NUMBER INSTANCE_NAME HOST_NAME VERSION STARTUP_TI --------------- ---------------- ------------------------------------1 hazi HGA 10.2.0.1.0 17-06-2007 4. V$NLS_PARAMETERS - afieaz informaii specifice despre limb i ar

Exemplu:
SQL>select * from v$NLS_Parameters

Dicionarul bazei de date i vederi - 46 -

Baze de date Oracle


PARAMETER VALUE ---------------------------------------------------------------NLS_LANGUAGE ROMANIAN NLS_TERRITORY ROMANIA NLS_CURRENCY LEI NLS_ISO_CURRENCY ROMANIA NLS_NUMERIC_CHARACTERS ,. NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MM-RRRR NLS_DATE_LANGUAGE ROMANIAN NLS_CHARACTERSET EE8ISO8859P2 NLS_SORT ROMANIAN NLS_TIME_FORMAT HH24:MI:SSXFF NLS_TIMESTAMP_FORMAT DD-MM-RRRR HH24:MI:SSXFF NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR NLS_TIMESTAMP_TZ_FORMAT DD-MM-RRRR HH24:MI:SSXFF TZR NLS_DUAL_CURRENCY LEI NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE 19 nregistrri selectate.

5. V$SGAINFO afieaz informaii despre memoria SGA Exemplu:


SQL> select * from v$sgainfo; NAME BYTES RESIZEABLE -------------------------------- ---------- --Fixed SGA Size 1247684 No Redo Buffers 2945024 No Buffer Cache Size 58720256 Yes Shared Pool Size 54525952 Yes Large Pool Size 4194304 Yes Java Pool Size 4194304 Yes Streams Pool Size 0 Yes Granule Size 4194304 No Maximum SGA Size 125829120 No Startup overhead in Shared Pool 29360128 No Free SGA Memory Available 0 11 nregistrri selectate.

6. V$SGA Afieaz informaii sumare despre SGA Exemplu:


SQL> select * from v$sga; NAME VALUE -------------------- ---------Fixed Size 1247684 Variable Size 62916156 Database Buffers 58720256 Redo Buffers 2945024

Dicionarul bazei de date i vederi - 47 -

Baze de date Oracle 7. V$PGASTAT Afieaz informaii despre PGA Exemplu:


SQL> select * from v$pgastat; NAME VALUE UNIT ---------------------------------------------------------------- -aggregate PGA target parameter 16777216 bytes aggregate PGA auto target 5511168 bytes global memory bound 3354624 bytes total PGA inuse 10723328 bytes total PGA allocated 22793216 bytes maximum PGA allocated 57075712 bytes total freeable PGA memory 0 bytes process count 19 max processes count 26 PGA memory freed back to OS 0 bytes total PGA used for auto workareas 0 bytes maximum PGA used for auto workareas 2295808 bytes total PGA used for manual workareas 0 bytes maximum PGA used for manual workareas 0 bytes over allocation count 46 bytes processed 47788032 bytes extra bytes read/written 0 bytes cache hit percentage 100 percent recompute count (total) 1827

8. V$PROCESS Afieaz informaii despre procesele Oracle Exemplu:


SQL> select * from v$process; Apasati <ENTER> ADDR PID SPID USERNAME SERIAL# TERMINAL PROGRAM -------- ---------- ------------ --------------- ---------- ---------6A91482C 1 0 PSEUDO 6A914E1C 2 2852 SYSTEM 1 HGA ORACLE.EXE (PMON) 6A91540C 3 3428 SYSTEM 1 HGA ORACLE.EXE (PSP0) 6A9159FC 4 3472 SYSTEM 1 HGA ORACLE.EXE (MMAN) 6A915FEC 5 3308 SYSTEM 1 HGA ORACLE.EXE (DBW0) 6A9165DC 6 4064 SYSTEM 1 HGA ORACLE.EXE (LGWR) 6A916BCC 7 3456 SYSTEM 1 HGA ORACLE.EXE (CKPT) 6A9171BC 8 2188 SYSTEM 1 HGA ORACLE.EXE (SMON) 6A9177AC 9 2532 SYSTEM 1 HGA ORACLE.EXE (RECO) 6A917D9C 10 3436 SYSTEM 1 HGA ORACLE.EXE (CJQ0) 6A91838C 11 3832 SYSTEM 1 HGA ORACLE.EXE (MMON) 6A91897C 12 1328 SYSTEM 1 HGA ORACLE.EXE (MMNL) 6A918F6C 13 3364 SYSTEM 1 HGA ORACLE.EXE (D000) 6A91955C 14 1484 SYSTEM 1 HGA ORACLE.EXE (S000) 6A919B4C 15 4080 SYSTEM 84 HGA ORACLE.EXE (J000) 6A91A13C 16 3020 SYSTEM 1 HGA ORACLE.EXE (QMNC) 6A91A72C 17 4004 SYSTEM 1 HGA ORACLE.EXE (q000) 6A91B30C 19 2244 SYSTEM 2 HGA ORACLE.EXE (SHAD) 6A91B8FC 20 4028 SYSTEM 4 HGA ORACLE.EXE (q002)

Dicionarul bazei de date i vederi - 48 -

Baze de date Oracle


19 nregistrri selectate.

9. V$VERSION Afieaz informaii despre versiunea curent a bazei de date Exemplu:


SQL> select * from v$version; BANNER ---------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE 10.2.0.1.0 Production TNS for 32-bit Windows: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 Production

Dicionarul bazei de date i vederi - 49 -

Baze de date Oracle

7. MANAGEMENTUL FIIERELOR BAZEI DE DATE


7.1. Fiierele de control Fiecare baz de date are unul sau mai multe fiiere de control care sunt mici fiiere binare care memoreaz structura fizic a bazei de date. Aceste informaii includ: Numele bazei de date Numele i locaia fiierelor de date asociate, precum i a fiierelor jurnal (redo log) Data i ora crerii bazei de date Informaii despre ultimul checkpoint (punct de salvare coerent a informaiilor) Fiierele de control sunt mereu disponibile atunci cnd baza de date este deschis. Fr fiierele de control deschiderea i montarea bazei de date nu se poate face, iar recuperarea datelor este dificil. Fiierele de control sunt create o dat cu baza de date, de obicei cel puin dou copii identice. Se recomand ca aceste fiiere s fie stocate pe discuri fizice diferite. Fiiere de control pot fi create i ulterior. Numele fiierelor de control sunt stabilite prin parametrul de iniializare CONTROL_FILES . La pornirea unei instane Oracle sunt deschise toate fiierele de control listate. Instana deschis ntreine i actualizeaz fiierele de control. Este bine s se fac salvri ale fiierelor de control ori de cte ori: se adaug, se terg sau se renumesc fiiere de date; se adaug sau se terg tablespace; se adaug sau se terg fiiere redo log. Dimensiunea fiierelor de control este dat de parametrii de iniializare MAXDATAFILES, MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY i MAXINSTANCES. Modificarea acestor parametri duce la modificarea dimensiunilor fiierelor de control. Crearea de copii suplimentare, renumirea sau relocarea fiierelor de control se face n urmtorii pai: se oprete baza de date se copiaz un fiier de control existent ntr-o locaie nou folosind o comand a sistemului de opearare se editeaz parametrul CONTROL_FILES i se adaug noul fiier de control sau se schimb locaia acestuia se restarteaz baza de date Informaii cu privire la locaia fiierelor de control se pot obine cu c-da:
SQL> SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files'; VALUE -------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\CONTROL03.CTL

Managementul fiierelor bazei de date - 50 -

Baze de date Oracle Trebuie creat un fiier nou de control n urmtoarele situaii: toate fiierele de control ale bazei de date sunt deteriorate i nu exist o salvare a acestora dac se dorete schimbarea numelui bazei de date. De exemplu dac se dorete schimbarea numelui bazei de date din HAZI n PROD se utilizeaz c-da CREATE CONTROLFILE:
CREATE CONTROLFILE SET DATABASE PROD LOGFILE GROUP 1 ('D:\Oracle\product\10.2.0\oradata\HAZI\redo01.log', 'D:\Oracle\product\10.2.0\oradata\HAZI\redo02.log', 'D:\Oracle\product\10.2.0\oradata\HAZI\redo03.log') RESETLOGS DATAFILE 'D:\Oracle\product\10.2.0\oradata\HAZI\system01.dbf' SIZE 500M, 'D:\Oracle\product\10.2.0\oradata\HAZI\SYSAUX01.DBF',' SIZE 267M, 'D:\Oracle\product\10.2.0\oradata\HAZI\TEMP01.dbf' SIZE 21M, 'D:\Oracle\product\10.2.0\oradata\HAZI\UNDOTBS01.DBF',' SIZE 40M, 'D:\Oracle\product\10.2.0\oradata\HAZI\USERS01.DBF',' SIZE 150M MAXLOGFILES 50 MAXLOGMEMBERS 3 MAXLOGHISTORY 400 MAXDATAFILES 200 MAXINSTANCES 6 ARCHIVELOG;

Paii n care se creeaz noi fiiere de control: 1. Se realizeaz o list cu fiierele jurnal (redo log) i cu fiierele de date. Acestea pot fi vzute cu comenzile:
SQL> SELECT NAME FROM V$DATAFILE; NAME ---------------------------------------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSTEM01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\UNDOTBS01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSAUX01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\USERS01.DBF D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\EXAMPLE01.DBF SQL> SELECT MEMBER FROM V$LOGFILE; MEMBER ------------------------------------------------D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO03.LOG D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO02.LOG D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO01.LOG

2. Se oprete baza de date


SQL> conn /as sysdba Conectat. SQL> shutdown normal BD s-a nchis. S-a demontat BD.

Managementul fiierelor bazei de date - 51 -

Baze de date Oracle


Instana ORACLE s-a nchis. SQL>

3. Se salveaz fiierele de date i fiierele jurnal 4. Se pornete o nou instan dar baza de date nu se monteaz i nu se deschide
SQL> startup nomount A pornit instana ORACLE. Apasati <ENTER> Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers SQL> 125829120 1247684 67110460 54525952 2945024 bytes bytes bytes bytes bytes

5. Se creeaz un fiier de control cu c-da CREATE CONTROLFILE 6. Se salveaz noul fiier de control 7. Se modific parametrul de iniializare CONTROL_FILES indicnd noul fiier de control. Dac se schimb numele bazei de date se schimb i DB_NAME 8. Se recupereaz baza de date cu RMAN dac este cazul. 9. Se deschide baza de date
SQL> Baz SQL> Baz alter database mount; de date modificat. alter database open; de date modificat.

Salvarea fiierului de control se poate face i cu c-da:


SQL> ALTER DATABASE BACKUP CONTROLFILE TO 'd:\control.bkp'; Baz de date modificat.

7.2. Fiierele jurnal (redo log) Sunt fiiere care stocheaz rapid toate modificrile efectuate asupra bazei de date. Fiecare instan este asociat unuia sau mai multor fiiere redo log pentru a o proteja n caz de incident. nregistrrile redo log sunt stocate iniial n memorie ntr-o zon circular (redo log buffer) i sunt scrise de ctre procesul Lol Writer LGWR. Scrierea se realizeaz atunci cnd o tranzacie este comis. O dat cu nregistrarea se scrie i informaia referitoare la starea sistemului SCN (system change number) pentru a se identifica nregistrrile aferente unei tranzacii comise. Scrierea n fiierele jurnal se realizeaz de asemenea ntr-o manier circular, aa cum se arat n figura 7.1. Baza de date necesit minim 2 fiiere jurnal pentru a garanta buna funcionare. Dac variabila ARCHIVELOG este setat, atunci ntr-un fiier se scrie n timp ce cellalt este arhivat. Fiierele redo log sunt disponibile la scriere n funcie de modul n care funcioneaz baza de date: Managementul fiierelor bazei de date - 52 -

Baze de date Oracle

Figura 7.1 Scrierea nregistrrilor n fiierele jurnal

dac arhivarea este dezactivat, atunci un fiier redo log plin devine disponibil pentru rescriere dup ce nregistrrile modificate au fost scrise n baza de date dac arhivarea este activat, resrierea unui fiier jurnal se face dup ce nregistrrile modificate au fost scrise n baza de date i fiierul a fost arhivat Fiierele redo log care sunt necesare pentru restaurarea bazei de date sunt fiiere active, celelalte fiind inactive. Pentru a proteja baza de date, Oracle permite multiplexarea fiierelor jurnal, meninnd dou sau mai multe copii ale aceluiai fiier n locaii diferite. Este de preferat ca locaiile s fie situate pe discuri fizice diferite. Cnd sunt mai multe copii ale fiierelor LGWR scrie simultan n toate copiile active. Multiplicarea fiierelor jurnal implic noiunea de grup care conine mai multe copii ale unui fiier jurnal (figura 7.2).

Figura 7.2 Grupuri de fiiere jurnal

Managementul fiierelor bazei de date - 53 -

Baze de date Oracle Crearea grupurilor i a fiierelor jurnal membre ale acestora se realizeaz de obicei o dat cu crearea bazei de date. Totui, n practic, apar adesea situaii cnd este necesar modificarea configuraiei de fiiere jurnal, prin crearea de noi grupuri sau fiiere membre. Baza de date poate avea maxim MAXLOGFILES fiiere jurnal. Vizualizarea grupurilor existente se face cu c-da:
SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG; GROUP# ---------1 2 3 ARC --NO NO NO STATUS ---------------INACTIVE INACTIVE CURRENT

Crearea de noi grupuri se face cu c-da:


SQL> ALTER DATABASE ADD LOGFILE ('D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\ REDO04.LOG') SIZE 8M;

Se poate specifica n clar, grupul din care face parte:


SQL> ALTER DATABASE ADD LOGFILE GROUP ('D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\ REDO04.LOG') SIZE 8M; 4

Adugarea unui fiier la un grup se face cu c-da:


SQL> ALTER DATABASE ADD LOGFILE MEMBER 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\ REDO02_2.LOG ' TO GROUP 2;

C-da de mai sus se putea scrie i altfel:


SQL> ALTER DATABASE ADD LOGFILE MEMBER 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\ REDO02_2.LOG' TO (' D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO02.LOG ');

Redenumirea i relocarea fiierelor jurnal se face n urmtorii pai: 1. Se oprete baza de date
SQL> SHUTDOWN NORMAL

2. Se copiaz fiierele jurnal n noua locaie, folosind comenzi ale sistemului de operare
D:\> MOVE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO02_2.LOG E:\REDOORACLE\REDO02_2.LOG

3. Se pornete baza de date, se monteaz dar nu se deschide


SQL> CONNECT / AS SYSDBA SQL> STARTUP MOUNT

4. Se redenumesc fiierele mutate


SQL> ALTER DATABASE RENAME FILE D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO02_2.LOG to E:\REDOORACLE\REDO02_2.LOG

5. Se redeschide baza de date


SQL> ALTER DATABASE OPEN

tergerea grupurilor de fiiere se poate face numai pentru grupurile inactive:


SQL> SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG; GROUP# ARC STATUS ---------- --- ---------------1 NO INACTIVE

Managementul fiierelor bazei de date - 54 -

Baze de date Oracle


2 3 4 SQL> ALTER NO INACTIVE NO CURRENT YES UNUSED DATABASE DROP LOGFILE GROUP 4;

Baz de date modificat.

tergerea unui membru al unui grup se face cu c-da:


SQL> ALTER DATABASE DROP LOGFILE MEMBER 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO02_2.LOG ';

7.3. Tablespace i fiiere de date Se recomand utilizarea mai multor tablespace-uri din urmtoarele motive: separarea datelor utilizator de datele aferente dicionarului pentru a reduce conflictele de intrare/ieire separarea datelor aplicaiilor pentru a putea face manevre cu tablespace cum ar fi trecerea offline stocarea tablespace n fiiere diferite amplasate pe discuri diferite pentru a crete viteza I/O creterea disponibiltii bazei de date atunci cnd apar incidente (este afectat numai un tablespace) optimizarea tablespace dup natura aplicaiilor: activitatea I/O intens, tablespace readonly, tablespace temporar salvarea individual a tablespace-urilor Crearea tablespace se face dup crearea bazei de date. Orice baz de date are cteva tablespace obligatorii: SYSTEM conine dicionarul bazei de date i segmentele de rollback utilizate de sistem. Este administrat ca orice tablespace dar necesit privilegii de cel mai nalt nivel. SYSAUX conine date auxiliare aferente unor componente ale bazei de date Oracle Pentru crearea i administrarea tablespace se pot utiliza comenzile: - CREATE TABLESPACE - CREATE TEMPORARY TABLESPACE - ALTER TABLESPACE - ALTER DATABASE - CREATE UNDO TABLESPACE pentru crearea unui tablespace destinat depunerii nregistrrilor nedefinitive (segmente ROLLBACK). Din punct de vedere al administrrii i a modului de funcionare exist mai multe tipuri de tablespace: - tablespace administrate local (Locally Managed Tablespaces) - bigfile tablespace - temporary tablespace - grupuri de tablespace temporare Managementul fiierelor bazei de date - 55 -

Baze de date Oracle n cazul tablespace administrate local toate informaiile de administrare sunt stocate n headerul tablespace sub form de bitmap (hart de bii are arat modul de utilizare a spaiului), oferind urmtoarele avantaje principale: - vitez foarte mare n lucrul concurent - se simplific alocarea spaiului n cazul opiunii AUTOALLOCATE ntruct sistemul stabilete automat dimensiunile de extindere - dimensiune redus a informaiilor stocate n dicionar Toate tablespace, inclusiv SYSTEM, pot fi de tipul administrate local. Crearea tablespace administrate local se face cu c-zi de forma:
SQL> CREATE TABLESPACE sal DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\salarii.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

Dimensiunea extensiilor este de minim 64 K. O alternativ este utilizarea clauzei UNIFORM care permite stabilirea dimensiunii extensiilor:
SQL> CREATE TABLESPACE sal DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\salarii.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

Modificarea unui tablespace administrat local se face cu c-da:


SQL> ALTER TABLESPACE sal ADD DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\salarii2.dbf' SIZE 3M

prin care se adaug un fiier suplimentar pentru stocarea tablespace.


SQL> ALTER TABLESPACE sal OFFLINE NORMAL

prin care se trece tablespace n modul OFFLINE pentru operaii de administrare, cum ar fi recuperarea datelor. Trecerea n modul READ ONLY sau READ WRITE se face cu comenzile:
SQL>ALTER TABLESPACE sal READ ONLY; SQL>ALTER TABLESPACE users READ WRITE;

Renumirea tablespace se face cu c-da:


SQL> ALTER TABLESPACE sal RENAME TO salnou;

tergerea tablespace se face cu c-da:


SQL> DROP TABLESPACE salnou;

Bigfile tablespace este un tablespace cu un sigur, dar foarte mare (pn la 4G blocuri), fiier de date. Avantajele bigfile tablespace sunt: Poate conine pn la 32 TB date dac blocurile sunt de 8K sau 128 TB dac blocurile au mrime de 32 K. Reduce semnificativ numrul de fiiere ale bazei de date, reducnd corespunztor dimensiunile fiierelor de control i a SGA Simplific managementul bazei de date, nemaifiind nevoie de referiri la fiiere componente ale tablespace\ Crearea bigfile tablespace se face cu c-da: Managementul fiierelor bazei de date - 56 -

Baze de date Oracle


SQL> CREATE BIGFILE TABLESPACE bigsal DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\salarii.dbf' SIZE 50G

Modificarea bigtablespace se face cu comenzi specifice:


ALTER TABLESPACE bigsal RESIZE 80G; ALTER TABLESPACE bigsal AUTOEXTEND ON NEXT 20G;

Temporary tablespace conine date tranzitorii care persist numai pe durata unei sesiuni utilizator. Este utilizat pentru reinerea datelor temporare, n mod deosebit n cazul sortrilor. Nu se pot crea obiecte n tablespace temporar. Crearea unui tablespace temporar se face cu c-da:
SQL> CREATE TEMPORARY TABLESPACE lmtemp TEMPFILE ' D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\tempnou.dbf' SIZE 20M REUSE EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

Se poate crea i un bigfile tablespace temporar. Utilizarea grupurilor de tablespace temporar permite utilizarea eficient a spaiului din mai multe tablespace. Crearea grupurilor se face o dat cu crearea tablespace temporar:
SQL> CREATE TEMPORARY TABLESPACE lmtemp2 TEMPFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\tempnou.dbf' SIZE 50M TABLESPACE GROUP group1;

Trecerea unui tablespace ntr-un grup se face cu c-da:


SQL> ALTER TABLESPACE temp1 TABLESPACE GROUP group2;

Scoaterea unui tablespace dintr-un grup se face cu c-da:


SQL> ALTER TABLESPACE lmtemp3 TABLESPACE GROUP '';

Managementul fiierelor bazei de date - 57 -

Baze de date Oracle

8. MANAGEMENTUL TABELELOR I A DATELOR


Tabelele sunt structuri de date elementare utilizate pentru stocarea informaiilor. Datele sunt stocate n coloane i linii. Pentru a crea o tabel trebuie definit numele tabelei, de exemplu personal, i un set de coloane. Pentru fiecare coloan se stabilete numele ei, tipul cmpului, dimensiunile acestuia i restriciile aplicabile. Tabelele pot fi interogate, terse i modificate utiliznd SQL. 8.1. Tipuri de date Tipurile de date acceptate de Oracle 10g sunt: A. Date de tip ir de caractere CHAR(n [BYTE | CHAR]) reprezint un ir de caractere de lungime fix n octei, n 2000. Opiunile BYTE sau CHAR specific modul n care se calculeaz lungimea. Implicit lungimea este dat de parametrul NLS_LENGTH_SEMANTICS, care specific numrul de octei ocupat de un caracter n limba naional n care a fost creat baza de date, avnd valori ntre 1 i 4. n cazul limbii romne NLS_LENGTH_SEMANTICS=BYTE. Vizualizarea valorii lui NLS_LENGTH_SEMANTICS se face cu c-da:
SQL> select * from nls_session_parameters; PARAMETER -----------------------------NLS_LANGUAGE NLS_TERRITORY NLS_CURRENCY NLS_ISO_CURRENCY NLS_NUMERIC_CHARACTERS NLS_CALENDAR NLS_DATE_FORMAT NLS_DATE_LANGUAGE NLS_SORT NLS_TIME_FORMAT NLS_TIMESTAMP_FORMAT NLS_TIME_TZ_FORMAT NLS_TIMESTAMP_TZ_FORMAT NLS_DUAL_CURRENCY NLS_COMP NLS_LENGTH_SEMANTICS NLS_NCHAR_CONV_EXCP 17 nregistrri selectate. VALUE ------------------------------ROMANIAN ROMANIA LEI ROMANIA ,. GREGORIAN DD-MM-RRRR ROMANIAN ROMANIAN HH24:MI:SSXFF DD-MM-RRRR HH24:MI:SSXFF HH24:MI:SSXFF TZR DD-MM-RRRR HH24:MI:SSXFF TZR LEI BINARY BYTE FALSE

Pentru BYTE lungimea irului va fi dat de n (octei), iar pentru CHAR lungimea irului va fi n*numr_octei_pe_caracter 2000. NCHAR(n) ir de caractere avnd lungimea n caractere specifice limbii. Este echivalent cu CHAR(n CHAR). Managementul tabelelor i a datelor - 58 -

Baze de date Oracle VARCHAR2(n [BYTE | CHAR]) ir variabil de caractere de lungime variabil n*numr_octei_pe_caracter 4000. NVARCHAR2(n [BYTE | CHAR]) ir variabil de caractere specifice limbii de lungime variabil n*numr_octei_pe_caracter 4000. B. Date de tip numeric NUMBER(n,s) numr cu lungimea n i scala s (nr. de zecimale). n poate lua valori ntre 1 i 38, iar s ntre -84 i 127. Pentru s pozitiv el reprezint numrul de zecimale dup virgul, iar pentru n negativ numrul este rotunjit la numrul de cifre respectiv (numrul de zerouri din coad). BINARY_FLOAT Numr n virgul mobil pe 32 de bii. Ocup 5 bytes. Poate memora valori ntre 1.17549E-38 i 3.40282E+38. BINARY_DOUBLE Numr n virgul mobil pe 64 de bii. Ocup 9 bytes. Poate memora valori ntre 2.22507485850720E-308 i 1.79769313486231E+308. C. Date de tip dat i timp DATE variabil ce cuprinde anul, luna, ziua, ora, minutul i secunda. Are valori pn la 31 decembrie 9999. Ocup 7 bytes. TIMESTAMP(fs) memoreaz n plus fa de DATE fraciuni de secund cu lungimea fs. Ocup ntre 7 i 11 bytes. TIMESTAMP(fs) WITH TIME ZONE memoreaz n plus fa de TIMESTAMP timpul zonal fa de GMT (+2:00 pentru Bucureti). Ocup 13 bytes. D. Obiecte de mari dimensiuni (LOB LargeOBjects) CLOB variabil ce poate conine obiecte de tip caracter de lungime variabil. Dimensiunea maxim (4GB -1)*dimensiune_bloc. NCLOB variabil ce poate conine obiecte de tip caracter specific limbii de lungime variabil. Dimensiunea maxim (4GB -1)*dimensiune_bloc. BLOB variabil ce conine obiecte de tip binar de lungime variabil. Dimensiunea maxim (4GB -1)*dimensiune_bloc. BFILE conine o referin (pointer) ctre un fiier binar de mari dimensiuni de pe disc. E. Cmpuri referitoare la tabele ROWID ir de caractere pe 64 de bii care memoreaz adresa nregistrrii dintr-o tabel. UROWID[(n)] - ir de caractere pe 64 de bii care memoreaz adresa nregistrrii dintr-o tabel organizat index. n reprezint limea coloanei ROWID, cu valoarea maxim 4000. F. Cmpuri cu structuri complexe OBJECT o structur complex de informaii care conine date, proprieti i metode (proceduri i funcii scrise n PL/SQL). REF identificator al unui obiect care este stocat n alt parte. Este un pointer ctre obiectul respectiv. Managementul tabelelor i a datelor - 59 -

Baze de date Oracle VARRAYS matrice de date de dimensiune variabil. NESTED TABLES set de elemente neordonate. Elementele sunt de tipuri predefinite sau definite de utilizator. 8.2. Tipuri de tabele Oracle utilizeaz urmtoarele tipuri de tabele: - tabele obinuite - tabele n cluster un cluster de tabele reprezint un grup de tabele care au n comun aceleai blocuri de date avnd coloane n comun - tabele index organizate tabele n care nregistrrile sunt stocate dup un index care reprezint cheia primar, cuprinznd una sau mai multe coloane ale tabelei. Tabela are zone separate pentru cheia primar i pentru restul coloanelor. Permite acces rapid la nregistrri dup cheia primar. - tabele partiionate sunt tabele ale cror date sunt stocate n mai multe partiii (segmente). Fiecare partiie poate fi gestionat independent i se pot opera independent. Utilizarea tabelelor partiionate este avantajoas pentru tabele de mari dimensiuni care pot fi stocate pe discuri diferite. 8.3. Crearea unei tabele nainte de crearea unei tablele trebuie s se fac o estimare a spaiului necesar pentru date, indeci, segment pentru scriere temporar (undo) i spaiu pentru fiiere jurnal. Crearea unei tabele se face prin c-da CREATE TABLE i este artat prin exemplul urmtor:
CREATE TABLE empno ename ssn job mgr hiredate sal comm deptno hr.admin_emp ( NUMBER(5) PRIMARY KEY, VARCHAR2(15) NOT NULL, NUMBER(9) ENCRYPT, VARCHAR2(10), NUMBER(5), DATE DEFAULT (sysdate), NUMBER(7,2), NUMBER(7,2), NUMBER(3) NOT NULL CONSTRAINT admin_dept_fkey REFERENCES hr.departments (department_id)) TABLESPACE admin_tbs STORAGE ( INITIAL 50K);

Se creeaz tabela admin_emp n tablespace admin_tbs. Se observ c, o dat cu cmpurile sunt precizate i restriciile impuse acestora (cheie primar, not null, cheie strin). De asemenea sunt precizate i opiunile de stocare a tabelei. O tabel poate fi creat i prin populare direct utiliznd comanda CREATE TABLE .. AS SELECT:
SQL> ALTER SESSION FORCE PARALLEL DDL; Sesiune modificat.

Managementul tabelelor i a datelor - 60 -

Baze de date Oracle


SQL> CREATE TABLE hr.test PARALLEL as select * from hr.employees; Tabel creat.

Popularea tabelelor se poate face, n afar de CREATE ... AS SELECT, prin: - SQL Loader un utilitar pentru ncrcarea datelor din diverse surse - c-da SQL INSERT care permite specificarea direct a datelor sau utilizarea unui subquery. - c-da MERGE permite ncrcarea datelor din alte tabele. Dac datele nccate exist atunci se face UPDATE, altcum se execut insert. Exemplu: nserarea salariatului IONESCU MIHAI n tabela EMPLOYEES:
SQL> insert into hr.employees values (400, 'IONESCU', 'MIHAI', 'mionescu@yahoo.com','0744/776599',to_date('31-03-2006'), 'PR_REP',2500, 0.5, 100,30); 1 nregistrare creat.

nserarea n tabela dw_empl a salariailor angajai n ultimele 100 de zile:


SQL>INSERT INTO dw_empl SELECT employee_id, first_name, last_name, hire_date, salary, department_id FROM employees WHERE hire_date > sysdate 100;

Crearea unei tabele cu bonusuri i popularea ei pentru salariaii care au obinut comenzi cu 100+10% din salariu i 10% din salariu n rest, pentru salariaii cu salariul <= 8000:
CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100); INSERT INTO bonuses(employee_id) (SELECT e.employee_id FROM employees e, orders o WHERE e.employee_id = o.sales_rep_id GROUP BY e.employee_id); MERGE INTO bonuses D USING (SELECT employee_id, salary, department_id FROM employees WHERE department_id = 80) S ON (D.employee_id = S.employee_id) WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01 DELETE WHERE (S.salary > 8000) WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus) VALUES (S.employee_id, S.salary*0.1) WHERE (S.salary <= 8000);

Instruciunea MERGE a fost introdus n standardul SQL 2003 i permite nserarea de noi nregistrri sau modificarea celor existente n funcie de gsirea sau nu a unei chei n cele dou surse.

Managementul tabelelor i a datelor - 61 -

Baze de date Oracle 8.4. Specificarea clauzelor de stocare Prin aceste clauze se pot preciza urmtoarele: - spaiul alocat segmentelor de date - spaiul liber alocat n blocurile de date (pentru modificri exterioare) Spaiul alocat segmentelor de date este spaiul aferent din tablespace. Nu toate clauzele de stocare se pot specifica pentru obiectele bazei de date sau n comenzile CREATE sau ALTER. Specificarea clauzelor de stocare interacioneaz cu clauzele stabilite pentru tablespace. Specificarea clauzelor se face dup schema dat n figura 8.1.

Figura 8.1 Specificarea atributelor fizice ale tabelelor

PCTFREE specific procentul din fiecare bloc de date care este rezervat pentru modificri ulterioare. Valori posibile ntre 0 i 99%. Implicit 10%. Aceast valoare rezerv 10% din fiecare bloc de date pentru modificri i permite nserarea de noi nregistrri pn la gradul de ocupare de 90%. PCTUSED specific procentul minim pe care Oracle trebuie s-l menin ocupat din fiecare bloc de date. Valori ntre 0 i 99%, implicit 40%. Suma dintre PCTFREE i PCTUSED nu trebuie s depeasc 100. INITRANS specific valoarea iniial a numrului de tranzacii concurente alocate fiecrui bloc de date. Valori de la 1 la 255, implicit 1. Clauzele de stocare stabilesc cum se stocheaz obiectele bazei de date, n particular a tabelei. Clauzele afecteaz att timpul de acces, ct i utilizarea eficient a spaiului de stocare. Clauzele posibile sunt artate n figura 8.2.

Figura 8.2 Specificarea clauzelor de stocare ale tabelelor

Managementul tabelelor i a datelor - 62 -

Baze de date Oracle INITIAL specific spaiul alocat pentru nceput tabelei (sau mai general, obiectului respectiv). Dimensiunea se d n bytes, Kbytes, Mbytes, Gbytes, Tbytes, notndu-se nnnK, etc. Valoarea implicit este de 5 blocuri de date. Pentru tablespace locally managed Oracle utilizeaz valoarea INITIAL n conjuncie cu dimensiunea extensiilor specificat pentru tablespace. De exemplu, pentru tablespace cu clauza UNIFORM egal cu 5M, dac se specific INITIAL 1M, atunci Oracle creeaz 5 extensii de 1M. NEXT specific dimensiunea urmtoarei extensii. Valoarea implicit 5 blocuri, minim 1 bloc de date. PCTINCREASE specific modul n care crete urmtoarea extensie n raport cu precedenta. Se d n procente, valoarea implicit fiind 50. Oracle rotunjete valoarea rezultat la un numr ntreg de blocuri de date. MINEXTENS specific numrul de extensii alocate la crearea tabelei (obiectului). Valoarea implicit 1. MAXEXTENS specific numrul maxim de extensii (inclusiv primul) care pot fi alocate tabelei. Celelalte opiuni din figura 8.2 sunt opiuni avansate i nu fac obiectul prezentului curs. Exemplu:
SQL> 2 3 4 5 6 CREATE TABLE divisions (div_no NUMBER(2), div_name VARCHAR2(14), location VARCHAR2(13) ) STORAGE ( INITIAL 100K NEXT 50K MINEXTENTS 1 MAXEXTENTS 50 PCTINCREASE 5);

Tabel creat.

8.5. Modificarea i tergerea tabelelor Se scopuri: realizeaz cu comanda SQL ALTER TABLE i poate avea mai multe modificarea caracteristicilor fizice i de stocare mutarea tabelei ntr-un segment nou sau n alt tablespace adugarea, tergerea sau redefinirea unei coloane din tabel adugarea, modificarea sau tergerea unei restricii activarea sau dezactivarea unor restricii schimbarea numelui unei tabele altele

Exemple: Modificarea spaiului liber n blocuri:


SQL> alter table divisions pctfree 20; Tabel modificat.

Managementul tabelelor i a datelor - 63 -

Baze de date Oracle Mutarea tabelei DIVISIONS ntr-un nou segment, cu modificarea parametrilor de stocare:
SQL> ALTER TABLE SCOTT.DIVISIONS MOVE 2 STORAGE ( INITIAL 20K 3 NEXT 40K 4 MINEXTENTS 2 5 MAXEXTENTS 20 6* PCTINCREASE 0 ) Tabel modificat.

Adugarea unei coloane n tabela divisions:


SQL>alter table scott.divisions 2* add (nr_sal number(4)); Tabel modificat.

tergerea unei coloane:


SQL> alter table scott.divisions 2 drop column nr_sal; Tabel modificat.

Adugarea unei chei primare:


SQL> alter table scott.divisions 2* add (PRIMARY KEY (DIV_NO)) Tabel modificat.

Adugarea unei restricii tip domeniu:


SQL> alter table scott.divisions 2* add (CHECK (nr_sal between 1 and 100)) Tabel modificat.

Dezactivarea unei restricii:


SQL> alter table scott.divisions disable constraint sys_C005460; Tabel modificat.

tergerea unei tabele:


SQL> drop table scott.divisions; Tabelul a fost eliminat.

Obinerea de informaii despre tabele se pot obine cu ajutorul vederilor:


SQL> select * from user_tab_columns; Apasati <ENTER> TABLE_NAME COLUMN_NAME DATA_TYPE ------------------- ------------------------------ ----------

Managementul tabelelor i a datelor - 64 -

Baze de date Oracle


DEPT DEPT DEPT EMP EMP EMP EMP EMP EMP EMP EMP BONUS BONUS BONUS BONUS SALGRADE SALGRADE SALGRADE LOC DNAME DEPTNO DEPTNO COMM SAL HIREDATE MGR JOB ENAME EMPNO COMM SAL JOB ENAME HISAL LOSAL GRADE VARCHAR2 VARCHAR2 NUMBER NUMBER NUMBER NUMBER DATE NUMBER VARCHAR2 VARCHAR2 NUMBER NUMBER NUMBER VARCHAR2 VARCHAR2 NUMBER NUMBER NUMBER

8.6. Managementul indecilor Indecii sunt structuri asociate tabelelor i au rolul de a reduce semnificativ timpii de execuie a instruciunilor SQL. Instruciunile SQL sunt identice fie c tabela are sau nu are indeci asociai. Crearea unui index asociat unei tabele este fezabil n urmtoarele situaii: - dac exist interogri frecvente care returneaz mai puin de 15% dintre nregistrri; - pentru interogarea tabelelor legate; trebuie indexate coloanele utilizate pentru legtur; Din punct de vedere logic, indecii pot fi: - index cu o coloan cnd cheile index au o coloan, de exemplu n cazul tabelei de personal, indexul creat pe coloana marca; - index concatenat cunoscut i ca index compozit, cnd cheile index cuprind mai multe coloane din tabel; numrul maxim de coloane n indexul compozit este 32; - index unic sau multiplu indexul unic apare o singur dat n tabela respectiv, adic exist o singur linie n tabel care satisface valoarea cheii; - index bazat pe funcii indexul este creat prin apelarea unei funcii care se bazeaz pe expresii cu valoarea uneia sau a mai multor coloane; Din punct de vedere fizic indecii pot fi: - partiionai sau nepartiioani se utilizeaz indeci partiionai pentru tabele de mari dimensiuni, avantajul fiind acela al cutrii simultane n mai multe partiii - B-tree este o structur arborescent de indeci, cu mai multe nivele (rdcin, ramuri, frunze). La ultimul nivel (frunze) indexul conine informaii despre lungimea cheii, valoarea cheii i ROWID. Aa cum s-a mai artat ROWID este o pseudo-coloan n tabelele Oracle care memoreaz Managementul tabelelor i a datelor - 65 -

Baze de date Oracle unic adresa unui rnd din tabel (fiier de date, nr. bloc n fiierul de date, nr. linie n blocul de date). - Bitmap este util atunci cnd tabela ale multe linii (milioane) n care coloana sau coloanele cheie au valori apropiate. De asemenea indexul bitmap este util atunci cnd se fac interogri care are mai multe condiii n clauza WHERE care utilizeaz OR. Indexul bitmap este recomandat atunci cnd modificarea coloanelor index este foarte rar. Structura indexului conine valoarea cheii (coloana sau combinaia de coloane), intervalul ROWID (nceput i sfrit), un segment bitmap n care biii afereni liniei din tabel sunt setai dac rndul respectiv are ROWID n domeniu. n concluzie, utilizarea celor dou tipuri de indeci este recomandat in funcie de urmtoarele criterii: - pentru diferene mari ntre valorile cheii se recomand B-tree n timp ce pentru valori apropiate se recomand Bitmap - n cazul cheii tip Bitmap modificarea cheii este costisitoare - cheia Bitmap este eficient pentru interogri care conine funcia logic OR - B-tree este reomandat pentru aplicaii n timp real (de ex. OLTP) n timpm ce Bitmap este recomandat pentru data warehousing. Crearea unui index B-tree se face cu comenzi de forma:
SQL> 2 3 4* create index pers_idx_empno on pers (empno) pctfree 10 storage (initial 10K next 10K) tablespace users

Index creat.

Crearea unui index Bitmap:


SQL>create bitmap index pers_idx_sal on pers (sal) 2 pctfree 10 3 storage (initial 10K next 10K) 4* tablespace users Index creat.

Modificarea indecilor se face cu c-da ALTER INDEX.


SQL> ALTER INDEX pers_idx_sal 2 DEALLOCATE UNUSED; Index modificat.

tergerea unui index:


SQL> drop index pers_idx_sal; Index eliminat.

Managementul tabelelor i a datelor - 66 -

Baze de date Oracle

9. INTEGRITATEA DATELOR I RESTRICII N BAZA DE DATE


Integritatea datelor este un aspect important al bazelor de date Oracle. Aceasta nseamn un set de reguli care trebuie s fie respectate de ctre datele ncrcate n baza de date. Aceste reguli sunt comune pentru orice utilizator sau aplicaie care modific datele. 9.1. Metode de control a integritii datelor Exist trei metode primare pentru controlul integritii datelor: - prin codul aplicaiilor - prin trigerele din baza de date - prin restricii impuse n baza de date Aplicaiile prin care se controleaz datele pot fi aplicaii client sau proceduri stocate n baza de date. Au dezavantajul c fiecare aplicaie care acceseaz/modific datele trebuie s conin codul de control. Trigerele sunt proceduri stocate n baza de date care se activeaz la anumite evenimente: nserarea, modificarea, tergerea sau citirea unei nregistrri. Trigerele pot fi activate nainte sau dup aceste evenimente. De exemplu, prin activarea acestora nainte de scrierea n baza de date, se pot face diverse verificri ale integritii datelor. Utilizarea restriciilor este o metod sigur i simpl i const n nregistrarea n baza de date a unor restricii impuse variabilelor care sunt scrise n coloanele tabelei. Tipurile de restricii impuse datelor sunt: - NOT NULL precizeaz c valoarea coloanei trebuie completat - UNIQUE precizeaz c o coloan sau o combinaie de coloane au o valoare unic n tabel; - PRIMARY KEY desemneaz c o coloan sau o combinaie de coloane care este cheie primar n tabel - FOREIGN KEY - desemneaz c o coloan sau o combinaie de coloane care este cheie primar ntr-o alt tabel (cheie strin) - CHECK specific o condiie pe care fiecare linie trebuie s o satisfac. 9.2. Stri ale restriciilor O restricie pentru controlul integritii datelor poate avea una din urmtoarele stri:
ENABLE, VALIDATE ENABLE, NOVALIDATE DISABLE, VALIDATE DISABLE, NOVALIDATE

O restricie cu starea DISABLE NOVALIDATE nu este verificat. Datele sunt prelucrate fr controlul integritii respective. Integritatea datelor i restricii n baza de date - 67 -

Baze de date Oracle O restricie cu starea DISABLE VALIDATE nu permite modificarea coloanei respective. O restricie cu starea ENABLE NOVALIDATE nu permite nserarea de date noi care ncalc restricia, dar tabela poate conine date care nu respect restricia. O restricie cu starea ENABLE VALIDATE nu permite nserarea de date noi care ncalc restricia iar tabela este verificat (n legtur cu restricia respectiv) la activarea ei cu c-da ALTER TABLE. 9.3. Verificarea restriciilor Verificarea restriciilor pot fi amnate pn la finalizarea unei tranzacii (scrierea definitiv n baza de date sau comiterea acesteia). Verificarea poate fi fcut i imediat dup lansarea comenzii DML. Trecerea de la un mod de lucru la altul se face cu c-da ALTER SESSION SET CONSTRAINTS. Restriciile verificate imediat (NONDEFERRED sau IMMEDIATE) acioneaz la sfritul fiecrei comenzi DML. O restricie nclcat genereaz automat revenirea la starea anterioar (rollback). Restriciile verificate la comiterea tranzaciilor (DEFERRED CONSTRAINTS) genereaz rollback pentru ntreaga tranzacie dac, la acest moment, restriciile nu sunt respectate. O restricie definit ca DEFERRED poate fi setat n dou moduri, la definirea ei: - INITIALLY IMMEDIATE verificarea se face dup fiecare comand - INITIALLY DEFERRED verificarea se face la sfritul tranzaciei 9.4. Utilizarea cheilor n tabele Cheia primar (PRIMARY KEY) i cheia unic (UNIQUE) este pus n practic prin utilizarea indecilor. Se poate controla locaia i tipul de index care este folosit. Severul Oracle utilizeaz urmtoarea procedur pentru a implementa cheia unic i cheia primar: - dac restricia este dezactivat (DISABLE), nu este necesar un index; - dac restricia este activ (ENABLE) i coloana este parte a unui index atunci indexul este utilizat pentru crearea i ntreinerea restriciei; - dac restricia este activ i nu exist un index pe coloan, atunci el este creat automat. n legtur cu cheile strine, acestea reduc posibilitatea de manevr n cazul tabelelor legate. Pentru administratori, tergerea unei tabele, trunchierea acesteia, tergerea unui tablespace care conine o tabel legat impune utilizarea opiunii CASCADE CONSTRAINTS. 9.5. Crearea, modificarea i tergerea restriciilor Restriciile pot fi create/modificate n mai multe feluri. O prim modalitate este aceea a crerii lor o dat cu crearea tabelelor: Integritatea datelor i restricii n baza de date - 68 -

Baze de date Oracle Crearea unei tabele de personal cu cheia primar marca, cu salariul ntre 1000 i 6000 lei:
SQL> create table personal 2 (marca number(5) PRIMARY KEY, 3 Nume varchar2(20) not null, 4 salariu number(10,2) not null constraint pers_val_salariu 5 CHECK (salariu > 1000 and salariu <=6000) initially deferred deferrable); Tabel creat.

Crearea unei tablele de subuniti:


SQL> 2 3 create table subunitati (cod_sub number (3) PRIMARY KEY, denumire varchar2(30) not null);

Tabel creat.

Modificarea tabelei personal i adugarea coloanei pentru subuniti:


SQL>alter table personal add 2* (cod_sub number(3)); Tabel modificat

Adugarea unei legturi ntre cele dou tabele:


SQL> alter table personal add 2 constraint p_fk FOREIGN KEY (cod_sub) REFERENCES subunitati; Tabel modificat. SQL> select user from dual; Apasati <ENTER> USER -----------------------------TEST SQL> select owner, table_name,constraint_name,
deferred from user_constraints; Apasati <ENTER> OWNER TABLE_NAME CONSTRAINT_NAME C STATUS DEFERRABLE DEFERRED ------------------------------ ------------------------------ ------------TEST SUBUNITATI SYS_C005484 C ENABLED NOT DEFERRABLE IMMEDIATE TEST PERSONAL SYS_C005483 C ENABLED NOT DEFERRABLE IMMEDIATE TEST PERSONAL SYS_C005482 C ENABLED NOT DEFERRABLE IMMEDIATE TEST PERSONAL PERS_VAL_SALARIU C ENABLED NOT DEFERRABLE IMMEDIATE TEST PERSONAL P_FK R ENABLED NOT DEFERRABLE IMMEDIATE TEST PERSONAL SYS_C005485 P ENABLED NOT DEFERRABLE IMMEDIATE TEST SUBUNITATI SYS_C005486 P ENABLED NOT DEFERRABLE IMMEDIATE 7 nregistrri selectate. SQL>

constraint_type, status, deferrable,

Dezactivarea unei restricii:


SQL> alter table personal disable constraint pers_val_salariu; Tabel modificat.

Integritatea datelor i restricii n baza de date - 69 -

Baze de date Oracle


SQL> insert into personal values (100, 'Ionescu Vasile', 9000,20); 1 nregistrare creat.

Se observ c am nserat o nregistrare care ncalc restricia salariu (1000,6000].


SQL> alter table personal enable validate constraint pers_val_salariu * EROARE la linia 1: ORA-02293: (TEST.PERS_VAL_SALARIU) nu a putut fi validat - restricie de verificare violat

Nu se poate activa restricia pentru c exist o nregistrare care este nclcat. Se poate activa numai pentru nregistrrile viitoare:
SQL> alter table personal enable novalidate constraint pers_val_salariu Tabel modificat. SQL> select * from personal; Apasati <ENTER> MARCA NUME SALARIU COD_SUB ---------- -------------------- ---------- ---------100 Ionescu Vasile 9000 20

Dac modificm valoarea eronat, putem activa restricia:


SQL> update personal set salariu=5000 where marca=100; 1 nregistrare actualizat. SQL> alter table personal enable validate constraint pers_val_salariu; Tabel modificat.

Redenumirea unei restricii:


SQL> alter table personal rename constraint SYS_C005485 to pk_pers; Tabel modificat. SQL> select owner, constraint_name, constraint_type, status from user_constraints where table_name='PERSONAL'; Apasati <ENTER> OWNER CONSTRAINT_NAME ------------ ------------ -----------------------------TEST PK_PERS TEST P_FK TEST PERS_VAL_SALARIU TEST SYS_C005482 TEST SYS_C005483 C P R C C C STATUS -------ENABLED ENABLED ENABLED ENABLED ENABLED

tergerea unei restricii:


SQL> alter table personal drop constraint pers_val_salariu Tabel modificat. SQL> alter table personal add

Integritatea datelor i restricii n baza de date - 70 -

Baze de date Oracle


2* (constraint pers_val_salariu check (salariu>1000 and salariu<=6000) initially deferred deferrable); Tabel modificat. SQL> insert into personal values ('200', 'Popescu Mioara',400,20); 1 nregistrare creat. SQL> commit; commit * EROARE la linia 1: ORA-02091: tranzacia a fost derulat napoi ORA-02290: regul de constrngere (TEST.PERS_VAL_SALARIU) violat

Aici se observ influena restriciilor DEFERRED. O nregistrare s-a inserat fr a respecta restriciile, ns la sfritul tranzaciei (COMMIT) ea a fost respins i s-a fcut ROLLBACK.

Integritatea datelor i restricii n baza de date - 71 -

Baze de date Oracle

10. MANAGEMENTUL UTILIZATORILOR I SECURITATEA INFORMAIILOR


Este foarte important gestionarea accesului utilizatorilor la datele dintr-o baz de date ORACLE. Drepturile sunt alocate utilizatorilor de ctre administratorii bazei de date. 10.1. Utilizarea profilelor pentru utilizatori Un profil este un set de reguli definite n legtur cu parola i resursele bazei de date. Dup definirea lui, un profil poate fi setat pentru unul sau mai muli utilizatori. Printr-un profil se pot seta urmtoarele restricii: termen pentru expirarea parolei istoric privind reutilizarea unei parole verificarea complexitii blocarea unei parole alocarea timpilor pentru procesor timpi de conectare memorie alocat utilizatorului resurse I/O alocate (volum de date citit din baza de date) Oracle creeaz automat un profil implicit pentru toi utilizatorii. Pentru profilul implicit, toate resursele sunt nelimitate. Totui, administratorul bazei de date poate modifica valorile resurselor alocate pentru profilul DEFAULT. Utilizarea profilelor este util pentru: limitarea utilizatorilor pentru a executa anumite operaii care necesit resurse importante asigurarea c utilizatorii sunt deconectai de la baza de date dac le-a expirat timpul de conectare stabilirea resurselor care pot fi folosite de utilizatori similari managementul resurselor n cazul bazelor de date cu muli utilizatori controlul utilizrii parolelor Asignarea unui profil nu afecteaz sesiunea curent a utilizatorului. Profilele pot fi atribuite numai utilizatorilor nu i rolurilor. Managementul parolelor ne ofer urmtoarele faciliti: blocarea contului: se realizeaz automat dac la conectare se d o parol greit de un anumit numr de ori termen de utilizare: dup o perioad prestabilit o parol expir dac nu a fost rennoit istoricul parolei: verific c parolele noi nu sunt parole vechi care au mai fost utilizate. Parolele vechi pot fi reutilizate dect dup un anumit timp sau dup un anumit numr de schimbri ale acestora. verificarea complexitii parolei (lungime, s nu fie identic cu numele utilizatorului, s difere de precedenta cu minim 3 caractere, etc) Managementul utilizatorilor i securitatea informaiilor - 72 -

Baze de date Oracle Exemple:


SQL> CREATE PROFILE pers_profil LIMIT 2 SESSIONS_PER_USER UNLIMITED 3 CPU_PER_SESSION UNLIMITED 4 CPU_PER_CALL 3000 5 CONNECT_TIME 45 6 LOGICAL_READS_PER_SESSION DEFAULT 7 LOGICAL_READS_PER_CALL 1000 8 PRIVATE_SGA 15K 9* COMPOSITE_LIMIT 5000000 Profil creat.

Cu profilul de mai sus se impun urmtoarele restricii: - numrul de sesiuni simultane pentru utilizator nelimitat - ntr-o sesiune utilizatorul poate utiliza nelimitat timpul procesorului - un simplu apel al utilizatorului nu poate solicita mai mult de 3000 sutimi de secund (30 secunde) - o sesiune nu poate dura mai mult de 45 minute - numrul de blocuri citite din BD este cel stabilit n profilul DEFAULT - un simplu apel nu poate citi mai mult de 1000 blocuri - se aloc 15 K din SGA - ntr-o sesiune nu poate consuma mai mult de 5 milioane de uniti de servire.
SQL> CREATE OR REPLACE FUNCTION verify_function 2 (username varchar2, 3 password varchar2, 4 old_password varchar2) 5 RETURN boolean IS 6 n boolean; 7 m integer; 8 differ integer; 9 isdigit boolean; 10 ischar boolean; 11 ispunct boolean; 12 digitarray varchar2(20); 13 punctarray varchar2(25); 14 chararray varchar2(52); 15 16 BEGIN 17 digitarray:= '0123456789'; 18 chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 19 punctarray:='!"#$%&()''*+,-/:;<=>?_'; 20 21 --Verifica daca parola este identica cu numele utilizatorului 22 IF password = username THEN 23 raise_application_error(-20001, 'Parola este la fel ca utilizatorul'); 24 END IF; 25 26 --Verifica lungimea parolei

Managementul utilizatorilor i securitatea informaiilor - 73 -

Baze de date Oracle


27 IF length(password) < 4 THEN 28 raise_application_error(-20002, 'Parola este mai mica ca 4'); 29 END IF; 30 31 --Verifica daca parola este prea simpla 32 --prin verificarea ca nu este data de cuvinte 33 --care sunt prea simple ca sa fie parola. 34 35 IF NLS_LOWER(password) IN ('welcome', 'database', 'account', 'user', 36 'password', 'oracle', 'computer', 'abcd') 37 THEN raise_application_error(-20002, 'Parola este prea simpla'); 38 END IF; 39 40 --Verifica daca parola are cel putin o litera, o cifra, 41 --si un semn de punctuatie. 42 --1. Verifica daca are o cifra 43 --Se poate utiliza o cifra 0...9. 44 45 isdigit:=FALSE; 46 m := length(password); 47 FOR i IN 1..10 LOOP 48 FOR j IN 1..m LOOP 49 IF substr(password,j,1) = substr(digitarray,i,1) THEN 50 isdigit:=TRUE; 51 GOTO findchar; 52 END IF; 53 END LOOP; 54 END LOOP; 55 IF isdigit = FALSE THEN 56 raise_application_error(-20003, 'Parola trebuie sa cuprinda cel putin \ 57 o cifra, un caracter si un semn de punctuatie'); 58 END IF; 59 --2. Cauta un caracter 60 61 <<findchar>> 62 ischar:=FALSE; 63 FOR i IN 1..length(chararray) LOOP 64 FOR j IN 1..m LOOP 65 IF substr(password,j,1) = substr(chararray,i,1) THEN 66 ischar:=TRUE; 67 GOTO findpunct; 68 END IF; 69 END LOOP; 70 END LOOP; 71 IF ischar = FALSE THEN 72 raise_application_error(-20003, 'Parola trebuie sa cuprinda cel putin \ 73 o cifra, un caracter si un semn de punctuatie'); 74 END IF; 75 --3. Cauta un semn de punctuatie

Managementul utilizatorilor i securitatea informaiilor - 74 -

Baze de date Oracle


76 77 <<findpunct>> 78 ispunct:=FALSE; 79 FOR i IN 1..length(punctarray) LOOP 80 FOR j IN 1..m LOOP 81 IF substr(password,j,1) = substr(punctarray,i,1) THEN 82 ispunct:=TRUE; 83 GOTO endsearch; 84 END IF; 85 END LOOP; 86 END LOOP; 87 IF ispunct = FALSE THEN raise_application_error(-20003, 'Parola trebuie sa cuprinda cel putin \ 88 o cifra, un caracter si un semn de punctuatie'); 89 END IF; 90 91 <<endsearch>> 92 --Verifica ca parola difera de precedenta cu cel putin 3 caractere 93 IF old_password = '' THEN 94 raise_application_error(-20004, 'Old password is null'); 95 END IF; 96 --Daca toate conditiile sunt satisfacute returneaza TRUE ; 97 differ := length(old_password) - length(password); 98 IF abs(differ) < 3 THEN 99 IF length(password) < length(old_password) THEN 100 m := length(password); 101 ELSE 102 m:= length(old_password); 103 END IF; 104 differ := abs(differ); 105 FOR i IN 1..m LOOP 106 IF substr(password,i,1) != substr(old_password,i,1) THEN 107 differ := differ + 1; 108 END IF; 109 END LOOP; 110 IF differ < 3 THEN 111 raise_application_error(-20004, 'Parola trebuie s difere cu minim\ 112 3 caractere'); 113 END IF; 114 END IF; 115 --Daca toate conditiile sunt satisfacute returneaza TRUE ; 116 RETURN(TRUE); 117 END; 118 / Funcie creat. SQL> CREATE PROFILE pers_prof2 LIMIT 2 FAILED_LOGIN_ATTEMPTS 5 3 PASSWORD_LIFE_TIME 60 4 PASSWORD_REUSE_TIME 60 5 PASSWORD_REUSE_MAX 5 6 PASSWORD_VERIFY_FUNCTION verify_function

Managementul utilizatorilor i securitatea informaiilor - 75 -

Baze de date Oracle


7 8 PASSWORD_LOCK_TIME 1/24 PASSWORD_GRACE_TIME 10;

Profil creat. SQL> alter user test profile pers_prof2; Utilizator modificat.

S-a ataat utilizatorului test profilul pers_prof2. Profilul are urmtoarele particulariti: - numrul de ncercri nainte de blocarea contului este 5; - durata de utilizare a parolei este 60 de zile, cu o perioad ulterioar de 10 zile de graie n care aceasta poate fi schimbat; - parola poate fi reutilizat dup 60 de zile dac s-au efectuat alte 5 modificri de parol ntre timp; - la introducerea unei parole noi se fac verificrile din funcia VERIFY_FUNCTION; - blocarea parolei la parol greit se va face dup 1/24 zile (o or). 10.2. Scheme i utilizatori n baza de date O schem este o colecie de date structurate sau obiecte. Schema este proprietatea unui utilizator al bazei de date i are acelai nume ca i acesta. Schema de obiecte este administrat de comenzi SQL i include urmtoarele tipuri de obiecte: Clusters Constraints Database links Database triggers Dimensions External procedure libraries Index-organized tables Indexes Indextypes Java classes, Java resources, Java sources Materialized views Materialized view logs Object tables Object types Object views Operators Packages Sequences Stored functions, stored procedures Synonyms Tables Views Exist obiecte ale bazei de date care nu fac parte dintr-o schem: Managementul utilizatorilor i securitatea informaiilor - 76 -

Baze de date Oracle Contexts Directories Parameter files (PFILEs) and server parameter files (SPFILEs) Profiles Roles Rollback segments Tablespaces Users O dat cu crearea bazei de date se creeaz i civa utilizatori: - SYS este proprietarul bazei de date i are parola implicita change_on_install - SYSTEM este administratorul bazei de date i are parola manager - SYSMAN administrator pentru Oracle Enterprise Manager, parola implicit oem_temp - HR proprietarul schemei Human Resources, parola HR - SCOTT proprietarul unei scheme exemplu, parola implicit tiger. Exist mai multe metode de autentificare a utilizatorilor n baza de date Oracle: - autentificare de ctre baza date n acest caz utilizatorul este acceptat pe baza numelui i a parolei gestionate de baza de date. Se vor utiliza numai setul de caractere ASCII, fr semne diacritice. Se recomand utilizarea profilelor i a managementului parolelor. - autentificare de ctre sistemul de operare sau de ctre serviciile de reea numit i autorizare extern - autentificare global prin Secure Sockets Layer (SSL) cnd accesul este controlat de roluri globale, prin servicii la nivelul companiei, cum este LDAP. Lightweight Directory Access Protocol, sau LDAP este un protocol pentru interogri sau modificri ale serviciilor de tip director care ruleaz peste TCP/IP. - autentificarea printr-un proxy server caz utilizat atunci cnd se utilizeaz servere de aplicaii (middle-tier). n continuare ne vom referi la autentificarea de ctre baza de date. Autentificarea de ctre SO nu se recomand, iar celelalte moduri de autentificare reprezint variante avansate. Pentru aceasta parametrul de iniializare REMOTE_OS_AUTHENT = FALSE. 10.3. Crearea i administrarea utilizatorilor Crearea utilizatorilor se face cu c-da CREATE USER:
SQL> conn / as sysdba Conectat. SQL> create user test identified by test 2 default tablespace users 3 quota unlimited on users 4 temporary tablespace temp; Utilizator creat.

Managementul utilizatorilor i securitatea informaiilor - 77 -

Baze de date Oracle


SQL> grant connect to test; Permisiune acordat. SQL> conn test/test@hazi Conectat.

S-a creat utilizatorul TEST cu parola TEST care are spaiu nelimitat alocat n tablespace USERS. nainte de utilizare trebuie acordat privilegiul CONNECT contului respectiv. Modificarea parolei se face cu c-da PASSWORD din SQL sau cu ALTER USER:
SQL> conn test/test Conectat. SQL> password Modific parola pentru TEST Parol veche: **** Parol nou: **** Reintroducei noua parol: **** Parol modificat SQL> alter user test identified by test replace hazi; Utilizator modificat.

Alte drepturi sau modificri ale profilului sau rolurilor acordate se face cu c-da ALTER USER:
SQL> ALTER USER test DEFAULT TABLESPACE data_ts TEMPORARY TABLESPACE temp_ts QUOTA 100M ON data_ts QUOTA 0 ON test_ts PROFILE clerk; Utilizator modificat.

tergerea unui utilizator se face cu c-da DROP USER:


SQL> drop user test cascade; Utilizator modificat.

Opiunea CASCADE permite tergerea tuturor obiectelor aflate n proprietatea utilizatorului i a altor legturi (restricii) n baza de date. Obinerea de informaii despre utilizatori se pot obine cu vederile:
Vedere DBA_USERS ALL_USERS USER_USERS DBA_TS_QUOTAS USER_TS_QUOTAS USER_PASSWORD_LIMITS Descrie restriciile impuse parolei utilizatorului Desriere Afieaz toi utilizatorii din baza de date Afieaz utilizatorii vizibili pentru utilizatorul curent Descrie utilizatorul curent Afieaz cotele de spaiu alocate utilizatorilor

Managementul utilizatorilor i securitatea informaiilor - 78 -

Baze de date Oracle


Vedere Desriere USER_RESOURCE_LIMITS Afieaz drepturile de utilizare a resurselor bazei de date pentru utilizatorul curent DBA_PROFILES RESOURCE_COST V$SESSION V$SESSTAT V$STATNAME Afieaz profilele utilizator i limitrile impuse Afieaz costul setat pentru fiecare resurs Informaii despre sesiunile fiecrui utilizator Afieaz statistici despere sesiunile utilizator Afieaz informaii explicite despre sesiuni

SQL> conn test /test Conectat. SQL> select * from USER_PASSWORD_LIMITS; Apasati <ENTER> RESOURCE_NAME -------------------------------FAILED_LOGIN_ATTEMPTS PASSWORD_LIFE_TIME PASSWORD_REUSE_TIME PASSWORD_REUSE_MAX PASSWORD_VERIFY_FUNCTION PASSWORD_LOCK_TIME PASSWORD_GRACE_TIME 7 nregistrri selectate. LIMIT ---------------5 60 60 5 VERIFY_FUNCTION ,0416 10

10.4. Administrarea privilegiilor Privilegiile reprezint drepturi de a executa anumite comenzi SQL sau proceduri PL/SQL precum i dreptul unui utilizator de a vizualiza sau modifica informaiile dintrun tabel cu date care sunt proprietatea altui utilizator. Exemple de asemenea privilegii: - conectarea la baza de date - crearea unei tabele - vizualizarea informaiilor din tabele care sunt n proprietatea altui utilizator - executarea unei proceduri stocate aflate n proprietatea altui utilizator. Din definiia de mai sus rezult c privilegiile se mpart n dou mari categorii: - privilegii de sistem care se refer la dreptul unui utilizator de a executa operaii de administrare a bazei de date, cum ar fi crearea unui tablespace; - privilegii tip obiect care se refer la dreptul unui utilizator de a executa operaii asupra unor obiecte care nu sunt n proprietatea sa (tabele, vederi, secvene, proceduri, funcii, etc) Un privilegiu poate fi acordat unui utilizator sau unui rol. Un rol este o sum de privilegii care uureaz activitatea de administrare a privilegiilor. Privilegiile de sistem n baza de date Oracle 10g sunt peste 150. n tabelul 10.1 se dau cteva exemple de privilegii de sistem. Managementul utilizatorilor i securitatea informaiilor - 79 -

Baze de date Oracle


Tabelul 10.1 Privilegii de sistem Exemple Privilegiu Utilizare CREATE TABLE Crearea unei tabele CREATE ANY TABLE Crearea unei tabele n orice schem ALTER ANY TABLE Modific orice tabel din baza de date DROP ANY TABLE terge orice tabel SELECT ANY TABLE Vizualizare date din orice tabel CREATE SESSION Conectare la baza de date ALTER SESSION Seteaz sau modific condiiile sau parametrii sesiunii de conectare la baza de date RESTRICTED SESSION Permite conectarea la o baz de date care a fost pornit n mod restricionat (STARTUP RESTRICT) CREATE ANY PROCEDURE Creeaz proceduri, funcii sau pachete n orice schem a bazei de date ALTER ANY PROCEDURE Modific proceduri, funcii sau pachete n orice schem a bazei de date EXECUTE ANY PROCEDURE Execut orice procedur sau funcie

Categoria TABLE

SESSION

PROCEDURE

Pentru acordarea privilegiilor se utilizeaz comenzile SQL GRANT i REVOKE. La acordarea unui privilegiu se poate aduga opiunea WITH ADMIN OPTION care permite utilizatorului respectiv s dea acel drept i altora. Exemple:
SQL> conn / as sysdba Conectat. SQL> grant select any table to test; Permisiune acordat. SQL> conn test/test Conectat. SQL> select * from hr.departments; Apasati <ENTER> DEPARTMENT_ID ------------10 20 30 40 DEPARTMENT_NAME MANAGER_ID LOCATION_ID ------------------------------ ---------- -------Administration 200 1700 Marketing 201 1800 Purchasing 114 1700 Human Resources 203 2400

SQL> conn / as sysdba

Managementul utilizatorilor i securitatea informaiilor - 80 -

Baze de date Oracle


Conectat. SQL> revoke select any table from test; Revocare acordat. SQL> grant alter session to test 2 with admin option; Permisiune acordat. SQL> conn test/test Conectat. SQL> alter session set nls_language=english; Session altered.

Sunt anumite privilegii pe care la are implicit numai utilizatorii cu rolurile SYSDBA sau SYSOPER: STARTUP, SHUTDOWN, ALTER DATABASE OPEN | MOUNT, RECOVER DATABASE. Privilegiile tip obiect sunt privilegii sau drepturi pentru a executa o aciune anume asupra unei tabele, vederi, secvene, proceduri. Cteva privilegii asupra obiectelor sunt date n tabelul 10.2:
Categoria TABLE Tabelul 10.2 Privilegii tip obiect Exemple Privilegiu Utilizare ALTER Modific structura tabelei DELETE tergere de nregistrri din tabel INDEX Creeaz un index pentryu tabel INSERT nsereaz nregistrri n tabel SELECT Vizualizare date UPDATE Modific rnduri din tabel REFERENCES Creeaz o restricie care refer tabela (de ex. cheie strin) EXECUTE Execut procedura sau funcia direct DEBUG Acces prin depanator la variabile, metode i alte tipuri definite

PROCEDURE, FUNCTION, PACKAGE

Exemple:
SQL> grant select on personal to scott; Permisiune acordat.

10.5. Administrarea rolurilor Aa cum am menionat, rolurile cumuleaz o serie de privilegii. Rolurile pot fi alocate utilizatorilor sau altor roluri. Rolurile pot fi date utilizatorilor la fel ca privilegiile de sistem. Un rol poate s conin privilegii sistem i privilegii tip obiect. Managementul utilizatorilor i securitatea informaiilor - 81 -

Baze de date Oracle Rolurile pot fi activate sau dezactivate pentru fie care utilizator. Rolurile nu sunt n proprietatea unui utilizator. Ele sunt stocate n dicionarul bazei de date. Avantajele rolurilor sunt: se uureaz managementul privilegiilor. n loc s se acorde individual un numr de privilegii se acord individual cte un rol; modificarea rolurilor implic automat modificarea privilegiilor la toi utilizatorii care au acest rol; rolurile pot fi activate i dezactivate temporar rolurile nu pot fi asignate prin comenzi ale sistemului de operare. Crearea rolurilor se face cu c-da CREATE ROLE, utilizatorul trebuind s aib acest privilegiu. Exist o serie de roluri predefinite, tabela 10.3.
Rol CONNECT RESOURCE Tabelul 10.3 Rouri predefinite Scriptul care l creeaz SQL.BSQ SQL.BSQ Privilegii incluse CREATE SESSION CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE toate privilegiile de sistem cu WITH ADMIN OPTION Privilegii necesare pentru a exporta orice din baza de date Privilegii necesare pentru a importa orice n baza de date DELETE n tabela de audit AUD$ Privilegiul EXECUTE asupra obiectelor din dicionar Privilegiul SELECT asupra obiectelor din dicionar

DBA

SQL.BSQ

EXP_FULL_DATABASE IMP_FULL_DATABASE DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE SELECT_CATALOG_ROLE

CATEXP.SQL CATEXP.SQL SQL.BSQ SQL.BSQ SQL.BSQ

Managementul utilizatorilor i securitatea informaiilor - 82 -

Baze de date Oracle


RECOVERY_CATALOG_OWNER CATALOG.SQL Privilegii pentru proprietarul catalogului de recuperare Privilegii de acces la serviciile care permit lucrul cu baze de date strine

HS_ADMIN_ROLE

CATHS.SQL

Exemplu: Crearea unui rol pers prin care utilizatorul are acces la tabela employees din schema hr:
SQL>create role pers identified by hr; Rol creat. SQL> grant select on hr.employees to pers; Permisiune acordat. SQL> grant pers to test; Permisiune acordat. SQL> conn test/test@hazi Conectat. SQL> select first_name, last_name, salary from hr.employees; FIRST_NAME -------------------Steven Neena Lex Alexander Bruce David Valli Diana Nancy Daniel John LAST_NAME SALARY ------------------------- ---------King 24000 Kochhar 17000 De Haan 17000 Hunold 9000 Ernst 6000 Austin 4800 Pataballa 4800 Lorentz 4200 Greenberg 12000 Faviet 9000 Chen 8200

Clauza IDENTIFIED asigur c rolul va fi activ numai pentru utilizatorul cu parola scris n clauz. tergerea unui rol se face cu c-da DROP ROLE:
SQL> drop role pers; Rol modificat.

Managementul utilizatorilor i securitatea informaiilor - 83 -

Baze de date Oracle

11. SQL N ORACLE


11.1. Oracle SQL Plus n paragraful 3.3 s-au prezentat cteva informaii eseniale despre SQL Plus. Aa cum s-a artat, SQL Plus este un instrument de baz n administrarea bazei de date, precum i n testarea interogrilor SQL. De asemenea n SQL Plus se pot obine rapid rapoarte formatate text, rezultate dintr-o interogare SQL. Pentru a executa o procedur PL/SQL sau un bloc PL/SQL acesta se scrie ntrun fiier ASCII i se execut cu c-da @fiier_sql sau se tasteaz direct blocul PL/SQL:
SQL> DECLARE 2 x NUMBER := 100; 3 BEGIN 4 DELETE FROM TEMP; 5 FOR i IN 1..10 LOOP 6 IF MOD (i, 2) = 0 THEN --i is even 7 INSERT INTO temp VALUES (i, x, 'i is even'); 8 ELSE 9 INSERT INTO temp VALUES (i, x, 'i is odd'); 10 END IF; 11 x := x + 100; 12 END LOOP; 13 END; 14 / Procedur PL/SQL ncheiat cu succes. SQL> commit; Confirmare finalizat. temp; Apasati <ENTER> I NUMAR PAR_IMPAR ---------- ---------- --------------1 100 i is odd 2 200 i is even 3 300 i is odd 4 400 i is even 5 500 i is odd 6 600 i is even 7 700 i is odd 8 800 i is even 9 900 i is odd 10 1000 i is even 10 nregistrri selectate. SQL> select n1 as i, n2 as numar, explicatii as Par_impar from

SQL n Oracle - 84 -

Baze de date Oracle Se remarc c un bloc PL/SQL ncepe cu DECLARE, dac sunt variabile de declarat sau cu BEGIN n caz contrar. Pentru a fi executat, dup ultima linie de cod (END) se introduce /. Pe lng blocuri PL/SQL pot fi create i stocate proceduri i funcii precompilate n baza de date. Acestea pot fi lansate i referite de ctre orice aplicaie sau utilizator n funcie de drepturile utilizatorului. Generarea acestora se face cu c-zile SQL CREATE PROCEDURE, respectiv CREATE FUNCTION:
SQL> CREATE OR REPLACE PROCEDURE sterg_sal (nmarca IN NUMBER, nr_sal OUT NUMBER) AS 2 BEGIN 3 DELETE FROM personal 4 WHERE personal.marca = nmarca; 5 Select count(*) into nr_sal from personal; 6 END; 7 / Procedur creat.

S considerm urmtorul bloc PL/SQL care apeleaz procedura:


SQL> DECLARE nr_salariati number; 2 BEGIN 3 sterg_sal(110,nr_salariati); 4 DBMS_OUTPUT.PUT_LINE('Nr. salariai rmai: ' ||TO_CHAR(nr_salariati)); 5* END; / Nr. salariai rmai: 20 Procedur PL/SQL ncheiat cu succes.

S precizm c procedurile pot fi i n C sau JAVA. Vizualizarea textului procedurii stocate se poate face cu vederea USER_SOURCE:
SQL> select text from user_source where name='STERG_SAL'; Apasati <ENTER> TEXT ----------------------------------------------------------------PROCEDURE sterg_sal (nmarca IN NUMBER, nr_sal OUT NUMBER) AS BEGIN DELETE FROM personal WHERE personal.marca = nmarca; Select count(*) into nr_sal from personal; END; 6 nregistrri selectate.

Apelul unei proceduri stocate poate fi fcut n mai multe moduri, de exemplu, prin utilizarea variabilelor de legtur:
SQL> variable nr_salariati number; SQL> call sterg_sal(120,:nr_salariati); Apelul a fost finalizat.

SQL n Oracle - 85 -

Baze de date Oracle 11.2. Particulariti SQL n Oracle Oracle SQL respect standardul ANSI/ISO/IEC 9075:2003, "Database Language SQL", dar are multe mbuntiri. SQL ofer instrumente pentru: interogarea datelor nserarea, modificarea i tergerea rndurilor n tabele crearea, nlocuirea, modificarea i tergerea obiectelor controlul accesului la baza de date i la obiectele sale controlul consistenei i integritii bazei de date Obinerea de informaii suplimentare despre nregistrri Se pot obine prin afiarea pseudocolanelor: ROWNUM afieaz numrul liniei selectate dintr-un tabel ROWID afieaz adresa unei nregistrri dintr-un tabel nregistrnd urmtoarele informaii: numrul obiectului component numrul blocului de date n cadrul fiierului de date poziia rndului n cazul blocului de date (primul rnd are adresa 0) ORA_ROWSCN memoreaz data i ora cnd nregistrarea a fost modificat ultima oar, sub forma SCN (system change number). Pentru aceasta tabela trebuie creat cu opiunea ROWDEPENDENCIES.
SQL> SELECT ROWNUM, ROWID, 2 RTRIM(SCN_TO_TIMESTAMP(ORA_ROWSCN)), 3 marca,nume, salariu 4* from personal order by salariu desc / Apasati <ENTER>
ROWNUM -----1 3 2 ROWID -----------------AAAM5kAAEAAAAJEAAA AAAM5kAAEAAAAJFAAB AAAM5kAAEAAAAJFAAA RTRIM(SCN_TO_TIMESTAMP(ORA_RO MARCA NUME SALARIU ----------------------------- ---------- ----------------18-07-2007 19:01:11,000000000 100 Popescu Mihai 3800 20-07-2007 18:09:44,000000000 120 Mihail Alexandru 2800 20-07-2007 18:09:44,000000000 110 Alexa Valentin 2300

Operatori SQL Oracle - operatori aritmetici unari: +,- (aezai naintea variabilei) binari: +, -, /, * - operatori de concatenare || - pentru cmpuri de tip ir de caractere sau CLOB
SQL> select 'Numele este: '||nume from personal 2* where marca=120; 'NUMELEESTE:'||NUME ------------------------------------------Numele este: Mihail Alexandru

operatori pentru mulimi o UNION nregistrri distincte din mai multe interogri o UNION ALL - nregistrri din mai multe interogri, inclusiv multiple - 86 -

SQL n Oracle

Baze de date Oracle o INTERSECT nregistrri distincte aflate n dou interogri o MINUS nregistrri distincte aflate n prima interogare i negsite n cea de-a doua - Operatori definii de utilizator cu c-da CREATE OPERATOR:
SQL> AS 2 3 4 5 6 7 CREATE FUNCTION eq_f(a VARCHAR2, b VARCHAR2) RETURN NUMBER BEGIN IF a = b THEN RETURN 1; ELSE RETURN 0; END IF; END; /

Funcie creat. SQL> 2 3 4 CREATE OPERATOR eq_op BINDING (VARCHAR2, VARCHAR2) RETURN NUMBER USING eq_f;

Operatorul a fost creat. SQL> select eq_op('4','3') from dual; Apasati <ENTER> EQ_OP('4','3') -------------0

Se observ c operatorul EQ_OP seamn cu o funcie. Funcii n SQL Oracle Exist un numr foarte mare de funcii, mprite n mai multe categorii: - funcii numerice: ACOS, ASIN, LN, MOD, POWER, etc - funcii pentru iruri de caractere: CHR, CONCAT, REPLACE, etc - funcii pentru seturi de caractere naionale: NLS_CHARSET_DECL_LEN, NLS_CHARSET_ID, NLS_CHARSET_NAME - funcii pentru iruri de caractere care returneaz valori numerice: ASCII, INSTR, LENGTH, etc - funcii pentru dat i timp: SYSDATE, MONTH_BETWEEN, NEW_TIME, LAST_DAY, SYSTEMESTAMP, etc - funcii de comparare general: GREATEST, LEAST - funcii de conversie: ASCII, CAST, CONCAT, TO_CHAR, TO_NUMBER, SCN_TO_TIMESTAMP, etc - funcii pentru obiecte de mari dimensiuni: EMPTY_BLOB, EMPTY_CLOB - funcii pentru mulimi: SET, CARDINALITY, etc - funcii pentru interogri ierarhice: SYS_CONNECT_BY_PATH - funcii pentru codare i decodare: DECODE, VSIZE, etc - funcii pentru tratarea valorilor nule (NULL): COALESCE, NVL, etc - funcii pentru informaii despre mediu: SYS_CONTEXT, USER, etc SQL n Oracle - 87 -

Baze de date Oracle - alte funcii Condiii n SQL Oracle Principalele condiii i prioritatea lor sunt date n tabelul 11.1:
Prioritate 1 2 3 4 5 Tabelul 11.1 Condiii i prioritatea lor Condiie Utilizare =, !=, <, >, <=, >= Comparaie IS [NOT] NULL, LIKE, Comparaie [NOT] BETWEEN, [NOT] IN, EXISTS, IS OF tip NOT Negare logic AND I logic OR SAU logic

Exemple de utilizare a condiiilor:


SQL> select first_name, last_name, department_id, salary from employees 2* where last_name like 'A%'; Apasati <ENTER> FIRST_NAME LAST_NAME DEPARTMENT_ID SALARY ----------- ---------------- ------------------- ------------Ellen Abel 80 11000 Sundar Ande 80 6400 Mozhe Atkinson 50 2800 David Austin 60 4800 SQL>select first_name, last_name, department_id, employees 2* where salary between 5000 and 6000; Apasati <ENTER> FIRST_NAME LAST_NAME DEPARTMENT_ID SALARY ----------- -------- -------- ---------------- ------------Pat Fay 20 6000 Bruce Ernst 60 6000 Kevin Mourgos 50 5800 SQL> select last_name, department_id, salary from employees 2* where department_id in (70,100); Apasati <ENTER> LAST_NAME DEPARTMENT_ID SALARY ------------------------- ------------- ---------Baer 70 10000 Greenberg 100 12000 Faviet 100 9000 Chen 100 8200 Sciarra 100 7700 Urman 100 7800 Popp 100 6900 salary from

SQL n Oracle - 88 -

Baze de date Oracle


7 nregistrri selectate. SQL> 2 3 4 5 6* SELECT department_id, department_name FROM departments d WHERE EXISTS (SELECT * FROM employees e WHERE d.department_id = e.department_id);

Apasati <ENTER> DEPARTMENT_ID ------------10 20 30 40 50 60 70 80 90 100 110 DEPARTMENT_NAME -----------------------------Administration Marketing Purchasing Human Resources Shipping IT Public Relations Sales Executive Finance Accounting

11 nregistrri selectate.

Interogri ale structurilor ierarhice Permite afiarea ordonat a informaiilor structurate ierarhic:
SQL> select level as nivel, 2 substr(last_name,1,10) as Nume, 3 substr(first_name,1,10) As Prenume, 4 department_id as "Cod sub", 5 salary As salariu 6 from employees 7 start with manager_id is null 8 connect by prior employee_id=manager_id 9* ORDER SIBLINGS BY salary desc; Apasati <ENTER> NIVEL ---------1 2 3 4 3 4 4 4 4 4 NUME ---------King Kochhar Higgins Gietz Greenberg Faviet Chen Urman Sciarra Popp PRENUME Cod sub SALARIU ---------- ---------- ---------Steven 90 24000 Neena 90 17000 Shelley 110 12000 William 110 8300 Nancy 100 12000 Daniel 100 9000 John 100 8200 Jose Manue 100 7800 Ismael 100 7700 Luis 100 6900

SQL n Oracle - 89 -

Baze de date Oracle


3 3 3 2 3 4 4 4 4 2 Baer Mavris Whalen De Haan Hunold Ernst Austin Pataballa Lorentz Russell Hermann Susan Jennifer Lex Alexander Bruce David Valli Diana John 70 40 10 90 60 60 60 60 60 80 10000 6500 4400 17000 9000 6000 4800 4800 4200 14000

n exemplul de mai sus legtura ierarhic se obine prin opiunea CONNECT BY PRIOR EMPLOYEE_ID=MANAGER_ID. Afiarea personalului ncepnd cu eful se obine prin opiunea START WITH. De remarcat c ordonarea n cadrul aceluiai nivel ierarhic se face cu clauza ORDER SIBLINGS BY n loc de ORDER BY. Se remarc de asemenea prezena pseudocoloanei LEVEL care indic nivelul de subordonare.
SQL> SELECT last_name "Nume", CONNECT_BY_ISCYCLE "Ciclare", 2 LEVEL "Nivel", SYS_CONNECT_BY_PATH(last_name, '/') "Sefi" 3 FROM employees 4 WHERE level <= 3 AND department_id = 80 5 START WITH last_name = 'King' 6* CONNECT BY NOCYCLE PRIOR employee_id = manager_id AND LEVEL <= 4; Apasati <ENTER>
Nume Ciclare Nivel Sefi ----------------------------------------------------------King 0 1 /King Russell 0 2 /King/Russell Tucker 0 3 /King/Russell/Tucker Bernstein 0 3 /King/Russell/Bernstein Hall 0 3 /King/Russell/Hall Olsen 0 3 /King/Russell/Olsen Cambrault 0 3 /King/Russell/Cambrault Tuvault 0 3 /King/Russell/Tuvault Partners 0 2 /King/Partners

n exemplul de fa se remarc prezena pseudocoloanei CONNECT_BY_ISCYCLE care indic o ciclare (o persoan are doi efi) cu valoarea 1, n rest avnd valoarea 0. n acest caz trebuie modificat clauza CONNECT BY PRIOR n CONNECT NOCYCLE BY PRIOR. De asemenea n exemplul de mai sus se arat utilizarea funciei SYS_CONNECT_BY_PATH care red valorile unei coloane ncepnd de la rdcin pn la nivelul respectiv. Utilizarea opiunilor pentru mulimi
SQL> select last_name||' '||first_name employees 2 union 3 select nume from test.personal 4* order by nume ASC; Apasati <ENTER> as nume from

SQL n Oracle - 90 -

Baze de date Oracle


NUME ---------------------------------------------Abel Ellen Alexa Valentin Ande Sundar Atkinson Mozhe Austin David Baer Hermann Baida Shelli Banda Amit Bates Elizabeth Bell Sarah Bernstein David Bissot Laura

n acest exemplu sunt reunite numele unor persoane aflate n dou tabele din scheme diferite: hr.employees i test.personal. Se remarc c pentru clauza ORDER BY este necesar ca numele coloanelor rezultate s fie identice.
SQL> SELECT TO_BINARY_FLOAT(3) FROM DUAL 2 INTERSECT 3 SELECT 3f FROM DUAL; Apasati <ENTER> TO_BINARY_FLOAT(3) -----------------3,0E+000

Interogri cu legturi Sunt interogri cu clauza WHERE condiie. Interogrile cu legturi sunt de mai multe tipuri: - equijoins conine o relaie de tip egalitate n condiie
SQL> SELECT last_name, job_id, departments.department_id, department_name 2 FROM employees, departments 3 WHERE employees.department_id = departments.department_id 4 ORDER BY last_name; Apasati <ENTER>
LAST_NAME ------------------------Abel Ande Atkinson Austin Baer Baida Banda Bates JOB_ID DEPARTMENT_ID DEPARTMENT_NAME ---------- ------------- ---------SA_REP 80 Sales SA_REP 80 Sales ST_CLERK 50 Shipping IT_PROG 60 IT PR_REP 70 Public Relations PU_CLERK 30 Purchasing SA_REP 80 Sales SA_REP 80 Sales

self joins realizeaz o interogare pe o tabel cu legturi pe aceeai tabel


SELECT e1.last_name||' lucreaza pentru '||e2.last_name "Salariati si sefii lor" FROM employees e1, employees e2 WHERE e1.manager_id = e2.employee_id AND e1.last_name LIKE 'R%';

SQL> 2 3 4 5*

SQL n Oracle - 91 -

Baze de date Oracle


Apasati <ENTER> Salariati si sefii lor -----------------------------------------------------------Rajs lucreaza pentru Mourgos Raphaely lucreaza pentru King Rogers lucreaza pentru Kaufling Russell lucreaza pentru King

produs cartezian se realizeaz interogarea pe dou tabele fr o legtur ntre ele. Rezult un numr de nregistrri egal cu produsul dimensiunilor celor dou tabele.
e.salary,

SQL> select e.last_name, e.department_id, d.department_name 2 from employees e, departments d; Apasati <ENTER>

LAST_NAME DEPARTMENT_ID SALARY DEPARTMENT_NAME ------------------------- ------------- ---------- ------------OConnell 50 2600 Administration Grant 50 2600 Administration Whalen 10 4400 Administration Hartstein 20 13000 Administration Fay 20 6000 Administration

inner joins este legtura dintre dou sau mai multe tabele care returneaz numai nregistrrile care satisface legtura. Legturile equijoins sunt un caz particular al acestei categorii outer joins printr-o astfel de restricie se returneaz i alte nregistrri pentru care nu exist nregistrri. Dac avem dou tabele A i B atunci, n funcie de nregistrrile suplimentare returnate de interogare, avem mai multe variante o LEFT [OUTER] JOIN returneaz toate nregistrrile din A. Se mai noteaz i cu (+) n partea tabelei A. Pentru corespondena din B se completeaz cu NULL. o RIGHT [OUTER] JOIN returneaz toate nregistrrile din B. Se mai noteaz i cu (+) n partea tablei B o FULL [OUTER] JOIN returneaz ambele mulimi completate cu NULL.

SQL> SELECT e1.employee_id, e1.manager_id, e2.employee_id 2 FROM employees e1, employees e2 3 WHERE e1.manager_id(+) = e2.employee_id; Apasati <ENTER> EMPLOYEE_ID MANAGER_ID EMPLOYEE_ID ----------- ---------- ----------198 124 124 199 124 124 200 101 101 201 100 100 202 201 201 ..........................

SQL n Oracle - 92 -

Baze de date Oracle


162 133 136

......................................................... Se observ c n exemplul de mai sus sunt returnate i id-urile salariailor care nu sunt efi. - antijoins sunt returnate nregistrrile din partea stng a restriciei care nu au coresponden n dreapta
SQL> SELECT e.employee_id, e.last_name, l.city 2 FROM employees e, locations l, departments d 3 WHERE e.department_id NOT IN 4 (SELECT d.department_id FROM departments 5 WHERE d.location_id = 1700) 6 AND (l.location_id=d.location_id ) 7 AND (e.department_id=d.department_id) 8* ORDER BY last_name SQL> / Apasati <ENTER> EMPLOYEE_ID ----------174 166 130 105 204 167 172 192 151 129 169 185 187 154 148 188 LAST_NAME ------------------------Abel Ande Atkinson Austin Baer Banda Bates Bell Bernstein Bissot Bloom Bull Cabrio Cambrault Cambrault Chung CITY ---------------------Oxford Oxford South San Francisco Southlake Munich Oxford Oxford South San Francisco Oxford South San Francisco Oxford South San Francisco South San Francisco Oxford Oxford South San Francisco

semijoins returneaz numai nregistrrile pentru care o condiie EXIST este adevrat fr a multiplica numrul de linii (dac condiia este satisfcut de mai multe ori)

SQL> SELECT * FROM departments 2 WHERE EXISTS 3 (SELECT * FROM employees 4 WHERE departments.department_id = employees.department_id 5 AND employees.salary > 2500) 6 ORDER BY department_name; Apasati <ENTER>
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID ------------- ------------------------------ ---------- ----------110 Accounting 205 1700

SQL n Oracle - 93 -

Baze de date Oracle


10 90 100 40 60 20 70 30 80 50 Administration Executive Finance Human Resources IT Marketing Public Relations Purchasing Sales Shipping 200 100 108 203 103 201 204 114 145 121 1700 1700 1700 2400 1400 1800 2700 1700 2500 1500

11 nregistrri selectate.

Utilizare subqueries n exemplele precedente s-au utilizat de mai multe ori subqueries. Mai artm un exemplu n care sunt listai salariaii cu salariul mai mare ca media acestuia pe departament:
SQL> select department_id, avg(salary) 2 from employees 3* group by department_id SQL> / Apasati <ENTER> DEPARTMENT_ID AVG(SALARY) ------------- ----------30 3914,28571 100 8600 7000 20 9500 70 10000 90 19333,3333 110 10150 50 3475,55556 40 6500 80 8955,88235 10 4400 60 5760 12 nregistrri selectate. SQL> SELECT department_id, last_name, salary 2 FROM employees x 3 WHERE salary > (SELECT AVG(salary) 4 FROM employees 5 WHERE x.department_id = department_id) 6 ORDER BY department_id; Apasati <ENTER> DEPARTMENT_ID ------------20 30 50 50 50 50 50 LAST_NAME SALARY ------------------------- ---------Hartstein 13000 Raphaely 11000 Weiss 8000 Fripp 8200 Kaufling 7900 Vollman 6500 Mourgos 5800

SQL n Oracle - 94 -

Baze de date Oracle

12. PROGRAME STOCATE N BAZA DE DATE


12.1. Administrarea pachetelor de programe n capitolul precedent am artat cum se creeaz sau se modific o procedur sau o funcie stocat n baza de date. Pe lng acestea se pot crea pachete de programe (package) care pot conine una sau mai multe proceduri i/sau funcii n legtur cu o problem dat. Pachetele de programe au dou componente: - PACKAGE care cuprinde specificaiile pentru pachet, adic interfaa pachetului; - PACKAGE BODY care cuprinde obiectele, procedurile i funciile pachetului. Crearea pachetelor se realizeaz cu c-da CREATE PACKAGE, respectiv CREATE PACKAGE BODY.
SQL> conn hr/hr Conectat. SQL> CREATE OR REPLACE PACKAGE emp_mgmt AS 2 FUNCTION hire (last_name VARCHAR2, job_id VARCHAR2, 3 manager_id NUMBER, salary NUMBER, 4 commission_pct NUMBER, department_id NUMBER) 5 RETURN NUMBER; 6 FUNCTION create_dept(department_id NUMBER, location_id NUMBER) 7 RETURN NUMBER; 8 PROCEDURE remove_emp(employee_id NUMBER); 9 PROCEDURE remove_dept(department_id NUMBER); 10 PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER); 11 PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER); 12 no_comm EXCEPTION; 13 no_sal EXCEPTION; 14 END emp_mgmt; 15 / mpachetare creat. SQL> CREATE OR REPLACE PACKAGE BODY emp_mgmt AS 2 tot_emps NUMBER; 3 tot_depts NUMBER; 4 FUNCTION hire 5 (last_name VARCHAR2, job_id VARCHAR2, 6 manager_id NUMBER, salary NUMBER, 7 commission_pct NUMBER, department_id NUMBER) 8 RETURN NUMBER IS new_empno NUMBER; 9 BEGIN 10 SELECT employees_seq.NEXTVAL 11 INTO new_empno 12 FROM DUAL; 13 INSERT INTO employees

Programe stocate n baza de date - 95 -

Baze de date Oracle


14 VALUES (new_empno, 'First', 'Last','first.last@oracle.com', 15 '(123)123-1234','18-JUN02','IT_PROG',90000000,00, 16 100,110); 17 tot_emps := tot_emps + 1; 18 RETURN(new_empno); 19 END; 20 FUNCTION create_dept(department_id NUMBER, location_id NUMBER) 21 RETURN NUMBER IS 22 new_deptno NUMBER; 23 BEGIN 24 SELECT departments_seq.NEXTVAL 25 INTO new_deptno 26 FROM dual; 27 INSERT INTO departments 28 VALUES (new_deptno, 'department name', 100, 1700); 29 tot_depts := tot_depts + 1; 30 RETURN(new_deptno); 31 END; 32 PROCEDURE remove_emp (employee_id NUMBER) IS 33 BEGIN 34 DELETE FROM employees 35 WHERE employees.employee_id = remove_emp.employee_id; 36 tot_emps := tot_emps - 1; 37 END; 38 PROCEDURE remove_dept(department_id NUMBER) IS 39 BEGIN 40 DELETE FROM departments 41 WHERE departments.department_id = remove_dept.department_id; 42 tot_depts := tot_depts - 1; 43 SELECT COUNT(*) INTO tot_emps FROM employees; 44 END; 45 PROCEDURE increase_sal(employee_id NUMBER, salary_incr NUMBER) IS 46 curr_sal NUMBER; 47 BEGIN 48 SELECT salary INTO curr_sal FROM employees 49 WHERE employees.employee_id = increase_sal.employee_id; 50 IF curr_sal IS NULL 51 THEN RAISE no_sal; 52 ELSE 53 UPDATE employees 54 SET salary = salary + salary_incr 55 WHERE employee_id = employee_id; 56 END IF; 57 END; 58 PROCEDURE increase_comm(employee_id NUMBER, comm_incr NUMBER) IS 59 curr_comm NUMBER; 60 BEGIN 61 SELECT commission_pct

Programe stocate n baza de date - 96 -

Baze de date Oracle


62 63 64 65 66 67 68 69 70 71 72 73 INTO curr_comm FROM employees WHERE employees.employee_id = increase_comm.employee_id; IF curr_comm IS NULL THEN RAISE no_comm; ELSE UPDATE employees SET commission_pct = commission_pct + comm_incr; END IF; END; END emp_mgmt; /

Corp mpachetare creat.

Pachetul de mai sus conine dou funcii i patru proceduri: - funcia hire genereaz o marc nou i nsereaz o nregistrare n tabela de salariai employees; - funcia create_dept genereaz un cod nou de departament i nsereaz o nregistrare n tabela de departamente departments; - procedura remove_emp terege o nregistrare din tabela employees - procedura remove_dept terege o nregistrare din tabela departments - procedura increase_sal modific salariul cu o valoare dat i modific nregistrarea din employees; - procedura increase_comm modific comisionul cu o valoare dat i modific nregistrarea din employees. tergerea pachetelor de programe se face cu c-zile DROP PACKAGE nume_pachet i DROP PACKAGE BODY nume_pachet. De asemenea pachetele se pot recompila cu alte condiii cu c-da ALTER PACKAGE:
SQL> ALTER PACKAGE emp_mgmt 2 COMPILE PACKAGE; mpachetare modificat. SQL> ALTER PACKAGE hr.emp_mgmt 2 COMPILE BODY; Corp mpachetare modificat.

Multe pachete sunt deja livrate cu sistemul i sunt generate cu scriptul CATPROC.SQL aflat n folderul RDBMS\ADMIN. 12.2. Mediul de programare PL/SQL PL/SQL este o extensie procedural a SQL, ntr-un limbaj din generaia 4 (4GL). Mediul ofer faciliti avansate precum: ncapsulare, suprascriere a procedurilor, colecii obiecte pe tipuri, tratarea excepiilor, etc. Principalele avantaje ale utilizrii mediului PL/SQL sunt: - integrare natural cu SQL; - performane mrite (a se vedea figura 12.1). Din figur se observ c exist mai multe tehnici de a interoga o baz de date: prin SQL emise de aplicaii, Programe stocate n baza de date - 97 -

Baze de date Oracle prin SQL incluse n mediul PL/SQL i prin proceduri PL/SQL stocate n baza de date, acestea fiind apelate de la distan (Remote Procedure Call RPC); - productivitate ridicat modulele PL/SQL pot fi integrate direct n mediile de dezvoltare Oracle, ca de exemplu Oracle Forms; - portabilitate n orice sistem de operare Figura 12.1 care accept Oracle; Integrarea PL/SQL cu BD - securitate ridicat n Oracle cazul procedurilor stocate, o parte important a acestora fiind invizibil utilizatorilor; - acces la toate pachetele livrate cu baza de date; - poate fi utilizat la crearea de aplicaii Web sau servere de pentru pagini de internet; Modulele PL/SQL, pot fi ntlnite ca blocuri PL/SQL, n proceduri stocate sau n trigere ale bazei de date. Structura unui bloc PL/SQL este urmtoarea:
[DECLARE -- declaraii] BEGIN -- instruciuni [EXCEPTION -- handlers] END

n zona declaraii se definesc variabilele sau constantele locale:


DECLARE -- declaraii constante credit_limit CONSTANT REAL := 5021.31; max_days_in_year CONSTANT INTEGER := 366; urban_legend CONSTANT BOOLEAN := FALSE; -- variabile cu valori iniiale employee_count INTEGER := 0; acct_id INTEGER(4) NOT NULL := 9999; -- delimitarea intervalului credit PLS_INTEGER RANGE 1000..25000; -- utilizarea tipului unei variabile cunoscute debit credit%TYPE; -- variabile structurate tip nregistrare dintr-o tabel

Programe stocate n baza de date - 98 -

Baze de date Oracle


emprec employees%ROWTYPE;

Se pot defini variabile tip nregistrare i pentru cursoare:


DECLARE -- %ROWTYPE poate include toate coloanele dintr-o tabel emp_rec employees%ROWTYPE; -- ...sau o parte dintre acestea utiliznd un cursor CURSOR c1 IS SELECT department_id, department_name FROM departments; dept_rec c1%ROWTYPE; -- se poate defini o variabil %ROWTYPE cu coloane din mai multe -- tabele CURSOR c2 IS SELECT employee_id, email, employees.manager_id, location_id FROM employees, departments WHERE employees.department_id = departments.department_id; join_rec c2%ROWTYPE; BEGIN -- EMP_REC poate memora o linie din tabela EMPLOYEES SELECT * INTO emp_rec FROM employees WHERE ROWNUM < 2; -- Se pot referi coloanele din tabela EMPLOYEES IF emp_rec.department_id = 20 AND emp_rec.last_name = 'JOHNSON' THEN emp_rec.salary := emp_rec.salary * 1.15; END IF; END; /

Operatorii n PL/SQL i ordinea operaiilor sunt date n tabelul 12. 1:


Ordinea de prioritate 1 2 3 4 5 6 Tabela 12.1 Operatori i ordinea lor de prioritate Operator Funcie **
+, -

Exemplu 3**2 -2.5 3.4 * 2.88

*, / +,-,|| IS NULL, LIKE, BETWEEN, IN NOT AND OR

Ridicare la putere Indentitate, negare Multiplicare, mprire Adunare, scdere, concatenare Teste logice

7 8 9

Negaie logic Conjuncie logic Sau logic

4-3 Popescu ||Maria 6 BETWEEN 1 AND 10 LITERA IN (a, b, c) NOT (a > b) (a > b ) AND (c < d) (a > b ) OR (c < d)

Instruciunea CASE cu opiunea WITH permite selectarea rezultatului din mai multe variante. Programe stocate n baza de date - 99 -

Baze de date Oracle


DECLARE calitate CHAR(1) := 'B'; apreciere VARCHAR2(20); BEGIN apreciere := CASE calitate WHEN 'A' THEN 'Excelent' WHEN 'B' THEN 'Foarte buna' WHEN 'C' THEN 'Buna' WHEN 'D' THEN 'Satisfacatoare' WHEN 'F' THEN 'Slaba' ELSE 'Nu este definita' END; DBMS_OUTPUT.PUT_LINE('Calitatea este ' || calitate || ' este ' || apreciere); END; /

12.2.1. Structuri de control Sunt cele cunoscute (figura 12.2) : - structura alternativ sau de selecie - structura repetitiv - structura secvenial

Figura 12.2 Structuri de control

Structura IF THEN (ELSE):


DECLARE sales NUMBER(8,2) := 12100; quota NUMBER(8,2) := 10000; bonus NUMBER(6,2); emp_id NUMBER(6) := 120; BEGIN IF sales > (quota + 200) THEN bonus := (sales - quota)/4; ELSE bonus := 50; END IF;

Programe stocate n baza de date - 100 -

Baze de date Oracle


UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id; END;
/

Structura IF-THEN-ELSEIF:
DECLARE sales NUMBER(8,2) := 20000; bonus NUMBER(6,2); emp_id NUMBER(6) := 120; BEGIN IF sales > 50000 THEN bonus := 1500; ELSIF sales > 35000 THEN bonus := 500; ELSE bonus := 100; END IF; UPDATE employees SET salary = salary + bonus WHERE employee_id = emp_id; END; /

Structura CASE WHEN:


DECLARE CHAR(1); BEGIN calitate := 'B'; CASE calitate WHEN 'A' THEN DBMS_OUTPUT.PUT_LINE('Excelent'); WHEN 'B' THEN DBMS_OUTPUT.PUT_LINE('Foarte buna'); WHEN 'C' THEN DBMS_OUTPUT.PUT_LINE('Buna'); WHEN 'D' THEN DBMS_OUTPUT.PUT_LINE('Satisfacatoare'); WHEN 'F' THEN DBMS_OUTPUT.PUT_LINE('Slaba'); ELSE DBMS_OUTPUT.PUT_LINE('Nedefinita'); END CASE; END; /

Structura LOOP-END LOOP-EXIT:


DECLARE credit_rating NUMBER := 0; BEGIN LOOP credit_rating := credit_rating + 1; IF credit_rating > 3 THEN EXIT; -- exit loop immediately END IF; END LOOP; -- punct de revenire din bucl DBMS_OUTPUT.PUT_LINE ('Credit rating: ' || TO_CHAR(credit_rating)); IF credit_rating > 3 THEN RETURN; -- utilizez RETURN nu EXIT n afara LOOP END IF; DBMS_OUTPUT.PUT_LINE ('Credit rating: ' || TO_CHAR(credit_rating));

Programe stocate n baza de date - 101 -

Baze de date Oracle


END; /

Structura LOOP-END LOOP-EXIT WHEN:


DECLARE total NUMBER(9) := 0; counter NUMBER(6) := 0; BEGIN LOOP counter := counter + 1; total := total + counter * counter; -- exit loop cnd o condiie este ndeplinit EXIT WHEN total > 25000; END LOOP; DBMS_OUTPUT.PUT_LINE('Counter: ' || TO_CHAR(counter) || ' Total: ' ||TO_CHAR(total)); END; /

Utilizarea instruciunii GOTO:


DECLARE total NUMBER(9) := 0; counter NUMBER(6) := 0; BEGIN <<calc_total>> counter := counter + 1; total := total + counter * counter; -- salt la print_total cnd condiia este adevrat IF total > 25000 THEN GOTO print_total; ELSE GOTO calc_total; END IF; <<print_total>> DBMS_OUTPUT.PUT_LINE('Counter: ' || TO_CHAR(counter) || ' Total: ' ||TO_CHAR(total)); END; /

12.2.2. Executarea SQL n mediul PL/SQL PL/SQL accept toate instruciunile SQL pentru manipularea datelor, controlul tranzaciilor, funcii, pseudocoloane i operatori. Pentru manipularea datelor Oracle se pot utiliza operaii DML cum ar fi INSERT, UPDATE i DELETE direct n programe PL/SQL, fr nici o notaie special.
CREATE TABLE employees_temp AS SELECT employee_id, first_name, last_name FROM employees; DECLARE emp_id employees_temp.employee_id%TYPE; emp_first_name employees_temp.first_name%TYPE; emp_last_name employees_temp.last_name%TYPE; BEGIN INSERT INTO employees_temp VALUES(299, 'Bob', 'Henry');

Programe stocate n baza de date - 102 -

Baze de date Oracle


UPDATE employees_temp SET first_name = 'Robert' WHERE employee_id = 299; DELETE FROM employees_temp WHERE employee_id = 299 RETURNING first_name, last_name INTO emp_first_name, emp_last_name; COMMIT; DBMS_OUTPUT.PUT_LINE( emp_first_name || ' ' || emp_last_name); END; /

Pentru a determina ce rnduri sunt afectate de o instruciune DML, se poate utiliza SQL%ROWCOUNT ca n exemplul urmtor.
CREATE TABLE employees_temp AS SELECT * FROM employees; BEGIN UPDATE employees_temp SET salary = salary * 1.05 WHERE salary <

5000;

DBMS_OUTPUT.PUT_LINE('Updated ' || SQL%ROWCOUNT || ' salaries.'); END; /

Se pot utiliza toate funciile SQL:


DECLARE job_count NUMBER; emp_count NUMBER; BEGIN SELECT COUNT(DISTINCT job_id) INTO job_count FROM employees; SELECT COUNT(*) INTO emp_count FROM employees; DBMS_OUTPUT.PUT_LINE(Tipuri de posturi: ||to_char(job_count)|| Numar salariati: ||to_char(emp_count)); END; /

Pentru prelucrarea rezultatelor unei interogri care returneaz nregistrri multiple, PL/SQL utilizeaz cursoare implicite sau explicite. PL/SQL genereaz cursoare implicite pentru toate instruciunile DML, inclusiv interogri care returneaz o singur nregistrare. Dac se dorete un control mai exact al prelucrrii se poate declara un cursor explicit n zona de declaraii. Este necesar un cursor explicit pentru interogrile care returneaz mai mult de un rnd. Pentru a vedea rezultatele unei instruciuni DML se pot utiliza atributele cursoarelor %FOUND, %ISOPEN %NOTFOUND, and %ROWCOUNT.
CREATE TABLE dept_temp AS SELECT * FROM departments; DECLARE dept_no NUMBER(4) := 270; BEGIN DELETE FROM dept_temp WHERE department_id = dept_no; IF SQL%FOUND THEN -- tergere cu succes INSERT INTO dept_temp VALUES (270, 'Personal', 200, 1700); END IF; END; / CREATE TABLE employees_temp AS SELECT * FROM employees; DECLARE mgr_no NUMBER(6) := 122; BEGIN

Programe stocate n baza de date - 103 -

Baze de date Oracle


DELETE FROM employees_temp WHERE manager_id = mgr_no; DBMS_OUTPUT.PUT_LINE('Number of employees deleted: ' || TO_CHAR(SQL%ROWCOUNT)); END; /

Utilizarea unui cursor explicit impune utilizarea comenzilor de control: OPEN, FETCH i CLOSE. Mai nti trebuie iniializat cursorul cu instruciunea OPEN. Dup aceasta se poate utiliza comanda FETCH n mod repetat, pn cnd toate nregistrrile sunt returnate sau se poate utiliza BULK COLLECT pentru a fi aduse toate rndurile simultan. Dup prelucrarea ultimului rnd se apeleaz CLOSE pentru a nchide cursorul.
DECLARE v_jobid employees.job_id%TYPE; -- variabil pentru job_id v_lastname employees.last_name%TYPE; -- variabil pentri last_name CURSOR c1 IS SELECT last_name, job_id FROM employees WHERE REGEXP_LIKE (job_id, 'S[HT]_CLERK'); v_employees employees%ROWTYPE; -- record pentru un rnd CURSOR c2 is SELECT * FROM employees WHERE REGEXP_LIKE (job_id, '[ACADFIMKSA]_M[ANGR]'); BEGIN OPEN c1; -- deschide cursorul c1 LOOP FETCH c1 INTO v_lastname, v_jobid; -- cere 2 coloane n variabile de memorie EXIT WHEN c1%NOTFOUND; DBMS_OUTPUT.PUT_LINE( RPAD(v_lastname, 25, ' ') || v_jobid ); END LOOP; CLOSE c1; DBMS_OUTPUT.PUT_LINE( '-------------------------------------' ); OPEN c2; LOOP FETCH c2 INTO v_employees; -- fetches entire row into the v_employees record EXIT WHEN c2%NOTFOUND; DBMS_OUTPUT.PUT_LINE( RPAD(v_employees.last_name, 25, ' ') ||v_employees.job_id ); END LOOP; CLOSE c2; END; /

n exemplul urmtor se arat utilizarea BULK COLLECT, pentru returnarea tuturor nregistrrilor:
DECLARE TYPE IdsTab IS TABLE OF employees.employee_id%TYPE; TYPE NameTab IS TABLE OF employees.last_name%TYPE; ids IdsTab; names NameTab; CURSOR c1 IS SELECT employee_id, last_name FROM employees WHERE job_id = 'ST_CLERK'; BEGIN

Programe stocate n baza de date - 104 -

Baze de date Oracle


OPEN c1; FETCH c1 BULK COLLECT INTO ids, names; CLOsE c1; -- Se prelucreaz colecia FOR i IN ids.FIRST .. ids.LAST LOOP IF ids(i) > 140 THEN DBMS_OUTPUT.PUT_LINE( ids(i) ); END IF; END LOOP; FOR i IN names.FIRST .. names.LAST LOOP IF names(i) LIKE '%Ma%' THEN DBMS_OUTPUT.PUT_LINE( names(i) ); END IF; END LOOP; END; /

Se remarc declararea variabilelor IdsTab i NameTab care sunt tabele n memorie. Se poate utiliza i SQL dinamic folsind instruciunea EXECUTE IMMEDIATE:
CREATE OR REPLACE PROCEDURE raise_emp_salary (column_value NUMBER,emp_column VARCHAR2, amount NUMBER) IS v_column VARCHAR2(30); sql_stmt VARCHAR2(200); BEGIN -- determin dac s-a cerut o coloan valid SELECT COLUMN_NAME INTO v_column FROM USER_TAB_COLS WHERE TABLE_NAME = 'EMPLOYEES' AND COLUMN_NAME = emp_column; sql_stmt := 'UPDATE employees SET salary = salary + :1 WHERE ' || v_column || ' = :2'; EXECUTE IMMEDIATE sql_stmt USING amount, column_value; IF SQL%ROWCOUNT > 0 THEN DBMS_OUTPUT.PUT_LINE('Salaries have been updated for: ' || emp_column || ' = ' || column_value); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('Invalid Column: ' || emp_column); END raise_emp_salary; / DECLARE plsql_block VARCHAR2(500); BEGIN -- de notat c ; trebuie inclus ntre ghilimele plsql_block := 'BEGIN raise_emp_salary(:cvalue, :cname, :amt); END;'; EXECUTE IMMEDIATE plsql_block USING 110, 'DEPARTMENT_ID', 10; EXECUTE IMMEDIATE 'BEGIN raise_emp_salary(:cvalue, :cname, :amt); END;' USING 112, 'EMPLOYEE_ID', 10; END; /

Programe stocate n baza de date - 105 -

Baze de date Oracle


DECLARE sql_stmt VARCHAR2(200); v_column VARCHAR2(30) := 'DEPARTMENT_ID'; dept_id NUMBER(4) := 46; dept_name VARCHAR2(30) := 'Special Projects'; mgr_id NUMBER(6) := 200; loc_id NUMBER(4) := 1700; BEGIN EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)'; sql_stmt := 'INSERT INTO departments VALUES (:1, :2, :3, :4)'; EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, mgr_id, loc_id; EXECUTE IMMEDIATE 'DELETE FROM departments WHERE ' || v_column || ' = :num' USING dept_id; EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE'; EXECUTE IMMEDIATE 'DROP TABLE bonus'; END; /

12.2.3. Tratarea erorilor n PL/SQL n PL/SQL, o eroare este numit excepie. Ele pot fi definite intern (prin rutine sistem) sau de ctre utilizator. Exemple de excepii interne sunt mprirea la zero sau depirea memoriei, acestea avnd numele de ZERO_DIVIDE, respectiv STORAGE_ERROR. Cnd se ntlnete o eroare este ridicat o excepie. Definirea unei excepii utilizator trebuie ridicat explicit prin instruciunea RAISE.
DECLARE stock_price NUMBER := 9.73; net_earnings NUMBER := 0; pe_ratio NUMBER; BEGIN pe_ratio := stock_price / net_earnings; DBMS_OUTPUT.PUT_LINE('Price/earnings ratio = ' || pe_ratio); EXCEPTION zona de prelucrare a excepiilor -- Numai o ramur WHEN este executat WHEN ZERO_DIVIDE THEN intercepteaz mprirea la zero DBMS_OUTPUT.PUT_LINE('Company must have had zero earnings.'); pe_ratio := NULL; WHEN OTHERS THEN intercepteaz orice ale erori DBMS_OUTPUT.PUT_LINE('Some other kind of error occurred.'); pe_ratio := NULL; END; -- sfrit zona excepii /

n exemplul urmtor se definete o excepie:


DECLARE past_due EXCEPTION; acct_num NUMBER; due_date DATE := SYSDATE - 1;

Programe stocate n baza de date - 106 -

Baze de date Oracle


todays_date DATE := SYSDATE; BEGIN IF due_date < todays_date THEN RAISE past_due; END IF; EXCEPTION WHEN past_due THEN DBMS_OUTPUT.PUT_LINE('Interceptare excepie PAST_DUE !'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Nu s-a gsit PAST_DUE_EXCEPTION n aceast procedur.'); END; /

Programe stocate n baza de date - 107 -

Baze de date Oracle

13. UTILITARE ALE BAZEI DE DATE ORACLE


Oracle 10g este prevzut cu o serie de utilitare i metode pentru exportul i importul bazelor de date. Acestea sunt: Utilitar pentru exportul datelor EXPDP Utilitar pentru importul datelor IMPDP Pachetul PL/SQL DBMS_DATAPUMP (cunoscut ca Data Pump API) Pachetul PL/SQL DBMS_METADATA (cunoscut ca Metadata API) Pe lng aceste utilitare noi n ORACLE 10g, mai exist (inclusiv n ORACLE 10g) utilitareale EXP.EXE i IMP.EXE. Locaia implicit pentru pachetele de export import este dat de directoarea specificat n obiectul DATA_PUMP_DIR. Acesta se obine cu cda:
SQL> select * from all_directories; Apasati <ENTER> OWNER DIRECTORY_NAME DIRECTORY_PATH ---------------- ----------------------- ------------------SYS hazi d:\ SYS SUBDIR D:\oracle\product\10.2.0\db_1\demo\schema\order_entry\/2002/Sep SYS XMLDIR D:\oracle\product\10.2.0\db_1\demo\schema\order_entry\ SYS MEDIA_DIR D:\oracle\product\10.2.0\db_1\demo\schema\product_media\ SYS LOG_FILE_DIR D:\oracle\product\10.2.0\db_1\demo\schema\log\ SYS WORK_DIR C:\ADE\aime_10.2_nt_push\oracle/work SYS DATA_FILE_DIR D:\oracle\product\10.2.0\db_1\demo\schema\sales_history\ SYS DATA_PUMP_DIR D:\oracle\product\10.2.0\admin\hazi\dpdump\ SYS ADMIN_DIR C:\ADE\aime_10.2_nt_push\oracle/md/admin 9 nregistrri selectate.

Pentru alte ci trebuie creat un obiect nou directory:


SQL> CREATE DIRECTORY my_dir AS 'd:\oracle\usr\datafiles';

Utilizatorul trebuie s aib drepturi de scriere n director, prin proceduri ORACLE:


SQL> grant read, write on directory data_pump_dir to scott;

13.1. Exportul datelor n ORACLE Lansarea utilitarului EXPDP se face la modul prompt. Se pot obine informaii cu c-da:
C:\> EXPDP HELP=Y

Utilitare ale bazei de date Oracle - 108 -

Baze de date Oracle Vom prezenta mai nti un exemplu simplu pentru a putea nelege funcionarea utilitarului:
C:\Documents and Settings\george>expdp system/george DUMPFILE=SCOTT.DMP DIRECTORY=DATA_PUMP_DIR schemas=SCOTT

Export: Release 10.2.0.1.0 - Production on Miercuri, 26 Septembrie, 2007 9:19:06 Copyright (c) 2003, 2005, Oracle. All rights reserved.

Conectat la: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Pornire "SYSTEM"."SYS_EXPORT_SCHEMA_01": system/******** schemas=SCOTT DUMPFILE =SCOTT.DMP DIRECTORY=DATA_PUMP_DIR Estimare n curs, utiliznd metoda BLOCKS... Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/TABLE_DATA Estimare total prin utilizarea metodei BLOCKS: 192 KB Procesare a tipului de obiect SCHEMA_EXPORT/USER Procesare a tipului de obiect SCHEMA_EXPORT/SYSTEM_GRANT Procesare a tipului de obiect SCHEMA_EXPORT/ROLE_GRANT Procesare a tipului de obiect SCHEMA_EXPORT/DEFAULT_ROLE Procesare a tipului de obiect SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/TABLE Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/INDEX/INDEX Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS . . "SCOTT"."DEPT" 5.656 KB 4 linii exportate . . "SCOTT"."EMP" 7.820 KB 14 linii exportate . . "SCOTT"."SALGRADE" . . "SCOTT"."BONUS" 5.585 KB 0 KB 5 linii exportate 0 linii exportate

Tabelul principal "SYSTEM"."SYS_EXPORT_SCHEMA_01" a fost ncrcat/descrcat cu succes ********************************************************************** Setul de fiiere de stocare pentru SYSTEM.SYS_EXPORT_SCHEMA_01 este: D:\ORACLE\PRODUCT\10.2.0\ADMIN\HAZI\DPDUMP\SCOTT.DMP Job-ul "SYSTEM"."SYS_EXPORT_SCHEMA_01" a fost finalizat cu succes la 09:19:50

n exemplul de mai sus se export toate obiectele din schema utilizatorului SCOTT n fiierul SCOTT.DMP amplasat n directoarea DATA_PUMP_DIR: D:\ORACLE\PRODUCT\10.2.0\ADMIN\HAZI\DPDUMP. EXPDP poate funciona n mai multe moduri: Utilitare ale bazei de date Oracle - 109 -

Baze de date Oracle Mod linie comand se specific n linia de comand parametrii de export, aa ca n exemplul de mai sus Utiliznd un fiier parametru care descrie opiunile de export. Singurul parametru n linia de comand este PARFILE=nume_fiier_parametru. A doua variant este recomandat. Pot fi fcute pachete de export n mai multe variante: FULL EXPORT cnd se export baza de date ntreag. n acest caz trebuie precizat parametrul FULL=Y, iar utilizatorul trebuie s aib privilegiul EXP_FULL_DATABASE
SQL> grant exp_full_database to hr; C:\>expdp hr/hr DIRECTORY=DATA_PUMP_DIR DUMPFILE=expfull.dmp FULL=y NOLOGFILE=y

SCHEMA se export obiectele deinute de un utilizator ca n exemplul de mai sus. Se precizeaz parametrul SCHEMAS=nume_utilizator.
C:\> expdp system/george DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdat.dmp SCHEMAS=hr,sh,oe

TABELE se export numai tabelele precizate. Se precizeaz parametrul TABLES=[nume_schema.]nume_tabela[:nume_partitie] [, ...].


C:\> expdp hr/hr DIRECTORY=DATA_PUMP_DIR DUMPFILE=tables.dmp TABLES=employees,jobs,departments

TABLE SPACE se export datele coninute ntr-un tablespace precizat sub forma TABLESPACES= nume_tablespace [, ...].
C:\> expdp hr/hr DIRECTORY=DATA_PUMP_DIR DUMPFILE=tbs.dmp TABLESPACES=tbs_4, tbs_5, tbs_6

n cazul exportului folosind fiier cu parametri, acesta este un fiier ASCII care conine opiunile de export. De exemplu s considerm fiierul HR.PAR cu coninutul:
SCHEMAS=HR DUMPFILE=exp.dmp DIRECTORY=DATA_PUMP_DIR LOGFILE=exp.log

Utiliznd acest fiier se lanseaz c-da:


C:\> expdp hr/hr parfile=hr.par

Alte opiuni ale comenzii de export sunt: Filtrarea datelor exportate se introduce clauza QUERY:
C:\> expdp hr/hr parfile=emp_query.par

Coninutul fiierului emp_quey.par:


QUERY=employees:'"WHERE department_id > 10 AND salary > 10000"' NOLOGFILE=y DIRECTORY=DATA_PUMP_DIR DUMPFILE=exp1.dmp

TRANSPORT_TABLESPACES permite transportul tablespace dintr-o baz de date n alta

C:\> expdp hr/hr DIRECTORY=DATA_PUMP_DIR DUMPFILE=tts.dmp TRANSPORT_TABLESPACES=tbs_1 TRANSPORT_FULL_CHECK=y LOGFILE=tts.log

Opiunea TRANSPORT_FULL_CHECK permite verificarea relaiilor dintre obiectele transportate. Utilitare ale bazei de date Oracle - 110 -

Baze de date Oracle VERSION permite precizarea versiunii pentru BD ORCALE pentru ca datele s poat fi importate n alt baz de date. De exemplu VERSION=9.2. CONTENT = {ALL| DATA_ONLY | METADATA_ONLY} permite specificarea exportului a numai o parte dintre informaiile stocate. METADATA se refer la obiecte, iar DATA la informaiile din tabele. ENCRYPTION_PASSWORD specific cheia pentru criptarea datelor. Criptarea se aplic numai pentru coloanele din tabele criptate. 13.2. Importul datelor n ORACLE Se realizeaz cu utilitarul IMPDP.EXE, specific versiunii ORACLE 10g, sau cu utilitarul IMP.EXE specific versiunilor anterioare. Vom prezenta i n acest caz un exemplu:
C:\Documents and Settings\george>impdp system/george DUMPFILE=SCOTT.DMP DIRECTORY=DATA_PUMP_DIR schemas=SCOTT

Import: Release 10.2.0.1.0 - Production on Miercuri, 26 Septembrie, 2007 11:37:15 Copyright (c) 2003, 2005, Oracle. All rights reserved.

Conectat la: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining options Tabelul principal "SYSTEM"."SYS_IMPORT_SCHEMA_01" a fost ncrcat/descrcat cu succes Pornire "SYSTEM"."SYS_IMPORT_SCHEMA_01": system/******** schemas=SCOTT DUMPFILE=SCOTT.DMP DIRECTORY=DATA_PUMP_DIR Procesare a tipului de obiect SCHEMA_EXPORT/USER Procesare a tipului de obiect SCHEMA_EXPORT/SYSTEM_GRANT Procesare a tipului de obiect SCHEMA_EXPORT/ROLE_GRANT Procesare a tipului de obiect SCHEMA_EXPORT/DEFAULT_ROLE Procesare a tipului de obiect SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/TABLE Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/TABLE_DATA . . "SCOTT"."DEPT" 5.656 KB 4 linii importate . . "SCOTT"."EMP" . . "SCOTT"."SALGRADE" . . "SCOTT"."BONUS" 7.820 KB 5.585 KB 0 KB 14 linii importate 5 linii importate 0 linii importate obiect obiect obiect

Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/INDEX/INDEX Procesare a tipului de SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT Procesare a tipului de SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Procesare a tipului de SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT

Utilitare ale bazei de date Oracle - 111 -

Baze de date Oracle


Procesare a tipului de obiect SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Job-ul "SYSTEM"."SYS_IMPORT_SCHEMA_01" a fost finalizat cu 0 erori la 11:37:26

IMPDP poate funciona, ca i EXPDP, n mai multe moduri: Mod linie comand se specific n linia de comand parametrii de export, aa ca n exemplul de mai sus Utiliznd un fiier parametru care descrie opiunile de export. Singurul parametru n linia de comand este PARFILE=nume_fiier_parametru. A doua variant este recomandat. Importul poate fi fcute n mai multe variante: FULL IMPORT cnd se import baza de date ntreag. n acest caz trebuie precizat parametrul FULL=Y, iar utilizatorul trebuie s aib privilegiul IMP_FULL_DATABASE
SQL> grant imp_full_database to hr; C:\> impdp hr/hr DUMPFILE=DATA_PUMP_DIR:expfull.dmp FULL=y LOGFILE=DATA_PUMP_DIR:full_imp.log

SCHEMA se export obiectele deinute de un utilizator ca n exemplul de mai sus. Se precizeaz parametrul SCHEMAS=nume_utilizator.
C:\> impdp hr/hr SCHEMAS=hr DIRECTORY=DATA_PUMP_DIR LOGFILE=schemas.log DUMPFILE=expdat.dmp TABELE se export numai tabelele precizate. Se precizeaz parametrul

TABLES=[nume_schema.]nume_tabela[:nume_partitie] [, ...]. TABLESPACE se export datele coninute ntr-un tablespace precizat sub forma TABLESPACES= nume_tablespace [, ...].
C:\> impdp hr/hr DIRECTORY=DATA_PUMP_DIR DUMPFILE=expfull.dmp TABLESPACES=tbs_1,tbs_2, tbs_3,tbs_4 C:\> impdp hr/hr DIRECTORY=DATA_PUMP_DIR DUMPFILE=expfull.dmp TABLES=employees,jobs

TRANSPORT_TABLESPACE permite copierea unor tablespace dintr-o baz de date surs ctre o baz de date destinaie specificat prin DATABASE_LINK.
C:\> impdp hr/hr PARFILE=tablespaces.par

unde fiierul tablespaces.par este de forma:


DIRECTORY=DATA_PUMP_DIR NETWORK_LINK=source_database_link TRANSPORT_TABLESPACES=tbs_6 TRANSPORT_FULL_CHECK=n TRANSPORT_DATAFILES='user01/data/tbs6.f'

Alte opiuni ale programului IMPDP.EXE sunt: CONTENT = {ALL| DATA_ONLY | METADATA_ONLY} permite specificarea importului a numai o parte dintre informaiile stocate. METADATA se refer la obiecte, iar DATA la informaiile din tabele. ENCRYPTION_PASSWORD specific cheia pentru criptarea datelor. QUERY permite filtrarea datelor importate

Utilitare ale bazei de date Oracle - 112 -

Baze de date Oracle VERSION permite precizarea versiunii pentru BD ORCALE pentru ca datele s poat fi importate n alt baz de date. De exemplu VERSION=9.2. 13.3. SQL LOADER Este un utilitar important care permite ncrcarea datelor n baze de date ORACLE din surse externe. Principalele funciuni ale utilitarului sunt: ncrcarea datelor prin reele complexe. Utilitarul poate fi lansat pe orice sistem din reea ncrcarea datelor din mai multe fiiere de date n aceeai sesiune ncrcarea datelor n mai multe tabele simultan Se poate preciza setul de caractere pentru setul de date Se pot filtra datele de intrare pe baza valorii acestora Datele pot fi manipulate dup ncrcare utiliznd SQL Se pot genera chei unice n tabelele generate ncrcarea datelor de disc, band magnetic sau alte variante Se genereaz rapoarte complexe pentru erorile ntlnite Se pot ncrca date de tip LOB Modul de lucru al SQL LOADER este prezentat n figura 13.1

Figura 13.1 Schema de lucru SQL LOADER

Programul utilizat este SQLLDR.EXE i poate fi lansat n mod linie comand sau utiliznd un fiier de descriere a ncrcrii de date. Se recomand utilizarea unui fiier de parametri. Exemple:
C:\> sqlldr userid=uwclass/uwclass log=c:\temp\demo02.log control=c:\temp\demo02.ctl

Unde fiierul de control este un fiier ASCII de forma: Utilitare ale bazei de date Oracle - 113 -

Baze de date Oracle


LOAD DATA INFILE 'c:\temp\demo02.dat' INTO TABLE emp (empno POSITION(01:04) ename POSITION(06:15) job POSITION(17:25) mgr POSITION(27:30) sal POSITION(32:39) comm POSITION(41:48) deptno POSITION(50:51)

INTEGER CHAR, CHAR, INTEGER DECIMAL DECIMAL INTEGER

EXTERNAL, EXTERNAL, EXTERNAL, EXTERNAL, EXTERNAL)

C:\> sqlldr userid=uwclass/uwclass log=c:\temp\demo04.log

control=c:\temp\demo04.ctl

Unde fiierul de control demo04.ctl este:


LOAD DATA INFILE 'c:\temp\demo04.dat' DISCARDFILE 'c:\temp\demo04.dsc' DISCARDMAX 999 REPLACE CONTINUEIF THIS (1) = '*' INTO TABLE emp ( empno POSITION(1:4) INTEGER ename POSITION(6:15) CHAR, job POSITION(17:25) CHAR, mgr POSITION(27:30) INTEGER sal POSITION(32:39) DECIMAL comm POSITION(41:48) DECIMAL deptno POSITION(50:51) INTEGER hiredate POSITION(52:60) INTEGER C:\> sqlldr log=c:\load\demo07.log userid=dev/dev

EXTERNAL, EXTERNAL, EXTERNAL, EXTERNAL, EXTERNAL, EXTERNAL) control=c:\load\demo07.ctl

Unde fiierul de control demo07.ctl este:


LOAD DATA INFILE * INSERT INTO TABLE funcdemo ( LAST_NAME position(1:7) FIRST_NAME position(8:15) ) BEGINDATA Locke Phil Cline Jack

CHAR CHAR

"UPPER(:LAST_NAME)", "LOWER(:FIRST_NAME)"

n acest ultim exemplu datele sunt scrise direct n fiierul de control.

Utilitare ale bazei de date Oracle - 114 -

Baze de date Oracle

14. MONITORIZAREA I OPTIMIZAREA FUNCIONRII BAZEI DE DATE


14.1. Monitorizarea funcionrii bazei de date Optimizarea funcionrii bazei de date este un proces iterativ. n urma inspecii a bazei de date se obin informaii despre starea bazei la un moment dat. Remedierea unor strangulri n funcionarea bazei de date poate afecta alte procese, acest lucru justificnd modul iterativ de optimizare. Obinerea de informaii despre baza de date se poate face prin vederi ale bazei de date prezentate n capitolul 6 sau utiliznd ORCALE EM. Evident, utilizarea OEM este mult mai facil, ea fcnd automat interogrile i prezentnd rezultatele ntr-un format convenabil. OEM dispune de monitorizarea proactiv care nregistreaz semnele vitale n legtur cu funcionarea bazei de date, analizeaz procesele active i identific automat problemele care necesit atenia unui administrator. Problemele detectate sunt prezentate ca mesaje de alertare n OEM sau pot fi trimise prin e-mail. Alerte Ne ajut s monitorizm baza de date. Cele mai multe dintre ele indic depire unor limite care pot conduce la blocarea sau funcionarea necorespunztoare a bazei de date. Pentru fiecare alert se pot seta valori critice i de atenie. De exemplu, cnd un tablespace depete 97% grad de ocupare Oracle va genera un mesaj de alert critic. n plus, se poate seta ca n cazul unui mesaj de atenionare s se execute un script. Implicit, ORACLE genereaz urmtoarele mesaje de atenionare i critice: Grad de umplere a unui tablespace: 85 % atenionare, 97% critic Snapshot Too Old segementul de rollback este suprascris, necesitnd spaiu mai mare. Dac se lucreaz n modul Automatic Undo Management, se majoreaz parametrul UNDO_RETENTION Spaiul pentru recuperare este prea mic (dac se utilizeaz Flashback) Spaiul necesar pentru sesiuni suspendate, prea mic. Diagnoza bazei de date Orcale cuprinde un modul de diagnosticare numit Automatic Database Diagnostic Monitor (ADDM). Acesta permite identificarea problemelor i sugereaz soluii de rezolvare. Pentru a avea informaii, Orcale colecteaz periodic informaii despre starea bazei de date i a modului n care funcioneaz. Intervalul standard este de o or. Informaiile sunt stocare n Automatic Workload Repository (AWR) rezident n tablespace SYSAUX. n general informaiile culese i stocate includ: Gradul de utilizare a resurselor, cum ar fi memoria i procesorul sistemului pe care este instalat baza de date. Conexiuni lente la baza de date. Blocaje n mediul multiuser, cnd blocajul unor nregistrri pentru modificare implic timpi mari de ateptare pentru ali utiliazatori. OEM ofer implicit informaii despre starea bazei de date, informaii actualizate Monitorizarea i optimizarea funcionrii bazei de date - 115 -

Baze de date Oracle periodic. n figura 14.1 se prezint o imagine OEM.

Figura 14.1 Imagine OEM

Pagina general ofer informaii sumare despre baza de date cum ar fi momentul ultimei porniri, numele instanei i gazda bazei de date. Seciunea aferent CPU prezint gradul de ocupare a procesorului. Se precizeaz ct din puterea procesorului este utilizat de Oracle i ct de alte procese din sistem. Se poate vedea i sesiunile care sunt active n baza de date. Pe lng ADDM, Oracle dispune i de ali sftuitori, cum ar fi: SQL Tuning Advisor analizeaz instruciunile SQL i face recomandri pentru creterea vitezei de execuie SQL Access Advisor Analizeaz obiectele din schem i face propuneri de mbuntire a schemei (de exemplu utilizarea indecilor, a vederilor materializate, etc) Sftuitori pentru configurare memorie Shared Pool Advisor, Buffer Cache Advisor, PGA Advisor. Monitorizarea i optimizarea funcionrii bazei de date - 116 -

Baze de date Oracle 14.2. Managementul automat al stocrii Oracle 10g dispune de o unealt puternic: Automatic Storage Management. Acesta nlocuiete foarte bine activitatea de administrare a spaiului de stocare. Principalele faciliti oferite de ASM sunt: Utilizeaz eficient spaiul de stocare prin mprtierea datelor pe toate discurile astfel nct acestea s lucreze, pe ct posibil, simultan. De exemplu, dac baza de date are alocat 6 discuri, componente din fiierul gestionat de ASM vor fi scrise pe toate cele 6 discuri. Similar se ntmpl i n cazul citirii datelor. Poate genera copii n oglind la orice fiier de date. Fa de sistemele de operare care pot genera copii n oglind pentru discuri ntregi, ASM poate face acest lucru la nivel de fiier. Copiile oglind sunt stocate pe discuri diferite pentru ca n cazul unui incident major datele s poat fi recuperate. Pot fi create 2 sau 3 copii. Reconfigurarea on line a spaiului de stocare, n situaia adugrii unui disc, fr a opri funcionarea bazei de date. Facilitatea este oferit i n cazul scoaterii unui disc. Managementul automat al crerii i tergerii fiierelor de date. Oracle permite ca unele fiiere s fie monitorizate de ASM, iar altele nu. Pentru funcionare, ASM are o component rezident n SGA. n modul RAC, ASM are o instan n fiecare nod. Administrarea ASM este minim, utilizatorii trebuie s precizeze discurile i grupurile de discuri (figura 14.2).

Figura 14.2 Configurare ASM cu OEM

Monitorizarea i optimizarea funcionrii bazei de date - 117 -

Baze de date Oracle 14.3. Managementul automat al memoriei Oracle 10g a introdus o unealt componentelor de memorie necesare componentele de memorie ale bazei variabilele DB_CACHE_SIZE,
JAVA_POOL_SIZE.

pentru ajustarea automat a dimensiunilor funcionrii bazei de date. n variantele vechi, de date (figura 14.3), erau setate manual prin
SHARED_POOL_SIZE, LARGE_POOL_SIZE,

Figura 14.3 Componentele memoriei

n Oracle 10g se utilizeaz un singur parametru important (SGA_TARGET). Se asigur urmtoarele activiti automat: - ajustarea automat a dimensiunii SGA - memoria este alocat acolo unde este necesar - se colecteaz informaii despre procesele n execuie - se utilizeaz sftuitori interni. Componentele setate automat sunt: o Default buffer cache o Shared pool o Large pool o Java pool Componentele care pot fi setate manual: o Log buffer o Alte zone cache (KEEP/RECYCLE) o Streams pool (pentru stocarea fluxurilor de date modificate n una sau mai multe baze de date Oracle sau non Oracle) 14.4. Salvarea i restaurarea bazei de date Se realizeaz cu utilitarul RAMN (Recovery Manager). Acesta este un program care funcioneaz command line ns, pe lng comenzile specifice, suport i SQL. RMAN gestioneaz informaii n legtur cu salvrile realizate, cu setrile existente ntr-un repository i un catalog. Monitorizarea i optimizarea funcionrii bazei de date - 118 -

Baze de date Oracle Pentru setarea backup se poate utiliza i OEM (figura 14.4, 14.5).

Figura 14.4 Configurare backup cu OEM

Figura 14.5 Configurare backup(user) cu OEM

Lansarea RMAN se face aa cum este prezentat mai jos:


Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\ghhazi>rman

Monitorizarea i optimizarea funcionrii bazei de date - 119 -

Baze de date Oracle


Recovery Manager: Release 10.2.0.1.0 - Production on Mon Oct 1 08:59:35 2007 Copyright (c) 1982, 2005, Oracle. RMAN> connect target sys/george@ub connected to target database: UB (DBID=2891805612) All rights reserved.

Lansarea unui backup total se face cu c-da:


RMAN> BACKUP DATABASE; Starting backup at 01-OCT-07 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=141 devtype=DISK channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSTEM01.DBF input datafile fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSAUX01.DBF input datafile fno=00005 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\EXAMPLE01.DBF input datafile fno=00002 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\UNDOTBS01.DBF input datafile fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\USERS01.DBF channel ORA_DISK_1: starting piece 1 at 01-OCT-07 channel ORA_DISK_1: finished piece 1 at 01-OCT-07 piece handle=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\2007_10_0 1\O1_MF_NNNDF_TAG20071001T102348_3J1845L2_.BKP tag=TAG20071001T102348 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55 channel ORA_DISK_1: starting full datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset including current control file in backupset including current SPFILE in backupset channel ORA_DISK_1: starting piece 1 at 01-OCT-07 channel ORA_DISK_1: finished piece 1 at 01-OCT-07 piece handle=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\2007_10_0 1\O1_MF_NCSNF_TAG20071001T102348_3J185XTV_.BKP tag=TAG20071001T102348 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02 Finished backup at 01-OCT-07 RMAN>

Backup incremental salveaz numai blocurile de date modificate sau adugate de la ultima salvare. Poate fi de nivel 0 sau 1. La nivel zero se salveaz toate blocurile dintr-un fiier modificat. La nivel 1 se salveaz numai blocurile modificate. Dac se adaug opiunea CUMULATIVE, se salveaz datele de la ultimul backup level 0. Cu opiunea DIFFERENTIAL se salveaz numai modificrile de la ultima salvare. Lansarea unui backup incremental se face cu c-da:
RMAN> BACKUP INCREMENTAL LEVEL 1 CUMULATIVE DATABASE;

Monitorizarea i optimizarea funcionrii bazei de date - 120 -

Baze de date Oracle


Starting backup at 01-OCT-07 using channel ORA_DISK_1 channel ORA_DISK_1: starting incremental level 1 datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset input datafile fno=00001 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSTEM01.DBF input datafile fno=00003 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSAUX01.DBF input datafile fno=00005 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\EXAMPLE01.DBF input datafile fno=00002 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\UNDOTBS01.DBF input datafile fno=00004 name=D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\USERS01.DBF channel ORA_DISK_1: starting piece 1 at 01-OCT-07 channel ORA_DISK_1: finished piece 1 at 01-OCT-07 piece handle=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\2007_ 10_01\O1_MF_NNND1_TAG20071001T105713_3J1B2TNZ_.BKP tag =TAG20071001T105713 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55 channel ORA_DISK_1: starting incremental level 1 datafile backupset channel ORA_DISK_1: specifying datafile(s) in backupset including current control file in backupset including current SPFILE in backupset channel ORA_DISK_1: starting piece 1 at 01-OCT-07 channel ORA_DISK_1: finished piece 1 at 01-OCT-07 piece handle=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\2007_ 10_01\O1_MF_NCSN1_TAG20071001T105713_3J1B4MCQ_.BKP tag= TAG20071001T105713 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03 Finished backup at 01-OCT-07 RMAN>

Recuperarea datelor se face cu comenzile RESTORE DATABASE i RECOVER DATABASE, ca n exemplul de mai jos. Baza de date trebuie s fie numai montat.
RMAN> startup force mount; Oracle instance started database mounted Total System Global Area Fixed Size Variable Size Database Buffers Redo Buffers RMAN> RESTORE DATABASE; 209715200 bytes 1248140 71304308 134217728 2945024 bytes bytes bytes bytes

Monitorizarea i optimizarea funcionrii bazei de date - 121 -

Baze de date Oracle


Starting restore at 01-OCT-07 allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=156 devtype=DISK channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: specifying datafile(s) to restore from backup set restoring datafile 00001 to D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSTEM01.DBF restoring datafile 00002 to D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\UNDOTBS01.DBF restoring datafile 00003 to D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSAUX01.DBF restoring datafile 00004 to D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\USERS01.DBF restoring datafile 00005 to D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\EXAMPLE01.DBF channel ORA_DISK_1: reading from backup piece D:\ORACLE\PRODUCT\10.2.0\FLASH_REC OVERY_AREA\UB\BACKUPSET\2007_10_01\O1_MF_NNND1_TAG20071001T105713_3J1B 2TNZ_.BKP channel ORA_DISK_1: restored backup piece 1 piece handle=D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\2007_ 10_0 1\O1_MF_NNND1_TAG20071001T105713_3J1B2TNZ_.BKP tag=TAG20071001T105713 channel ORA_DISK_1: restore complete, elapsed time: 00:00:45 Finished restore at 01-OCT-07 RMAN> RECOVER DATABASE; Starting recover at 01-OCT-07 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:05 Finished recover at 01-OCT-07 RMAN> ALTER DATABASE OPEN; database opened RMAN>

Informaii despre pachetele de sarvare se pot obine cu comenzile RMAN LIST BACKUP OF DATABASE BY BACKUP, LIST BACKUP BY FILE.
RMAN> LIST BACKUP BY FILE; List of Datafile Backups ======================== File Key TY LV S Ckp SCN Ckp Time #Pieces #Copies Compressed Tag ---- ------- - -- - ---------- --------- ------- ------- ---------- --1 7 B 1 A 572195 01-OCT-07 1 1

NO

Monitorizarea i optimizarea funcionrii bazei de date - 122 -

Baze de date Oracle


TAG20071001 T105713 4 TAG20071001 T103918 1 TAG20071001 T102348 2 7 TAG20071001 T105713 4 TAG20071001 T103918 1 TAG20071001 T102348 3 7 TAG20071001 T105713 4 TAG20071001 T103918 1 TAG20071001 T102348 4 7 TAG20071001 T105713 4 TAG20071001 T103918 1 TAG20071001 T102348 5 7 TAG20071001 T105713 4 TAG20071001 T103918 1 TAG20071001 T102348 B F A 571483 01-OCT-07 1 1 NO

A 571055

01-OCT-07 1

NO

A 572195

01-OCT-07 1

NO

A 571483

01-OCT-07 1

NO

A 571055

01-OCT-07 1

NO

A 572195

01-OCT-07 1

NO

A 571483

01-OCT-07 1

NO

A 571055

01-OCT-07 1

NO

A 572195

01-OCT-07 1

NO

A 571483

01-OCT-07 1

NO

A 571055

01-OCT-07 1

NO

A 572195

01-OCT-07 1

NO

A 571483

01-OCT-07 1

NO

A 571055

01-OCT-07 1

NO

List of Archived Log Backups ============================ Thrd Seq Low SCN Low Time BS Key S #Pieces #Copies Compressed Tag ---- ------- ---------- --------- ------- - ------- ------- ---------- --1 2 565146 01-OCT-07 3 A 1 1 TAG200710 01T103914 1 3 571478 01-OCT-07 6 A 1 1 TAG200710 01T104017 List of Control File Backups ============================ CF Ckp SCN Ckp Time BS Key S #Pieces #Copies Compressed Tag

NO

NO

Monitorizarea i optimizarea funcionrii bazei de date - 123 -

Baze de date Oracle


---------- --------- ------572218 01-OCT-07 8 571506 01-OCT-07 5 571078 01-OCT-07 2 List of SPFILE Backups ====================== Modification Time ----------------01-OCT-07 01-OCT-07 01-OCT-07 BS Key ------8 5 2 S A A A A A A ------1 1 1 ------1 1 1 ---------NO NO NO --TAG20071001T105713 TAG20071001T103918 TAG20071001T102348

#Pieces ------1 1 1

#Copies ------1 1 1

Compressed ---------NO NO NO

Tag --TAG20071001T105713 TAG20071001T103918 TAG20071001T102348

RMAN> LIST BACKUP OF DATABASE BY BACKUP;

List of Backup Sets =================== BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------1 Full 579.48M DISK 00:00:52 01-OCT-07 BP Key: 1 Status: AVAILABLE Compressed: NO Tag: TAG20071001T102348 Piece Name: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\20 07_10_01\O1_MF_NNNDF_TAG20071001T102348_3J1845L2_.BKP List of Datafiles in backup set 1 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- --------- ---1 Full 571055 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSTEM01 .DBF 2 Full 571055 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\UNDOTBS0 1.DBF 3 Full 571055 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSAUX01 .DBF 4 Full 571055 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\USERS01. DBF 5 Full 571055 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\EXAMPLE0 1.DBF BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------4 Full 579.50M DISK 00:00:52 01-OCT-07 BP Key: 4 Status: AVAILABLE Compressed: NO Tag: TAG20071001T103918 Piece Name: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\20 07_10_01\O1_MF_NNNDF_TAG20071001T103918_3J1917J3_.BKP List of Datafiles in backup set 4 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- --------- ---1 Full 571483 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSTEM01 .DBF 2 Full 571483 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\UNDOTBS0 1.DBF

Monitorizarea i optimizarea funcionrii bazei de date - 124 -

Baze de date Oracle


3 Full 571483 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSAUX01 .DBF 4 Full 571483 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\USERS01. DBF 5 Full 571483 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\EXAMPLE0 1.DBF 01-OCT-07

01-OCT-07

01-OCT-07

BS Key Type LV Size Device Type Elapsed Time Completion Time ------- ---- -- ---------- ----------- ------------ --------------7 Incr 1 513.62M DISK 00:00:49 01-OCT-07 BP Key: 7 Status: AVAILABLE Compressed: NO Tag: TAG20071001T105713 Piece Name: D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\UB\BACKUPSET\20 07_10_01\O1_MF_NNND1_TAG20071001T105713_3J1B2TNZ_.BKP List of Datafiles in backup set 7 File LV Type Ckp SCN Ckp Time Name ---- -- ---- ---------- --------- ---1 1 Incr 572195 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSTEM01 .DBF 2 1 Incr 572195 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\UNDOTBS0 1.DBF 3 1 Incr 572195 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\SYSAUX01 .DBF 4 1 Incr 572195 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\USERS01. DBF 5 1 Incr 572195 01-OCT-07 D:\ORACLE\PRODUCT\10.2.0\ORADATA\UB\EXAMPLE0 1.DBF RMAN>

Monitorizarea i optimizarea funcionrii bazei de date - 125 -

Baze de date Oracle BIBLIOGRAFIE 1. Michele Cyran, Paul Lane, JP Polk, Oracle Database Concepts10g Release 2 (10.2), October 2005 2. Steve Fogel, Paul Lane, Oracle Database Administrator's Guide10g Release 2 (10.2), May 2006 3. Colin McGregor, Michele Cyran, Daniela Hansell, Vasudha Krishnaswamy, Peter Laquerre, Venkat Maddali, Mughees Minhas, JP Polk, Mark Townsend, and Wanli Yang, Oracle Database 2 Day DBA 10g Release 2 (10.2), December 2005 4. Sumit Jeloka, Oracle Database Advanced Security Administrators Guide10g Release 2 (10.2), November 2005 5. Immanuel Chan, Oracle Database 2 Day + Performance Tuning Guide10g Release 2 (10.2), November 2006 6. Oracle, Oracle Database Backup and Recovery Quick Start Guide10g Release 2 (10.2), November 2005 7. Antonio Romero, Oracle Database Backup and Recovery Reference10g Release 2 (10.2), November 2005 8. Diana Lorentz, Oracle Database SQL Reference10g Release 2 (10.2), December 2005 9. Simon Watt, SQL Plus Users Guide and Reference10g Release 2 (10.2), June 2005 10. Shashaanka Agrawal, Cailein Barclay, Eric Belden, Dmitri Bronniko, Oracle Database PL/SQL User's Guide and Reference10g Release 2 (10.2), June 2005 11. Kathy Rich, Oracle Database Reference10g Release 2 (10.2), November 2005

Bibliografie - 126 -

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