Sunteți pe pagina 1din 33

CAPITOLUL 4.

CREAREA UNEI BAZE DE DATE PRIN COMENZI SQL


4.1. TIPURI DE UTILIZATORI AI BAZELOR DE DATE ORACLE n funcie de volumul activitilor implicate de administrarea unei baze de date Oracle, sarcinile de administrare pot fi repartizate pe mai multe categorii de utilizatori ai bazei de date. Administratorul bazei de date (DBA) este, n funcie de complexitatea i mrimea unei baze de date, o persoan sau mai multe persoane, care s execute urmtoarele sarcini administrative: Instalarea i dezvoltarea sever-ului Oracle; Alocarea memoriei sistemului i planificarea cerinelor viitoare de memorie ale acestuia; Crearea bazei de date i a obiectelor acesteia (tabele, viziuni, indeci); Modificarea structurii bazei de date n funcie de cerinele dezvoltatorilor de aplicaii; Definirea utilizatorilor bazei de date i ntreinerea sistemului de securitate; Controlul i monitorizarea accesului utilizatorilor la baza de date; Monitorizarea i optimizarea performanelor bazei de date; Definirea i asigurarea politicii de salvarea sau copiere (backup) i refacere (recovery) a bazei de date; Arhivarea datelor; Asigurarea legturii cu firma Oracle pentru suportul tehnic i licena de utilizare a produselor Oracle. Dezvoltatorii de aplicaii proiecteaz i implementeaz aplicaii cu baze de date Oracle, executnd urmtoarele sarcini: Proiectarea i dezvoltarea unei aplicaii, precum i a structurilor de date ale acesteia; Estimarea cerinelor de memorie pentru aplicaie; Definirea modificrilor structurilor de date ale unei aplicaii; Transmiterea tuturor informaiilor despre activitile de mai sus ctre administratorul bazei de date; Stabilirea msurilor de securitate pentru aplicaie. Administratorul de aplicaii se ocup cu administrarea unei aplicaii;

Utilizatorii finali ai bazei de date au acces la baza de date prin intermediul unei aplicaii sau a instrumentelor Oracle, executnd n special urmtoarele activiti: Adugarea, modificarea i tergerea datelor din baza de date n concordan cu drepturile de acces pe care le are; Generarea unor rapoarte cu datele din baza de date. Administratorul de reea este responsabil cu administrarea produselor Oracle de reea. Pentru a putea executa sarcinile de administrare a unei baze de date o persoan trebuie s aib privilegii (drepturi) att la nivelul bazei de date Oracle, ct i la nivelul sistemului de operare al serverului pe care se afl baza de date. Prin urmare un administrator trebuie s aib: Cont de administrator pentru sistemul de operare, care s-i permit s execute comenzile sistemului de operare; Cont de administrator Oracle definit de dou conturi de utilizator (SYS i SYSTEM cu parolele CHANGE_OF_INSTALL i respectiv MANAGER); Rol de DBA, care este creat automat la momentul crerii unei baze de date Oracle. Acest rol conine toate privilegiile bazei de date Oracle. Datorit faptului c un administrator execut activiti pe care un utilizator obinuit nu le poate executa este necesar ca acesta s poat fi autentificat nainte de a executa activitile de administrare. Pentru autentificarea administratorului exist dou metode: autentificarea folosind sistemul de operare i autentificarea folosind fiierul de parole. Autentificarea folosind sistemul de operare se face utiliznd dou conturi de administrator: OSOPER (sub care poate executa STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVELOG i RECOVER) i contul OSDBA (care conine toate privilegiile de sistem cu opiunea ADMIN OPTION, precum i rolul OSOPER). Sub contul OSDBA se poate executa comanda CREATE DATABASE. Autentificarea folosind fiierul de parole permite definirea parolelor de acces pentru fiecare utilizator. Dup stabilirea unui utilizator ca administrator, de exemplu utilizatorul SCOTT cu parola TIGER, acestuia i va fi atribuit unul din privilegiile SYSDBA sau SYSOPER, cu comanda GRANT. Dup aceasta utilizatorul SCOTT se va conecta la baza de date ca SYSDBA sau SYSOPER cu comanda CONNECT. Exemplu: GRANT SYSDBA TO scott

GRANT SYSOPER TO scott CONNECT scott/tiger AS SYSDBA CONNECT scott/tiger AS SYSOPER Administrarea fiierului cu parole include operaiile de definire a fiierului cu parole, setarea parametrului de iniializare a bazei de date REMOTE_LOGIN_PASSWORDFILE, adugarea de utilizatori n acest fiier i ntreinerea fiierului cu parole. Crearea fiierului cu parole se execut cu utilitarul ORAPWD, care are trei parametrii: FILE, PASSWORD i ENTRIES, dintre care primii doi sunt obligatorii, iar ultimul este opional. Aceti parametrii definesc numele fiierului cu parole, parola pentru utilizatorul SYS i respectiv numrul de utilizatori care pot executa activiti de administrator (DBA). Setarea parametrului de iniializare REMOTE_LOGIN_PASSWORDFILE cu una din valorile NONE, EXCLUSIVE i SHARED permite utilizarea fiierului cu parole.Valoarea NONE determin ca baza de date Oracle s funcioneze fr fiier de parole, valoarea EXCLUSIVE determin ca fiierul de parole s fie folosit exclusiv de ctre o singur baz de date, iar valoare SHARED determin ca fiierul de parole s fie folosit de ctre mai multe baze de date. Pentru a avea un grad mare de securitate pentru baza de date, va trebui ca imediat dup crearea fiierului cu parole parametrul de iniializare REMOTE_LOGIN_PASSWORDFILE s fie setat pe valoarea EXCLUSIVE. Adugarea de utilizatori n fiierul cu parole se face la momentul atribuirii privilegiilor SYSDBA sau SYSOPER unui anumit utilizator. Exemplu: 1. Se creeaz fiierul cu parole conform indicaiilor de mai sus; 2. Se seteaz parametrul de iniializare REMOTE_LOGIN_PASSWORDFILE cu valoarea EXCLUSIVE; 3. Se conecteaz utilizatorul SYS, cu parola CHANGE_OF_INSTALL ca SYSDBA folosind comanda CONNECT SYS/change_of_install AS SYSDBA 4. Se pornete o instan i se creeaz o baz de date, dac este necesar, sau se monteaz i se deschide o baz de date existent; 5. Se creeaz utilizatorii care se doresc a fi administratori i care s fie adugai n fiierul cu parole, folosind comanda CREATE USER user1 IDENTIFIED BY parola1 6. Se atribuie unul din privilegiile SYSDBA sau SYSOPER acestui utilizator cu una din comenzile: GRANT SYSDBA TO user1 sau GRANT SYSOPER TO user1

7. Utilizatorul USER1 este adugat n fiierul cu parole i se poate conecta acum ca SYSDBA sau SYSOPER cu acest nume de utilizator n loc de numele SYS, folosind una din comenzile: CONNECT USER1/parola1 AS SYSDBA sau CONNECT USER1/parola1 AS SYSOPER Listarea membrilor fiierului cu parole se face din viziunea $PWFILE_USERS folosind comanda SELECT * FROM V$PWFILE_USERS ntreinerea fiierului cu parole se refer la executarea activitilor de extindere, relocare, tergere sau schimbare a strii acestui fiier. 4.2. CREAREA, PORNIREA I OPRIREA UNEI BAZE DE DATE ORACLE Configurarea serverului Oracle presupune urmtoarele activiti: Instalarea sistemului Oracle, care const n instalarea nucleului Oracle pe server, a instrumentelor (tools-urilor) de aplicaie pe staii; Evaluarea resurselor fizice ale calculatorului pe care se va instala serverul Oracle i baza de date; Definirea structurii logice a bazei de date i a strategiei de salvare (backup); Crearea i deschiderea bazei de date; Implementarea bazei de date proiectate, prin definirea segmentelor de revenire (rollback), a tabelelor spaiu i a obiectelor bazei de date; Salvarea bazei de date i definirea utilizatorilor bazei de date, n concordan cu licena Oracle. Pentru a crea o baz de date Oracle trebuie s avem suficient memorie pentru pornirea unei instane Oracle i pentru crearea tuturor obiectelor proiectate ale bazei de date. Dac la momentul instalrii s-a creat i o baz de date iniial atunci aceasta poate fi dezvoltat astfel nct s cuprind, n final, toate obiectele bazei de date proiectate. De asemenea aceast baz de date iniial poate fi tears i n locul ei s se creeze o nou baz de date. Dac am folosit o versiune anterioar Oracle se poate crea o baz de date nou n ntregime, dac nu ne mai intereseaz vechea baz de date, altfel putem migra aceast baz de date la noua versiune Oracle. Crearea unei baze de date se face n urmtorii pai: Salvarea complet a bazei de date existente; Crearea fiierului cu parametrii folosit la pornirea bazei de date. Editarea noului fiier cu parametrii, astfel nct parametrii acestuia s corespund cerinelor noii baze de date.

