Documente Academic
Documente Profesional
Documente Cultură
Gheorghe Hazi
Bacu - 2007
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-
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.
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
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
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 -
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
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.
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):
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)
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 -
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
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 -
Dup lansare se afieaz pagina din figura 3.3 din care se pot activa opiunile dorite.
Parametrii de baz sunt dai n tabelul 4.1. Mangementul unei instane Oracle - 26 -
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
19.
Nu
20.
Nu
21.
SGA_TARGET
Da
22.
SHARED_SERVERS
Da
23.
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
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.
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).
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.
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):
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).
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.
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"
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 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
ACCOUNT_STATU VARCHAR2(32) S
OPEN EXPIRED EXPIRED(GRACE) LOCKED(TIMED) LOCKED EXPIRED & LOCKED(TIMED) EXPIRED(GRACE) & LOCKED(TIMED) EXPIRED & 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)
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:
CONTENTS
VARCHAR2(9)
LOGGING
VARCHAR2(9)
FORCE_LOGGING
VARCHAR2(3)
EXTENT_MANAGEME VARCHAR2(10) NT
ALLOCATION_TYPE
VARCHAR2(9)
RETENTION
VARCHAR2(11)
Specific reinerea segmentelor undo: GUARANTEE NOGUARANTEE NOT APPLY Fiier de mari dimensiuni sau nu (YES/NO)
BIGFILE
VARCHAR2(3)
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
Descriere Proprietarul database link Numele database link Numele utilizatorului din baza de date strin irul de conectare Oracle
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
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
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)
Exemplu:
SQL>select * from v$NLS_Parameters
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
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.
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 -
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).
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
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
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;
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;
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 -
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;
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.
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.
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.
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.
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.
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
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.
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.
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.
Tabel creat.
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
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.
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
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.
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.
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
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 -
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
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
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
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.
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 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
SQL n Oracle - 88 -
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 -
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 -
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
SQL> 2 3 4 5*
SQL n Oracle - 91 -
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 -
......................................................... 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 -
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 -
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
Ridicare la putere Indentitate, negare Multiplicare, mprire Adunare, scdere, concatenare Teste logice
7 8 9
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 -
12.2.1. Structuri de control Sunt cele cunoscute (figura 12.2) : - structura alternativ sau de selecie - structura repetitiv - structura secvenial
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; /
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');
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;
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
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
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; /
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 /
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
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
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
Alte opiuni ale comenzii de export sunt: Filtrarea datelor exportate se introduce clauza QUERY:
C:\> expdp hr/hr parfile=emp_query.par
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
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
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
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
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 -
control=c:\temp\demo04.ctl
CHAR CHAR
"UPPER(:LAST_NAME)", "LOWER(:FIRST_NAME)"
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).
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,
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).
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;
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
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
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
#Pieces ------1 1 1
#Copies ------1 1 1
Compressed ---------NO NO NO
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
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>
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 -