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)

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.

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

Formatul

Explicaii

CHAR( mrime)

Date

DATE

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.

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