Controlul identificatorului instanei Oracle, care trebuie s fie identic cu numele bazei de date setat n parametrul DB_NAME; Pornirea utilitarul Entreprice Manager i conectarea la Oracle ca administrator. Pornirea unei instane Oracle (System Global Area i procesele background) cu opiunea Startup Nomount. Crearea noii bazei de date folosind comanda SQL CREATE DATABASE, prin intermediul creia Oracle execut: crearea fiierelor de date (data files), fiierelor de control (control files) i a fiierelor de refacere (redo log) ale bazei de date; crearea tabelei spaiu SYSTEM i a segmentului rollback SYSTEM; crearea dicionarului de date; crearea utilizatorilor SYS i SYSTEM; specific setul de caractere care va fi folosit la memorarea datelor n baza de date; monteaz i deschide baza de date pentru utilizare. Salvarea integral a bazei de date. Parametrii de iniializare a bazei de date furnizeaz valorile necesare pentru funcionarea acesteia sub o anumit instan Oracle. Acetia se personalizeaz prin intermediul unui fiier text, numit fiierul cu parametrii de iniializare. Acesta este citit la momentul pornirii bazei de date de ctre serverul Oracle. Pentru a face eventuale modificri, baza de date trebuie oprit complet i repornit dup ce s-au efectuat astfel de modificri. Muli parametrii de iniializare se folosesc pentru ajustarea i creterea performanelor bazei de date. Specificarea parametrilor se realizeaz dup urmtoarele reguli: Toi parametrii sunt opionali; n fiierul cu parametrii se vor fi introduce numai parametrii i comentarii; Semnul (#) marcheaz nceputul unui comentariu, restul liniei fiind ignorat; Serverul Oracle are valori asumate pentru fiecare parametru; Parametrii pot fi specificai n orice ordine; Fiierul de parametrii nu este case-sensitive ; Pentru a introduce mai muli parametrii pe o linie acetia se vor separa prin spaiu: PROCESSES = 100 SAVEPOINTS = 5 OPEN_CURSORS = 10 Unii parametrii, ca de exemplu ROLLBACK_SEGMENTS, accept valori multiple, acestea putndu-se specifica ntre paranteze i separate prin virgul, sau fr paranteze i virgule, ambele sintaxe fiind valide, astfel:
ROLLBACK_SEGMENTS = (SEG1, SEG2, SEG3, SEG4, SEG5)

Caracterul (/) folosete pentru marcarea ntreruperii scrierii unui parametru pe o linie i continuarea lui pe linia urmtoare, imediat fr nici un spaiu n fa, astfel: ROLLBACK_SEGMENTS = (SEG1, SEG2, \ SEG3, SEG4, SEG5) Parametrul IFILE se poate introduce ntr-un fiier cu parametrii alt fiier cu parametrii, astfel: IFILE = COMMON1.ORA Se pot folosi trei niveluri de imbricare. n exemplu de mai sus fiierul COMMON1.ORA poate conine un al doilea parametru IFILE pentru fiierul COMMON2.ORA, care la rndul su poate conine un al treilea parametru IFILE pentru fiierul COMMON3.ORA. De asemenea, se pot utiliza mai muli parametrii IFILE n acelai fiier, astfel: IFILE = DBPARMS.ORA IFILE = GCPARMS.ORA IFILE = LOGPARMS.ORA Dac valoarea unui parametru conine caractere speciale, atunci caracterul special trebuie precedat de caracterul de comutare (\) sau ntreaga valoare este inclus ntre caracterele ( ), ca n exemplul de mai jos: DB_DOMAIN = JAPAN.ACME\#.COM sau DB_DOMAIN = "JAPAN.ACME#.COM" Pentru schimbarea valorii unui parametru, aceasta se editeaz n fiierul cu parametrii. Cnd instana Oracle este repornit aceasta va folosi noua valoare a parametrului. Civa parametrii de iniializare sunt dinamici, n sensul c valorile acestora se pot modifica prin procedeul de mai sus sau n timp ce o instan ruleaz, folosind comenzile SQL: ALTER SESSION, ALTER SYSTEM sau ALTER SYSTEM DEFERRED cu sintaxele: ALTER SESSION SET nume_parametru = valoare ALTER SYSTEM SET nume_parametru = valoare ALTER SYSTEM SET nume_parametru = valoare DEFERRED Comanda ALTER SESSION schimb valoarea unui parametru numai la nivelul sesiunii care a lansat-o, dup repornirea bazei de date se va utiliza iari valoarea din fiierul cu parametrii. Comanda ALTER SYSTEM modific valoarea global a parametrului, la nivelul ntregului sistem, deci pentru toate sesiunile active, dup repornirea bazei de date se va utiliza iari valoarea din fiierul cu parametrii.

ROLLBACK_SEGMENTS = SEG1 SEG2 SEG3 SEG4 SEG5

Comanda ALTER SYSTEM DEFERRED modific valoarea global a parametrului nu pentru sesiunile active, ci pentru sesiunile viitoare, care vor fi active dup repornirea bazei de date. Afiarea valorilor curente ale parametrilor de iniializare ai bazei de date se face cu comanda SHOW PARAMETERS, afiarea fcndu-se n ordinea alfabetic a parametrilor. Listarea la imprimant a parametrilor afiai se face cu comanda SPOOL. Parametrii de iniializare se pot grupa n: Parametrii derivai sunt cei ale cror valori se calculeaz pornind de la valorile altor parametrii. Normal valorile acestora nu trebuie modificate; Parametrii globali prefixai cu GC sunt folosii pe sistemele care suport Oracle Parallel Server; Parametrii dependeni de sistemul de operare sunt cei ale cror valori sunt dependente de specificul sistemului de operare gazd. Exemplu: DB_BLOCK_BUFFERS care indic numrul ariilor de date (data buffers) din memoria principal sau DB_BLOCK_SIZE care indic mrimea unui bloc de date; Parametrii de tip variabil sunt cei ce pot lua anumite valori care s determine performanele sistemului sau anumite limite de funcionare. Exemplu: OPEN_CURSORS dac i se d valoarea 10 se vor putea deschide maxim 10 cursoare, iar DB_BLOCK_BUFFERS prin valorile pe care le va lua nu va impune anumite limite dar va modifica performanele sistemului; Parametrii statici sunt cei ale cror valori nu se pot modifica n timpul unei sesiuni sau cu baza de date pornit; Parametrii dinamici sunt cei ale cror valori se pot modifica, aa cum sa artat mai sus cu comenzile ALTER SESSION, ALTER SYSTEM sau ALTER SYSTEM DEFERRED; Aa cum s-a prezentat mai sus compania Oracle furnizeaz un fiier iniial cu parametrii cu ajutorul cruia putem s pornim o baz de date Pentru a personaliza baza de date conform cerinelor beneficiarului, administratorul va trebui s seteze valori noi pentru anumii parametrii specificai mai jos, astfel: DB_NAME definete numele bazei de date. Se formeaz dintr-un ir de maximum opt caractere. Dac nu se furnizeaz, Oracle atribuie bazei de date un nume standard. Acesta se gsete n fiierul cu parametrii furnizat o dat cu software-ul Oracle. n timpul creerii bazei de date numele acesteia este scris n fiierele de date, de control i de log. Exemplu: DB_NAME = BAZA1

DB_DOMAIN este format dintr-un ir de caractere i definete domeniul din reea cruia aparine baza de date, de obicei este definit de numele organizaiei creia aparine baza de date. Dac se utilizeaz numele domeniului din Internet, atunci partea adresei de e-mail care urmeaz dup caracterul @ este foarte bun pentru a fi folosit ca valoare pentru acest parametru. Exemplu: DB_DOMAIN = BUC.ORG.COM GLOBAL_NAMES definete numele global al bazei de date n cadrul reelei de calculatoare i este format din numele bazei de date i numele domeniului separate prin punct. Acest parametru mai poate lua i valorile: TRUE (caz n care se foreaz ca numele global al bazei de date s fie identic cu cel al bazei de date) sau FALSE (numele global nu are semnificaie, nu se utilizeaz). Exemplu: GLOBAL_NAMES =FALSE CONTROL_FILES definete numele fiierelor de control ce vor fi create pentru baza de date(se va furniza pentru fiecare fiier calea complet de acces la acesta). Este recomandat ca s se defineasc cel puin dou fiiere de control, care s fie plasate pe dou discuri diferite. Exemplu: CONTROL_FILES =diska:cntrl1.ora,diskb:cntrl2.ora LOG_FILES specific numrul maxim de grupuri de fiiere de log ce pot fi utilizate pentru o baz de date. Ia valori de la 2 la 255. Acest parametru specific totodat i numrul minim de fiiere de log ce pot fi deschise pentru o baz de date. DB_FILE_MULTIBLOCK_READ_COUNT definete numrul de blocuri citite simultan pentru accesarea unei tabele a bazei de date. Este folosit pentru optimizarea parcurgerii totale a unei tabele atunci cnd se caut o anumit valoare a unei coloane aferent unui rnd din aceasta. REMOTE_LOGIN_PASSWORDFILE specific dac se folosete sau nu fiierul cu parole pentru identificarea utilizatorilor ce pot executa activiti de administrator. Poate lua valorile: NONE nu se folosete fiierul de parole iar utilizatorul care va executa activiti de administrare trebuie s fie autentificat de ctre sistemul de operare gazd; EXCLUSIVE se folosete un singur fiier cu parole pentru o singur baz de date. Pe lng utilizatorii SYS i SYSTEM i ali utilizatori pot executa sarcini de administrare; SHARED se folosete un singur fiier cu parole pentru mai multe baze de date, caz n care singurii utilizatori ce pot executa activiti de administrare sunt SYS i SYSTEM. n acest caz nu se pot aduga ali utilizatori n fiierul cu parole.

DB_FILES specific numrul maxim de fiiere de date ce pot fi deschise de ctre o baz de date. De fiecare dat cnd se modific acest parametru baza de date se oprete i apoi se repornete. LOG_CHECKPOINT_INTERVAL specific frecvena punctelor de control (checkpoites) ; LOG_CHECKPOINT_TIMEOUT specific timpul maxim dintre dou puncte de control n secunde; PROCESSES specific numrul maxim de utilizatori care se pot conecta simultan la baza de date, iar acest numr trebuie s fie mai mare dect numrul total de procese background, Job Queue i Parallel Query; ROLLBACK_SEGMENTS definete toate segmentele rollback pe care o instan le poate acapara la momentul pornirii. Valoarea acestui parametru se d sub forma unei liste de valori. Exemplu: ROLLBACK_SEGMENTS = (rbseg1, rbseg2, rbseg3, rbseg4) LICENSE_MAX_SESSIONS specific numrul maxim de utilizatori concureniali ce pot fi admii n timpul unei sesiuni; LICENSE_MAX_USERS specific numrul maxim de utilizatori ce pot fi creai pentru o baz de date. LICENSE_MAX_SESSIONS i LICENSE_MAX_USERS nu pot avea simultan valori diferite de zero, deci unul din aceti parametrii trebuie s fie setat pe zero; LICENSE_SESSIONS_WARNING specific numrul de utilizatori concureniali. Dac se depete, se emite un mesaj de atenionare; TRANSACTIONS_PER_ROLLBACK_SEGMENT specific numrul tranzaciilor concurente permise pe un segment rollback; AUDIT_TRAIL activeaz sau dezactiveaz scrierea rndurilor n fiierul de audit. nregistrrile de audit nu se scriu dac parametrul are valoarea NONE sau lipsete. Zona de memorie SGA (System Global Area) conine urmtoarele structuri de memorie: database buffer cache, redo log buffer i shared pool. Database Buffer Cache este poriunea din SGA ce conine blocurile de date citite din fiierele de date ale bazei de date. Redo log buffer este zona n care se pstreaz informaii despre modificrile efectuate n baza de date. Shared pool este o zon care conine la rndul su trei structuri de memorie: library cache, dictionary cache i control structures. Dicionarul de date al bazei de date este citit n zonele library cache i dictionary cache. Mrimea SGA este influenat de valorile parametrilor urmtori: DB_BLOCK_SIZE definete, n bytes, mrimea unui singur bloc de date. Valorile tipice pentru acest parametru sunt 2048 i 4096;

DB_BLOCK_BUFFERS specific numrul de buffere ale bazei de date disponibile n zona database buffer cache, a crei mrime este egal cu DB_BLOCK_SIZE * DB_BLOCK_BUFFERS; LOG_BUFFER determin mrimea n bytes a zonei redo log buffer SHARED_POOL_SIZE specific mrimea n baii a ariei Shared pool. Acest parametru poate accepta valori numerice urmate de literele "K" sau "M", unde "K" nseamn c numrul va fi multiplicat cu 1000, iar "M" nseamn c numrul va fi multiplicat cu 1000000. OPEN_CURSORS specific numrul maxim de cursoare pe care o sesiune le poate deschide simultan. Valoarea asumat este de 50. Este bine ca acest numr s fie ct mai mare pentru a nu avea probleme cu rularea unei aplicaii. TRANSACTIONS specific numrul maxim de tranzacii concurente. O valoare mare a acestui parametru determin mrirea zonei de memorie SGA.

Exemple de creare a unei baze de date 1) CREATE DATABASE; n acest caz se creaz o baz de date Oracle n care toi parametrii comenzii CREATE DATABASE iau valorile standard furnizate de firma Oracle. 2) CREATE DATABASE baza1 LOGFILE GROUP 1 ('diskb:log1.log', 'diskc:log1.log') SIZE 50K, GROUP 2 ('diskb:log2.log', 'diskc:log2.log') SIZE 50K MAXLOGFILES 5 MAXLOGHISTORY 100 MAXDATAFILES 10 ARCHIVELOG CHARACTER SET US7ASCII DATAFILE 'diska:datfile1.dat' SIZE 2M DATAFILE 'disk1:datfile2.dbf' AUTOEXTEND ON 'disk2:datfile3.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED; Dup crearea unei baze de date, instana Oracle poate fi lsat s ruleze, iar baza de date este deschis i montat pentru utilizare normal. Pentru opririle i pornirile ulterioare se poate utiliza Oracle Enterprise Manager. Pornirea i oprirea bazei de date

O baz de date i instana Oracle se poate porni cu utilitarul Oracle Enterprise Manager folosind fereastra de dialog Startup Database. O instan i o baz de date asociat se pot porni n mai multe moduri. Pornirea instanei fr montarea bazei de date se face atunci cnd dorim s crem o baz de date. Activitatea se execut din fereastra de dialog Startup Database prin selectarea butonului radio Startup Nomount; Pornirea instanei i montarea bazei de date, aceasta rmnnd nchis se execut atunci cnd dorim s executm anumite activiti de ntreinere: redenumirea fiierelor de date; adugarea, tergerea sau redenumirea fiierelor redo log; recuperarea integral a bazei de date; Aceast pornire se execut din fereastra de dialog Startup Database prin selectarea butonului radio Startup Mount. Montarea bazei de date se poate execut i dup pornirea unei instane fr baz de date montat, cu ajutorul comenzii SQL ALTER DATABASE cu opiunea MOUNT. Exemplu: SQL> ALTER DATABASE baza1 MOUNT; Pornirea instanei, montarea bazei de date i deschiderea acesteia se face n mod nerestricionat (accesibil tuturor utilizatorilor care au cu privilegiul CREATE SESSION) sau restricionat (accesibil doar utilizatorilor de tip DBA, utilizatorilor cu privilegiile CREATE SESSION i RESTRICTED SESSION). n modul de pornire restricionat se pot executa activiti ca: recrearea indecilor; exportul sau importul datelor bazei de date; ncrcarea datelor cu utilitarul SQL*Loader; blocarea temporar a accesului utilizatorilor obinuii la baza de date. Pornirea n mod nerestricionat se face din fereastra de dialog Startup Database prin selectarea butonului radio Startup Open. Pornirea n mod restricionat se face din fereastra de dialog Startup Database prin selectarea butonului radio Restrict Deschiderea unei baze de date se poate face dup ce instan a fost pornit, baza de date montat dar nchis, cu ajutorul comenzii SQL ALTER DATABASE cu opiunea OPEN. Exemplu: SQL> ALTER DATABASE baza1 OPEN; Transformarea modului de pornire normal a unei baze de date n modul restricionat se poate face i cu comanda SQL ALTER SYSTEM cu opiunea ENABLE RESTRICTED SESSION , iar revenirea la situaia iniial se face cu aceeai comand dar cu opiunea DISABLE RESTRICTED SESSION Exemplu: SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM DISABLE RESTRICTED SESSION;

n anumite circumstane este posibil ca activitile de pornire a bazei de date i instanei Oracle s se execute altfel dect n mod uzual. Astfel putem avea: pornirea forat a unei instane, care se poate realiza atunci cnd instana curent nu poate fi oprit cu succes prin folosirea butoanelor radio Normal sau Immediate din fereastra de dialog Startup. n acest caz se poate fora pornirea unei noi instane Oracle, care va determina oprirea instanei anterioare aflat n situaia de mai sus. pornirea unei instane, montarea bazei de date i pornirea procesului de recuperare a bazei de date, a tabelelor spaiu sau a fiierelor de date, care se execut atunci cnd tim c mediul bazei de date are nevoie de recuperare. pornirea n modul exclusiv sau paralel, care se face atunci cnd avem un server Oracle care permite accesul mai multor instane la aceeai baz de date. pornirea automat a bazei de date la momentul pornirii sistemului de operare, se face dac dorim acest lucru. pornirea unei instane i a unei baze de date la distan, se face atunci cnd serverul Oracle este o parte a unui sistem de baze de date distribuite. Oprirea unei baze de date se poate face n dou moduri: normal sau forat. Modul normal, n care oprirea bazei de date se face ca revers al operaiei de pornire normal, sens n care se execut nchiderea bazei de date, demontarea bazei de date i oprirea instanei Oracle. Activitatea se execut din fereastra de dialog Shutdown Database prin selectarea butonului radio Normal. Oprirea unei baze de date n condiii normale presupune executarea de ctre Oracle a urmtoarelor activiti: oprirea conectrilor la baza de date; deconectarea tuturor utilizatorilor; la urmtoarea pornire a bazei de date nu se pornesc procedurile de recuperare. Modul forat se poate execut n dou moduri: imediat sau prin anularea instanei. Oprirea imediat a bazei de date se execut n cazul unui incident iminent. n cadrul acestei opriri Oracle execut instruciunea SQL aflat n lucru i orice alt tranzacie nefinalizat este anulat prin procesul de rollback; toi utilizatorii conectai sunt deconectai imediat. Oprirea se face din fereastra de dialog Shutdown Database prin selectarea butonului Immediate.

Oprirea prin anularea instanei se execut dac baza de date sau una din aplicaiile sale funcioneaz anormal i nici una din metodele de oprire anterioare nu funcioneaz. Aceast oprire se execut din fereastra de dialog Shutdown prin setarea butonului radio Abort. n timpul acestei opriri Oracle finalizeaz instruciunile SQL aflate n lucru, tranzaciile nefinalizate nu mai sunt aduse la starea anterioar momentului nceperii acestora (nu mai sunt anulate prin procesul de roll back), iar toi utilizatorii sunt deconectai imediat. 4.3. CREAREA I ACTUALIZAREA TABELELOR Comanda de creare a unei tabele, CREATE TABLE, realizeaz fie definirea unei tabele, urmnd ca introducerea de date s se efectueze ulterior, fie definirea i ncrcarea cu date a unei tabele, chiar n momentul creerii ei, folosind sintaxele: CREATE TABLE nume-tabel (spec-col [NOT NULL],...) SPACE definire-spaiu [PCTFREE n] | CLUSTER nume-cluster (nume-col,...)]; CREATE TABLE nume-tabel [(nume-col [NOT NULL],...)] [SPACE definire-spatiu [PCTFREE n] CLUSTER nume-cluster (nume-col,...)] [AS cerere] Unde: spec-col cuprinde nume-col, format, mrime. nume-col este numele coloanei din tabel. format reprezint formatul coloanei din tabel.Formatele acceptate sunt specificate n tabelul urmtor: Tipul datelor Char Date Formatul CHAR( mrime) DATE Explicaii Date alfanumerice. Marimea maxim a coloanei este de 240 caractere. Permit introducerea cmpurilor de tip dat. Exemplu: January 1, 4712 BC to December 31, 4712 AD

Long

LONG

LONG VARCHAR LONG ROW Numerice NUMBER NUMBER (mrime) NUMBER (ntregi zecimali) NUMBER(*) DECIMAL FLOAT INTEGER INTEGER (mrime) RAW SMALLINT RAW(mrimea) LONGRAW

Date caracter de mrime variabil, ntr-o tabel trebuie s fie definit doar o coloan de tip LONG. La fel ca LONG. Date binare RAW. Date numerice de mrime implicit. Date numerice de mrime specificat. Date numerice n baza zece. La fel ca datele de tip NUMBER. La fel ca datele de tip NUMBER. Nu accept descrierea mrimii coloanei. La fel ca datele de tip NUMBER. Nu accept descrierea mrimii zecimalelor. La fel ca date de tip INTEGER Date binare RAW. Mrimea maxim este 240 octei. Date de tip LONG.

n cazul celei de-a doua sintaxe, tipul i mrimea coloanelor vor fi copiate din rezultatul obinut n urma specificrii AS cerere. n ambele sintaxe se utilizeaz alte cuvinte cheie sau parametrii, care au urmtoarea semnificaie: NULL sau NOT NULL se refer la cmpurile din coloane care pot avea sau nu valori nule. Clauzele nume-col [NOT NULL] se pot repeta pentru maximum 254 de coloane. SPACES desemneaz modelul de alocare a spaiului pentru tabela ce se creaz. Modelul este creat n prealabil cu CREATE SPACES. Dac parametrul SPACE este omis, pentru toi parametrii de spaiu vor fi utilizate valorile implicite din comanda CREATE SPACE. PCTFREE permite specificarea unei alte valori dectt cea implicit de 20% pentru spaiul lsat liber. Are aceeai funcie ca i n comanda CREATE SPACE. CLUSTER este parametrul care indic faptul c tabela va fi inclus n clusterul cu numele nume-cluster. Introducerea datelor n tabela va declana memorarea lor n ordinea indicelui de cluster. Nume-col se refer la numele coloanelor din tabel care corespund coloanelor din cluster. Exemplu:

S se creeze tabelele: PRODUSE, CLIENI, PRETURI SALARIATI, DEPOZITE, COMENZI ce intr n componena bazei de date COMBAZA. SQL> CREATE TABLE PRODUSE 2 (CODD NUMBER(6) NOT NULL, 3 CODP NUMBER(5) NOT NULL, 4 DENP CHAR(11), 5 STOC NUMBER(6), 6 DATACRT DATE, 7 UM CHAR(3)); Table created. SQL> CREATE TABLE CLIENI 2 (CODC NUMBER(6) NOT NULL, 3 DENC CHAR(11), 4 LOC CHAR(11), 5 STR CHAR(16), 6 NRCHARC3), 7 CONTNUMBER(11), 8 TEL NUMBER(8), 9 TFAX NUMBER(8)) Table created. SQL> CREATE TABLE PRETURI 2 CODP NUMBER(5) NOT NULL, 3 PRETMAX NUMBEB(9,2), 4 PRETMIN NUMBER(9,2), 6 DATAI DATE, 6 DATASF DATE); Table created. SQL> CREATE TABLE SALARIATI 2 (MARCA NUMBER(4) NOT NULL, 3 NUME CHAR(16), 4 FUNCT CHAR(7), 6 CODD NUMBER(G) NOT NULL, 6 SALA NUMBER(9,2) 7 VENS NUMBER(9.2), 8 CODS NUMBER(4) NOT NULL); Table created. SQL> CREATE TABLE DEPOZITE 2 (CODD NUMBER(6) NOT NULL, 3 DEND NUMBER(6) NOT NULL, 4 NRSAL NUMBER(2)); Table created. SQL> CREATE TABLE COMENZI 2 (NRCOM NUMBER(6) NOT NULL,

3 CODP NUMBER(5) NOT NULL, 4 CODC NUMBEIK6) NOT NULL, 5 DATAL DATE, 6 CANT NUMBER(7), 7 PRE NUMBER(9-2)); Table created. Modificarea unei tabele presupune adugarea de noi coloane la sfritul acesteia sau modificarea tipurilor unor coloane deja existente. Comanda care realizeaz aceste operaii este ALTER TABLE. Sintaxa ei este: ALTER TABLE table {ADD | MODIFY} (spec-col [NULL | NOT NULL,...]) unde: ADD adaug la sfritul tabelei noi coloane care iniial au valori nule; ulterior, prin actualizare, aceste coloane se vor completa cu date. MODIFY schimb definirea unei coloane existente. Modificarea tipului sau mrimii unei coloane presupune ca aceasta s conin numai valori nule. spec-col reprezint numele, formatul i mrimea coloanei ce se va aduga sau se va modifica. NULL se refer la faptul c valorile din coloan ce se adaug/modific sunt nule. NOT NULL specific faptul c o coloan nu poate avea valori nule (NOT NULL). Unei coloane deja existente i se poate ataa parametrul NOT NULL numai dac aceasta conine valori nenule. Exemple: 1) S se adauge la tabela DEPOZITE o nou coloan CANTDEP ce nu a fost prevzut iniial. SQL> ALTER TABLE DEPOZITE ADD 2 (CANTDEP NUMBER(7)); Table altered. 2) S se modifice atributele coloanei CANTDEP (respectiv mrirea acesteia cu dou uniti). SQL> ALTER TABLE DEPOZITE MODIFY 2 (CANTDEP NUMBER(9)); Table altered.

Pentru tergerea unei tabele ntr-o baz de date se utilizeaz comanda DROP TABLE. Sintaxa ei este: DROP TABLE nume-tabel: n general, nu se pot terge tabelele create de ali utilizatori. La tergerea unei tabele. se terg automat indecii corespunztori (create fie de ctre proprietarul tabelei, fiu de ctre ali utilizatori) i privilegiile conferite n legtur cu ea. Rmn, ns, viziunile i sinonimele referitoare la tabela tears, care vor deveni invalide. Va trebui fie ca acestea s fie terse, fie s se defineasc sau s se redefineasc tabela n aa fel inct viziunile i sinonimele s devin valide. Exemplu: S se stearg tabela DEPOZITE. SQL> DROP TABLE DEPOZITE; Table dropped. Se pot modifica numele atribuite tabelelor, sau sinonimelor utiliznd comanda RENAME. Sintaxa ei este: RENAME nume-vechi TO nume-nou; unde: nume-vechi i nume-nou sunt constante de tip ir de caractere (nu se scriu ntre ghilimele sau apostrofuri). 4.4. CREAREA I ACTUALIZAREA INDECILOR n vederea obinerii de performane superioare privind accesul la tabelele unei baze de date se pot construi indeci folosind comanda CREATE INDEX. Comanda are ca efect crearea unui index la o tabel, index care va conine cte o intrare pentru fiecare valoare care apare n coloana specificat pentru tabela respectiv. Aceast coloan se numete coloana de index. Sintaxa comenzii CREATE INDEX este: CREATE [UNIQUE] INDEX nume-index ON nume-tabela (nume-col [ASC | DESC], nume-col [ASC | DESC],...) [COMPRESS | NOCOMPRESS] [SYSSORT | NOSYSSORT] [ROWS =n][PCTFREE = {20 | n}];

unde: UNIQUE se refer la faptul c tabela nu va conine dou rnduri cu aceleai valori n coloanele index (deci nu vor exista dubluri n coloana index). Dac se omite, tabela poate conine oricte asemenea rnduri care s aib n coloana index aceeai valoare. ASC|DESC precizeaz ordinea n care va fi pstrat indexul: ascendent sau descendent. COMPRESS indic faptul c indecii pot fi comprimai, reducndu-se n acest mod spaiul necesar memorrii acestora i mrindu-se viteza operaiilor care folosesc indecii. Comprimarea nu permite gsirea ntr-un index a valorii unui anumit cmp fr s acceseze tabela. NOCOMPRESS suprim comprimarea indecilor. SYSSORT specific faptul c procedura standard ORACLE de sortare este folosit pentru a crea un index. NOSYSSORT este folosit pentru depanare. ROWS specific numrul aproximativ de rnduri ce urmeaz a fi indexate. Acest numr este utilizat pentru a optimiza sortarea n SYSSORT. Clauza nu are efect n SQL*Plus. PCTFREE specific, n momentul crerii indexu-lui, procentul din spaiul pentru index ce trebuie s rmn liber pentru actualizri. Nu are efect asupra extensiilor alocate dup crearea indexului. Indexul creat permite creterea vitezei de acces la datele unei tabele prin intermediul coloanei index datorit faptului c se vor cuta rndurile corespunztoare valorilor coloanei index, fr a citi ntreaga tabel. Deoarece indexul i tabela trebuie actualizate, introducerile, tergerile i modificrile n cmpul de valori ale coloanei index necesit un timp mai mare. De aceea, se recomand crearea de maxim 3 indeci pentru o tabel. In funcie de necesiti, se pot creea i terge n mod dinamic indeci. Indecii creai pentru o singur tabel trebuie s aib nume distincte. Pentru tabele diferite pot fi creai indeci cu acelai nume. n momentul tergerii acestor indeci trebuie specificat tabela din care fac parte. Comanda de validare a unui index este VALIDATE INDEX. Aceast comand verific integritatea indexului specificat pentru o anumit tabel. Dac pe tabela respectiv a fost creat un singur index, al crui nume va fi specificat n comand, atunci numele tabelei poate fi omis. Comanda VALIDATE INDEX are sintaxa: VALIDATE INDEX nume-index [ON nume-tabel] [WITH LIST]; unde:

WITH LIST salveaz informaiile referitoare la index ntr-un fiier. nume-index este numele indexului ce urmeaz a fi validat. Dac indexul este valid, comanda va afia un mesaj corespunztor (Index validated). Obinerea oricrui alt mesaj va determina tergerea indexului i recrearea lui. tergerea unui index din baza de date se realizeaz cu ajutorul comenzii DROP INDEX, cu sintaxa: DROP INDEX nume-index [ON nume-tabel]; Dac pe o anumit tabel a fost creat un singur index, numele tabelei respective poate fi omis n linia de comand. Este posibil ca doi indeci creai pe tabele diferite s aib acelai nume. n acest caz, n linia de comand vor aprea att numele indexului ct i al tabelei pentru care a fost creat. Se recomand numai tergerea indecilor proprii. Exemple: 1) S se creeze un index cu numele SUMAR pentru coloana FUNCT din tabela SALARIAI. SQL> CREATE INDEX SUMAR 2 ON SALARIATI(FUNCT); Index created 2) S se creeze un index cu numele MARCA pentru coloana MARCA din tabela SALARIAI. SQL> CREATE INDEX MARCA 2 ON SALARIAT(MARCA); Index created. 3) S se creeze un index cu numele MARCA din pentru coloana MARCA clia tabela SALARIAI cu suprimarea comprimrii lui. SQL> CREATE INDEX MARCA 2 ON SALARIATI(MARCA) NOCOMPRESS; Index created. 4) S se verifice integritatea indexului SUMAR. SQL> VALIDATE INDEX SUMAR; Index validated. 6) S se verifice integritatea indexului MARCA pentru tabela SALARIAI. SQL> VALIDATE INDEX MARCA ON SALARIAI; Index validated. 7) S se tearg indexul SUMAR. SQL> DROP INDEX SUMAR; Index dropped. 8) S se tearg indexul MARCA din tabela SALARIAI. SQL> DROP INDEX MARCA ON SALARIAI;

Index dropped. 4.5. CREAREA I ACTUALIZAREA TABELELOR I INDECILOR PARTIIONAI Partiionarea este procesul de mprire a tabelelor i indecilor foarte mari n mai multe tabele, i respectiv indeci, mai mici numite partiii pentru a le putea manipula mai uor. O dat definite partiiile, instruciunile SQL pot accesa i manipula aceste partiii n loc de a manipula ntreaga tabel sau ntregul index din care au provenit. Toate partiiile au aceleai atribute logice ca i tabela sau indexul din care au provenit. De exemplu toate partiiile unei tabele au aceleai coloane cu aceleai constrngeri de integritate ca i tabela, iar partiiile unui index sunt construite dup aceeai coloan ca i indexul din care au provenit. Fiecare partiie este memorat ntr-un segment propriu aflat n aceeai tabel spaiu sau n tabele spaiu diferite. Plasarea partiiilor n tabele spaiu diferit prezint urmtoarele avantaje semnificative: Riscul pierderii datelor poate fi diminuat; Salvarea i restaurarea partiiilor se poate face independent unele fa de altele; Se poate realiza o echilibrare a operaiilor de I/O prin maparea partiiilor pe discuri diferite. O partiie este definit de urmtoarele: Numele partiiei identific n mod unic partiia n schema de obiecte a unui utilizator; Referirea unei partiii se face n context obligatoriu cu numele tabelei sau indexului din care provine. Numele unei partiii poate s apar n instruciuni DDL i DML, precum i n utilitarele Import/Export i SQL*Loader. Exemplu: ALTER TABLE tab10 DROP PARTITION part1; Aria de cuprindere a partiiei este format din rndurile tabelei sau indexului, care aparin acesteia bazat pe valorile coloanele ce definesc partiia. Aria de cuprindere este definit prin clauzele: PARTITION BY RANGE ( coloana1, colana2, ) i VALUES LESS THAN (valoare1, valoare2, )

unde coloana1, coloana2, formeaz lista coloanelor. n funcie de valorile acestora se stabilesc rndurile din tabel sau index care aparin partiiei. Coloanele dup care se face partiionarea nu trebuie s conin valori de tip NULL, iar numrul lor nu poate fi mai mare de ct 16; valoare1, valoare2, formeaz lista valorilor coloanelor. n funcie ele se selecteaz rndurile pentru a fi incluse n partiie. Aceste valori formeaz limita superioar a partiiei. Limitele partiiei definesc mulimea rndurilor tabelei sau indexului ce vor fi incluse n aceasta. Orice partiie are dou limite, limita inferioar a crei valoare este definit de valoarea LESS THAN din definirea partiiei precedente i care este inclus n partiie, i limita superioar este definit de valoarea LESS THAN din definirea partiiei curente, valoare care nu este inclus n partiie. De la aceast regul face excepie prima partiie care nu are limit inferioar. Partiionarea nu se poate face dup pseudocoloanele LEVEL, ROWID sau MISLABEL. Ca valoare n clauza LESS THAN a ultimei partiii se poate specifica i MAXVALUE, care reprezint o valoare virtual egal cu infinit. Cheia de partiionare este un set de valori format din valorile coloanelor de partiionare aferente unui rnd al partiiei. Specificarea unei valorii alta dect MAXVALUE pentru parametrul LESS THAN impune o constrngere implicit de tip CHECK la nivel de tabel, cu aceast valoare. Reguli de partiionare a tabelelor si a indecilor Partiionarea tabelelor se face respectnd cteva reguli eseniale, astfel: O tabel poate fi partiionat dac nu este inclus ntr-un grup de tabele sau nu conine tipurile de date LOB, LONG, LONG RAW sau obiect; O tabel partiionat sau nepartiionat poate avea indeci i partiionai i/sau nepartiionai; Atributele fizice ale unei partiii pot fi specificate iniial prin comanda CREATE TABLE pentru crearea partiiei implicit sau explicit. Specificarea implicit se face prin furnizarea atributelor fizice pentru tabel i nespecificarea acestora pentru partiie n clauza PARTITION. Atributele fizice implicite pot fi ulterior modificate cu comanda ALTER TABLE MODIFY DEFAULT ATTRIBUTES. Specificarea explicit se face prin furnizarea acestora n clauza PARTITION, caz n care valorile atributelor fizice ale partiiei vor suprascrie valorile atributelor fizice implicite ale tabelei. Atributele fizice explicite pot fi ulterior modificate cu comenzile ALTER TABLE MODIFY PARTITION

sau ALTER TABLE MOVE PARTITION Partiionarea indecilor se face respectnd cteva reguli: Un index poate fi partiionat dac nu este inclus ntr-un grup de indeci sau nu este definit pentru o tabel inclus ntr-un grup de tabele; Indecii pot fi de patru categorii: locali prefixai, locali neprefixai, globali prefixai i globali neprefixai. Indecii globali pot fi partiionai sau nepartiionai. Un index este local dac cheile dintr-o partiie oarecare a acestuia refer rnduri aflate ntr-o singur partiie a tabelei pentru care a fost creat. Indexul local este prefixat dac este definit pe un set de coloane dintre care cea mai din stnga este coloana dup care a fost partiionat att indexul local, ct i tabela pe care a fost creat acesta. De exemplu, presupunem c avem tabela TAB10 i indexul su INDEX10, care au fost partiionai dup coloanele COL1 i CIOL2. Dac indexul INDEX10 este definit pe coloanele (COL1, COL2, COL3), atunci el este local prefixat pentru c n partea cea mai din stnga(prefix) a listei coloanelor de indexare se afl coloanele COL1 i COL2 dup care s-a fcut partajarea tabelei i a indexului su. Dac indexul INDEX10 ar fi definit pe coloanele (COL1, CO23) atunci indexul este local neprefixat. Indecii locali nu pot fi partiionai cu clauza BY RANGE, aceast clauz se aplic numai pentru indecii globali. Un index este global dac cheile dintr-o partiie oarecare a acestuia refer rnduri aflate n mai multe partiii ale tabelei pentru care a fost creat. La fel ca i n cazul indexului local putem avea index global prefixat i index global neprefixa. Indexul global arat faptul c partiionarea acestuia este definit de utilizator i nu trebuie s fie echivalent cu partiionarea tabelei pentru care se creeaz. Definirea atributelor fizice ale indecilor comport aceleai reguli ca la definirea atributelor fizice ale partiiilor unei tabele, cu deosebirea c aici se folosesc pentru crearea unui index comenzile: CREATE INDEX sau ALTER TABLE SPLIT PARTITION, iar pentru modificarea atributelor fizice comenzile SQL ALTER INDEX MODIFY PARTITION sau ALTER INDEX REBUILD PARTITION.

Crearea partiiilor unei tabele i ale unui index Crearea partiiilor este similar cu cea a crerii tabelelor sau indecilor. Crearea partiiilor unei tabele se face cu comanda CREATE TABLE folosind i clauza PARTITION. Exemplu: Avem tabela FACTURI ce cuprinde documente din anii 1999 2002. Tabela are printre alte coloane si coloanele AN, LUNA, ZI i dorim s partiionm tabela n trei partiii, astfel nct partiia 1 s conin date din anii 1999 i 2000, partiia 2 date din anul 2001, iar partiia 3 date din anul 2001. Cu comanda de mai jos vom crea cele 3 partiii, astfel: CREATE TABLE facturi (numar_factura NUMBER (12), nume_furnizor VARCHAR(25), an NUMBER(4), luna NUMBER(2), zi NUMBER(2)) STORAGE (INITIAL 100K NEXT 50K) LOGGING PARTITION BY RANGE (an, luna, zi) (PARTITION p1_1999_2000 VALUES LESS THAN (2001, 13, 32) TABLESPACE tabsp_1 NOLOGGING, PARTITION p1_2001 VALUES LESS THAN (2002, 13, 32) TABLESPACE tabsp_2 NOLOGGING, PARTITION p1_2002 VALUES LESS THAN (2001, 13, 32) TABLESPACE tabsp_3 NOLOGGING); Crearea partiiilor unui index se face cu comanda CREATE INDEX folosind i clauza PARTITION. Activitatea comport unele diferene de la un tip de index la altul, conform exemplelor de mai jos: Exemple: 1) Crearea unui index local prefixat pentru tabela de mai sus cu specificarea partiiilor: CREATE INDEX index_loc_prefix ON facturi (an, luna, zi, numr_factur) LOCAL (PARTITION p1 TABLESPACE tabsp1, PARTITION p2 TABLESPACE tabsp1, PARTITION p3 TABLESPACE tabsp1); 2) Crearea unui index local prefixat pentru tabela de mai sus fr specificarea partiiilor: CREATE INDEX index_loc_prefix ON facturi (an, luna, zi, numr_factur) LOCAL;

3) Crearea unui index local neprefixat pentru tabela de mai sus cu specificarea partiiilor: CREATE INDEX index_loc_prefix ON facturi LOCAL (PARTITION p1 TABLESPACE tabsp1, PARTITION p2 TABLESPACE tabsp1, PARTITION p3 TABLESPACE tabsp1); 4) Crearea unui index local neprefixat pentru tabela de mai sus fr specificarea partiiilor: CREATE INDEX index_loc_prefix ON facturi (an, lun, zi) LOCAL; 5) Crearea unui index global prefixat pentru tabela de mai sus cu specificarea numelui partiiilor i a parametrului GLOBAL: CREATE INDEX index_loc_prefix ON facturi (an, luna, zi, numr_factur) GLOBAL PARTITION BY RANGE (an, luna, zi) (PARTITION p1_1999_2000 VALUES LESS THAN (2001, 13, 32) TABLESPACE tabsp_1 NOLOGGING, PARTITION p1_2001 VALUES LESS THAN (2002, 13, 32) TABLESPACE tabsp_2 NOLOGGING, PARTITION p1_2002 VALUES LESS THAN (2001, 13, 32) TABLESPACE tabsp_3 NOLOGGING); 6) Crearea unui index global prefixat pentru tabela de mai sus fr specificarea numelui partiiilor i a parametrului GLOBAL: CREATE INDEX index_loc_prefix ON facturi (an, luna, zi, numr_factur) PARTITION BY RANGE (an, luna, zi) (PARTITION VALUES LESS THAN (2001, 13, 32) TABLESPACE tabsp_1 NOLOGGING, PARTITION VALUES LESS THAN (2002, 13, 32) TABLESPACE tabsp_2 NOLOGGING, PARTITION VALUES LESS THAN (2001, 13, 32) TABLESPACE tabsp_3 NOLOGGING); 7) Crearea unui index global prefixat pentru tabela de mai sus cu specificarea numelui partiiilor i a parametrului GLOBAL, cu un numr de partiii diferit de cel al partiiilor tabelei pe care se creaz i cu alte coloane de partiionare dect cele dup care s-a partiionat tabela: CREATE INDEX index_loc_prefix ON facturi (an,lun, numr_factur) GLOBAL PARTITION BY RANGE (an, lun) (PARTITION p1_1999_2001 VALUES LESS THAN (2002, 13) TABLESPACE tabsp_1 NOLOGGING,

PARTITION p1_2001 VALUES LESS THAN (2003, 13) TABLESPACE tabsp_2 NOLOGGING); Intreinerea partiiilor ntreinere a partiiilor se realizeaz prin executarea activitilor de modificare, mutare, adugare, distrugere, trunchiere, splitare, reunire a acestora, precum i schimbarea partiiilor i reconstruirea partiiilor index. Modificarea unei partiii a unei tabele se face cu comanda ALTER TABLE cu clauza MODIFY PARTITION. Cu aceast comand se pot modifica atributele fizice ale partiiei sau ale partiiei indexului aferent. Mutarea partiiilor unei tabele sau index se face pentru a schimba tabela spaiu n care rezid acestea din diverse considerente, dintre care cele de obinere a unor performane n exploatarea sunt cele mai frecvente. Operaia se execut cu comanda ALTER TABLE cu opiunea MOVE PARTITION. Exemplu: ALTER TABLE tab10 MOVE PARTITION part1 TABLESPACE tabsp10 NOLOGGING; Mutarea partiiei unei tabele care conine date, determin necesitatea recrerii tuturor indecilor locali sau globali ataai acesteia. Adugarea unor noi partiii se poate executa doar pentru o tabel partiionat sau un index local. Operaia se execut cu comanda ALTER TABLE cu opiunea ADD PARTITION. Exemplu: ALTER TABLE tab100 ADD PARTITION part1 VALUES LESS THAN (935); O nou partiie poate fi adugat doar dup partiia cu limita superioar cea mai mare. Dac dorim s adugm o partiie la nceput, ntre partiiile existente sau dup ultima partiie care are limita superioar egal cu valoarea MAXVALUE, atunci acest lucru se poate realiza prin splitarea unei partiii, n cazul de fa prima, una adiacent cu locul de inserare a noii partiii, i respectiv ultima partiie. Dac pentru tabela partiionat creia i adugm o nou partiie exist un index local, atunci Oracle creeaz automat o partiie de index pentru noua partiie adugat. Distrugerea partiiilor unei tabele se face dup anumite reguli funcie de situaiile n care se afl partiia, cu ajutorul comenzii ALTER TABLE cu opiunea DROP PARTITION. Distrugerea partiiei unei tabele care conine date i a indexului global se poate face lsnd

nealterai indecii globali n timpul distrugerii partiiei, dup care acetia vor fi recreai sau tergnd toate rndurile partiiei cu comanda DELETE dup care distrugem partiia. Aceast comand actualizeaz indecii globali. Distrugerea partiiei unei tabele care conine date i a constrngerilor refereniale de integritate se poate face dezactivnd constrngerile de integritate, distrugnd partiia i apoi reactivnd constrngerile de integritate. tergerea rndurilor partiiei cu comanda DELETE, apoi distrugem partiia. Distrugerea partiiilor unui index se face dup anumite reguli funcie de situaiile n care se afl partiia, cu ajutorul comenzii ALTER INDEX cu opiunea DROP PARTITION. O partiie a unui index local nu poate fi distrus, ea se distruge implicit atunci cnd se distruge partiia tabelei creia i corespunde. O partiie fr date a unui index global poate fi distrus. Dac o partiie a unui index global conine date, atunci prin distrugerea acesteia partiia urmtoare devine invalid i trebuie recreat; Trunchierea partiiilor unei tabele se face cu comanda ALTER TABLE cu opiunea TRUNCATE PARTITION i are ca efect tergerea tuturor rndurilor de date din aceast partiie i a partiiei corespunztoare a indexului local asociat, dac exist. Partiiile indecilor nu pot fi trunchiate, singur trunchiere posibil este cea specificat mai sus. Trunchierea unei partiii a unei tabele i a indecilor globali asociai i/sau a constrngerilor de integritate referenial se face dup aceleai reguli ca i operaia de distrugere. Splitarea partiiilor unei tabele sau ale unui index se face cu comanda ALTER TABLE/INDEX cu opiunea SPLIT PARTITION. O partiie a unei tabele ce conine date, prin splitare toi indecii asociai devin inutilizabili i ca atare acetia trebuie recreai. Numai partiia fr date nu invalideaz indecii. Partiia unui index poate fi splitat numai dac indexul este global i nu conine date, cci partiia unui index local se spliteaz automat atunci cnd se spliteaz partiia tabelei creia i corespunde. Fuzionarea sau reunirea partiiilor unei tabele sau ale unui index se face cu ajutorul comenzilor ALTER TABLE/INDEX i cu una din opiunile DROP PARTITION sau EXCHANGE PARTITION, pentru c o opiune explicit de fuzionare nu exist. O partiie a unei tabele poate fi reunit cu alt partiie numai dac nu are indeci globali sau constrngeri de integritate refereniale asociate. Fuzionarea unei partiii a unei tabele se face totdeauna cu partiia imediat superioar. Presupunem c avem tabela TAB10 cu partiiileP1, P2, P3 i P4 i vrem

s reunim partiia P2 cu P3, se vor exporta datele din tabele P2, se execut comanda ALTER TALE tab10 DROP PARTITION p2 , dup care importm datele exportate n partiia P3. Fuzionarea sau reunirea partiiilor unui index local se face implicit cnd se reunesc partiiile corespunztoare ale acestora, iar fuzionarea a dou partiii P2 i P3, care conin date, ale unui index global, se poate face astfel: ALTER INDEX index_global DROP PARTITION p2; ALTER INDEX index_global REBUILD PARTITION p3; Schimbarea partiiilor realizeaz transformarea unei partiii a unei tabele ntr-o tabel nepartiionat sau o tabel nepartiionat ntr-o partiie a unei tabele partiionate. Operaia se execut cu comanda ALTER TABLE cu opiunea EXCHANGE PARTITION. 4.6. CREAREA I ACTUALIZAREA VEDERILOR O viziune (vedere sau tabel virtual) este o form de prezentare a datelor din una sau mai multe tabele sau viziuni pentru un utilizator, obinut prin executarea unei cereri. O viziune este tratat ca o tabel i se mai numete i tabel virtual. Utilizatorul care creeaz viziunea trebuie s aib privilegiul CREATE VIEW sau CREATE ANY VIEW. Proprietarul viziunii trebuie s aib, n mod explicit, acordate privilegiile de acces la toate obiectele referite de ctre viziune, privilegii ce nu pot fi obinute prin intermediul rolului. De asemenea, funcionalitatea unei viziuni depinde de privilegiile proprietarului acesteia. De exemplu, dac proprietarul viziunii are privilegiul SELECT pentru tabela din care s-a creat viziunea (numit i tabel de baz), atunci acesta poate executa prin intermediul viziunii doar operaii de SELECT din tabel. Operaia se execut cu comanda SQL CREATE VIEW, astfel: 1) CREATE VIEW v10 AS SELECT col1, col2, col4 FROM tab2 WHERE col1 = 20; Crearea unei viziuni v10, cu coloanele col1, col2 i col4, ca un subset de date din tabela tab2, care are coloanele col1,col2,col3,col4,col5 2) CREATE VIEW v11 AS SELECT col1, col2, col4, col7 FROM tab2, tab3 WHERE tab2.col1 = tab3.col1;

Crearea viziunii v11ca reuniune a unor date din tabelele tab2 (col1,col2,col3,col4,col5) i tab3 (col1, col8, col9): Dac n timpul crerii unei viziuni Oracle detecteaz anumite erori acestea sunt semnalate, iar dac se folosete opiunea FORCE viziunea este totui creat cu starea INVALID. Cu aceast opiune o vedere poate fi creat chiar dac tabela sau tabelele de baz nu exist. Viziunea astfel creat va fi valid, deci va pute fi utilizat, abia dup ce se va crea tabela de baz, iar proprietarul viziunii va primi drepturile necesare de utilizare a acestora. Vederea de tip reuniune (vedere join) este definit ca vederea care cumuleaz rnduri din mai multe tabele. Modificarea unei astfel de vederi se face respectndu-se condiia de cheie rezervat. O tabel se numete tabel cu cheie rezervat dac orice cheie a acesteia poate fi cheie n vederea tip reuniune a crei tabel de baz este. Altfel spus, o tabel cu cheie rezervat are cheile rezervate n cadrul vederii join. Prin intermediul unei astfel de vederi se pot actualiza date (UPDATE, DELETE sau INSERT) numai n tabela de baza care conine cheia sau cheile rezervate, cu condiia obligatorie ca opiunea SELECT de creare a vederii s nu conin una din clauzele DISTINCT, GROUP BY, START WITH, CONNECT BY, ROWNUM i nici o operaie de setare de tip UNION, UNION ALL, INTERSECT sau MINUS. Deci prin intermediul unei vederi de tip reuniune se pot modifica date numai asupra coloanelor care se mapeaz pe tabela de baz care conine cheia sau cheile rezervate. Cu ajutorul vederilor ALL_UPDATABLE_COLUMNS, DBA_UPDATABLE_COLUMNS i USER_UPDATABLE_COLUMNS din dicionarul de date se pot obine informaii despre coloanele vederii de tip reuniune ce pot fi modificate. Inlocuirea unei vederi este operaia de recrearea acesteia i se execut prin distrugerea vederii i recrearea acesteia si redefinirea vederii cu clauza OR REPLACE. Exemplu: CREATE OR REPLACE VIEW v10 AS SELECT col1, col2 FROM tab2 WHERE col1 = 30; nainte de a nlocui o vedere, trebuie avute n vedere urmtoarele efecte: nlocuirea unei vederi determin nlocuirea definiiei acesteia din dicionarul de date; Dac n vedere nlocuit a existat clauza CHECK OPTION, iar n definiia noii vederi nu mai este inclus, aceast clauz este distrus; Toate vederile i programele PL/SQL dependente de vedere nlocuit devin invalide.

Distrugerea vederilor se execut cu comanda DROP VIEW . Vederea partiionat mparte o tabel foarte mare n buci mai mici numite partiii i le reunete pe acestea pentru a se obine performane n administrare i regsirea datelor. Cererile care folosesc anumite intervale de valori conforme cu cele folosite la crearea partiiilor vor regsi date numai din partiiile aferente acestora. O vedere partiionat se creeaz folosind constrngerea de integritate CHECK sau clauza WHERE. Considerm tabelele t1, t2 i t3 cu aceleai coloane, deci pot fi considerate partiii ale unei tabele care la nsumeaz. Exemplu: ALTER TABLE t1 ADD CONSTRAINT c1 CHECK (col1 between 0 and 1000); ALTER TABLE t2 ADD CONSTRAINT c1 CHECK (col1 between 1000 and 10000); ALTER TABLE t3 ADD CONSTRAINT c1 CHECK (col1 between 10000 and 100000); CREATE VIEW v10 AS SELECT * FROM t1 UNION ALL SELECT * FROM t2 UNION ALL SELECT * FROM t3; CREATE VIEW v10 AS SELECT * FROM t1 WHERE col1 between 0 and 1000 UNION ALL SELECT * FROM t2 WHERE col1 between 1000 and 10000 UNION ALL SELECT * FROM t3 WHERE col1 between 10000 and 100000); 4.7. CREAREA I ACTUALIZAREA SECVENELOR Secvenele sunt numere unice de identificare a coloanelor unei tabele i pot fi utilizate la efectuarea diferitelor operaii ntr-o aplicaie. Crearea unei secvene se execut cu comanda CREATE SEQUENCE, astfel: CREATE SEQUENCE secv_1 INCREMENT BY 1 START WITH 1 NOMAXVALUE CACHE 10; unde: INCREMENT BY arat valoare cu care se incrementeaz o secven curent pentru a se obine secvena urmtoare,

START WITH este valoarea de pornire a secvenei(prima valoare), NOMAXVALUE arat c nu avem o limit superioar pn unde se pot genera secvene, CACHE definete numrul de secvene viitoare care se pstreaz anticipat n memorie pentru obinerea unor performane superioare. Cnd aceast valoare se epuizeaz Oracle ncarc n memorie urmtorul se de secvene. Modificarea unei secvene se face cu comanda SQL ALTER SEQUENCE i poate opera asupra parametrilor iniiali ai comenzii de creare a secvenei. Parametrul de iniializare SEQUENCE_CACHE_ENTRIES determin numrul secvenelor care pot fi inute n memorie de Oracle. Distrugerea secvenelor se face cu comanda SQL DROP SEQUENCE. Referirea secvenelor se face cu pseudocoloanele NEXTVAL i CURRVAL , n care: NEXTVAL genereaz urmtoarea valoare a secvenei. Referirea se face prin nume_secven.NEXTVAL. Exemple: 1) CREATE SEQUENCE secv1; INSERT INTO tab1 (COL1, COL2) VALUES (secv1.NEXTVAL, 300); CURRVAL definete valoarea curent a secvenei i se refer prin nume_ 2) INSERT INTO tab10 (COL4, COL5) VALUES (secv1.CURRVAL, 1300); INSERT INTO tab10 (COL4, COL5) VALUES (secv1.CURRVAL, 2 300); Valoarea NEXTVAL poate fi referit o singur dat, iar valoarea CURRVAL de mai multe ori, cu condiia ca valoarea NEXTVAL s fi fost referit, deci secvena curent s fi fost creat. 4.8. CREAREA I ACTUALIZAREA SINONIMELOR Sinonimul este un alt nume (alias) pentru o tabel, o vedere, secven, procedur, funcie sau pachet. Sinonimul poate fi public sau privat. Sinonimul public este inclus n schema unui grup de utilizatori numit PUBLIC i este accesibil tuturor utilizatorilor, iar cel privat aparine numai unui anumit utilizator. Crearea sinonimului se face cu comanda CREATE SYNONYM i se distruge cu comanda DROP SYNONYM. Exemple:

Crearea unui sinonim privat: CREATE SYNONYM sin1 FOR tab10; Crearea unui sinonim public: CREATE PUBLIC SYNONYM sin10 FOR tab10; Distrugerea unui sinonim: DROP SYNONYM sin1; DROP PUBLIC SYNONYM sin10; 4.9. CREAREA I ACTUALIZAREA GRUPURILOR DE TABELE I A GRUPURILOR DE INDECI Grupul de tabele (cluster) este o metod de memorare comprimat a unor tabele de date care au coloane comune i care sunt foarte des folosite mpreun. Cheia grupului (key cluster) este coloana sau grupul de coloane pe care tabelele grupate le au comune. Cheia grupului se va specifica atunci cnd se creeaz acesta i atunci cnd se creeaz tabelele ce vor fi incluse n grup. Fiecare valoare a cheii de grup se va memora o singur n cadrul grupului de tabele sau al grupului de indeci indiferent de cte ori apare aceasta n tabelele grupului. Coloanele care se aleg pentru a fi definite cheile de grup sunt cele folosite cel mai mult pentru a reuni tabelele atunci cnd se execut o anumit cerere. Cea mai bun cheie de grup este aceea care are suficiente valori unice, astfel nct rndurile care se grupeaz dup aceasta s poat fi incluse ntr-un singur bloc de date. Astfel dac avem prea puine rnduri pe o cheie de grup obinem o pierdere a spaiului de memorie i performane neglijabile, iar dac avem prea multe timpul de cutare suplimentar, cutare n mai multe blocuri de date, va duce la degradarea performanelor. Setarea parametrilor de memorie PCTFREE i PCTUSED trebuie fcut cu mare grij, astfel nct s nu afectm spaiul utilizat pentru inserarea rndurilor i nici pe cel ce va fi folosi pentru actualizarea datelor aferente rndurilor inserate n bloc. Valorile acestor parametrii folosite la definirea grupului sunt automat utilizate i pentru tabelele ce vor fi grupate. Chiar dac vom specifica aceti parametrii la crearea unei tabele n cadrul grupului ei vor fi ignorai. Specificarea spaiului necesar pentru memorarea rndurilor aferente unei chei de grup se face prin intermediul clauzei SIZE a comenzii SQL CREATE CLUSTER. Valoarea acestui parametru este specificat n bytes i reprezint spaiul ce trebuie rezervat n cadrul blocului de date aferent grupului pentru memorarea valorii sau valorilor cheii de grup. Prin intermediul acestuia, Oracle determin numrul rndurilor de date ce ncap

ntr-un bloc de date al grupului. Dac SIZE este specificat astfel nct ntrun bloc de date s ncap dou chei de grup atunci spaiul acestui bloc este folosit de ambele chei, iar dac un bloc de date nu poate cuprinde toate rndurile aferente unei chei de grup, cheia de grup se memoreaz o singur dat, iar blocurile de date se nlnuiesc de blocul n care se afl cheia de grup. Dac ntr-un bloc de date ncap mai multe chei de grup, atunci acesta poate s aparin mai multor lanuri de date. Specificarea locului (tabelei spaiu) n care s fie plasat grupul de tabele i grupul index asociat este obligatorie la crearea acestor grupuri. Crearea grupului de tabele (cluster) se face cu comand SQL CREATE CLUSTER. Se va crea nti grupul de tabele i apoi tabelele ce vor face parte din grup. Atributele fizice se furnizeaz o singur dat, doar pentru grup nu i pentru tabele. Exemplu: CREATE CLUSTER grup1 (col1 NUMBER (5)) PCTUSED 75 PCTFREE 10 SIZE 600 TABLESPACE tabsp1 STORAGE (INITIAL 200k NEXT 290k MINEXTENTS 3 MAXEXTENTS 25 PCTINCREASE 30); CREATE TABLE tab1 (col1 NUMBER(5) PRIMARY KEY, col2 NUMBER (10), ) CLUSTER grup1 (col1); CREATE TABLE tab2 (col3 NUMBER(5) PRIMARY KEY, col4 NUMBER (10), , col1 NUMBER (5) REFERENCE tab1(col1)) CLUSTER grup1 (col1); unde col1 este cheia grupului. Crearea grupului de indeci (cluster) se face cu comand SQL CREATE INDEX cu clauza ON CLUSTER. Se va crea nti grupul de tabele i apoi grupul de indeci asociat. Exemplu: CREATE INDEX index1 ON CLUSTER grup1 INITRANS 2 MAXTRANS 5 TABLESPACE tabsp2GR

PCTFREE 10 STORAGE (INITIAL 50k NEXT 50k MINEXTENTS 3 MAXEXTENTS 25 PCTINCREASE 30); Modificarea grupurilor de tabele sau de indeci se face cu comanda SQL ALTER CLUSTER. Elementele ce pot face obiectul modificrii sunt atributele fizice ale grupului.