Академический Документы
Профессиональный Документы
Культура Документы
Obiective:
Dupa parcurgerea acestei lectii, veti asimila cunostinte despre:
Descrierea catorva dintre obiectele bazelor de date si folosirea lor
Crearea, mentinerea si folosirea secventelor
Crearea si ntretinerea indecsilor
Crearea de sinonime publice si private
Scopul lectiei:
n aceasta lectie, se va prezenta crearea si modul de utilizare a catorva dintre cele mai folosite
obiecte ale bazelor de date. Acestea includ secvente, indecsi si sinonime.
Obiecte ale bazelor de date
Obiect
Tabel
Vizualizare
Secventa
Index
Sinonim
Descriere
Unitatea principala de stocare a datelor; alcatuita din linii si
coloane
Reprezentare logica a seturilor de date din una sau mai multe
baze de date
Generator ale valorii cheii primare
mbunatateste performantele anumitor interogari
Un alt nume dat pentru un obiect
Ce este o secventa?
Un generator de secvente poate fi folosit pentru a crea automat valori pentru liniile din tabel. O
secventa este un obiect creat de un utilizator ce poate fi folosit de unul sau mai multi utilizatori.
Secventa este generata si incrementata (sau decrementata) de o procedura interna Oracle. Acest
obiect nlocuieste partea de cod, fiind economisit timpul necesar implementarii rutinei de generare a
secventei.
Numerele secventei sunt retinute si generate independent de tabelele de date existente. Prin
urmare, aceeasi secventa poate fi folosita n mai multe baze de date.
Declaratia CREATE SEQUENCE
Defineste o secventa ce va genera automat numere secventiale.
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
Crearea unei secvente
Generarea automata de numere folosind CREATE SEQUENCE
n sintaxa:
SEQUENCE
INCREMENT BY n
START WITH n
Crearea unei secvente numita DEPT_DEPTNO pentru a fi folosita drept cheie primara a bazei de
date DEPT.
Nu se foloseste optiunea CYCLE
Confirmarea secventelor
Odata creata propria secventa, ea este nscrisa n dictionarul de date. Odata ce secventa devine
obiect al bazei de date, ea poate fi identificata cu ajutorul dictionarului de date USER_OBJECTS, care
este de asemenea un tabel al bazei de date.
De asemenea, se pot confirma setarile unei secvente prin selectarea acestora din dictionarul de
date USER_SEQUENCES.
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER
CUSTID
1
1.000E+27
1
109
DEPT_DEPTNO
1
100
1
91
ORDID
1
1.000E+27
1
622
PRODID
1
1.000E+27
1
200381
dept_deptno.CURRVAL
dual;
CURRVAL
-------------91
Sa presupunem ca se doreste ncadrarea de personal pentru noul departament creat.
Instructiunea INSERT este executata n mod repetat pentru toti noii angajati:
SQL> INSERT INTO
2 VALUES
emp
(emp_empno.NEXTVAL, deptno.CURRVAL,
Nota: Exemplul anterior presupune existenta unei secvente EMP_EMPNO pentru generarea de numere
noilor angajati.
Utilizarea unei secvente
Stocarea valorilor secventelor n memorie permite o accesare mai rapida a acestora
Pot apare goluri n cadrul secventei atunci cand:
- survine un rollback
- sistemul nu mai lucreaza
- secventa este folosita n alta baza de date
Vizualizarea urmatoarei secvente disponibile, daca a fost creata cu NOCACHE se poate face prin
interogarea bazei de date USER_SEQUENCES
Modificarea secventei
Daca se atinge MAXVALUE n cazul unei secvente, nu va mai fi atribuita nici o valoare n plus
secventei si se va primi o eroare ce va indica faptul ca secventa a atins valoarea MAXVALUE. Pentru a
putea folosi n continuare aceasta secventa, ea necesita o modificare cu ajutorul instructiunii ALTER
SEQUENCE.
Sintaxa
ALTER SEQUENCE sequence
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
unde: sequence
este numele generatorului de secventa.
Pentru mai multe informatii vezi
Oracle Server SQL Reference, Release 8.0, ALTER SEQUENCE
Sfaturi pentru modificarea unei secvente
Modificarea o realizeaza numai cel care a creat secventa sau cel ce detine privilegiul ALTER.
Sunt afectate doar numerele ce urmeaza a fi generate.
Secventa trebuie ntrerupta si recreata pentru a ncepe secventa cu un alt numar decat cel initial.
Sunt efectuate cateva validari.
Sfaturi:
Numai cel ce a creat o secventa sau cel ce detine un privilegiu ALTER pot modifica secventa.
Doar numerele ce urmeaza a fi generate sunt afectate de instructiunea ALTER SEQUENCE.
Numarul cu care ncepe secventa (cel din optiunea START WITH) nu poate fi modificat cu ALTER
SEQUENCE, secventa trebuie ntrerupta si recreata pentru a rencepe cu alt numar.
Sunt realizate cateva validari. De exemplu, nu poate fi fixata o noua valoare MAXVALUE care este
mai mica decat valoarea curenta a numarului generat de secventa.
SQL> ALTER SEQUENCE dept_deptno
2
INCREMENT BY 1
3
MAXVALUE 90
4
NOCACHE
5
NOCYCLE;
ALTER SEQUENCE dept_deptno
*
ERROR at line 1:
ORA-04009: MAXVALUE cannot be made to be less than the current value
Stergerea unei secvente
Stergerea unei secvente din dictionarul de date folosind instructiunea DROP SEQUENCE
Odata stearsa, secventa nu mai poate fi referita
SQL> DROP SEQUENCE dept_deptno;
Sequence dropped.
Ce este un index?
Ce este un index?
Un index este un obiect schema care mbunatateste regasirea nregistrarilor folosind un pointer.
Indecsii pot fi creati explicit sau automat.
Un index furnizeaza un acces direct si rapid la nregistrarile unei baze de date. Scopul utilizarii
indecsilor este reducerea numarului de citiri/scrieri pe disc, prin folosirea unei cai indexate pentru a
localiza mai rapid datele. Indexul este automat folosit si ntretinut de serverul Oracle. Odata creat
indexul, nu este necesara nici o interventie din partea utilizatorului.
Indecsii sunt logic si fizic si sunt independenti de bazele de date pe care le indexeaza. Acest
lucru nseamna ca indecsii pot fi creati sau stersi oricand fara nici un efect asupra bazelor de date sau a
altor indecsi.
Nota: Cand este sters un tabel, indecsii corespunzatori sunt de asemenea stersi.
Pentru mai multe informatii, vezi:
Oracle Server Concepts Manual, Release 8.0, sectiunea Schema Objects, Indexes.
Cum sunt creati indecsii?
Automat
- cand este definita o cheie primara (PRIMARY KEY) sau unica (UNIQUE KEY) n definitia
unui tabel.
Manual
- utilizatorii pot crea indecsi mecanic pentru a accelera accesul la nregistrarile bazelor de date.
Confirmarea indecsilor
USER_INDEXES contine numele indexului si unicitatea lui.
Componenta USER_IND_COLUMNS contine numele indexului, numele bazei de date si numele
campului.
SQL> SELECT ic.index_name, ic.column_name,
ic.column_position col_pos, ix.uniques
FROM user_indexes ix, user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = EMP;
Confirmarea indecsilor
Confirmarea indecsilor existenti se realizeaza prin vizualizarea lui USER_INDEXES. De
asemenea se pot verifica campurile implicate ntr-o indexare prin interogarea lui
USER_IND_COLUMNS.
Exemplul urmator afiseaza toti indecsii creati anterior, numele campurilor afectate si unicitatea
n baza de date EMP.
INDEX_NAME
EMP_EMPNO_PK
EMP_ENAME_IDX
COLUMN_NAME
EMPNO
ENAME
COL_POS
UNIQUENES
1 UNIQUE
1 NONUNIQUE
Sfaturi:
Obiectul nu trebuie sa fie continut n package.
Numele unui sinonim privat trebuie sa fie diferit de numele celorlalte obiecte detinute de acelasi
utilizator.
Pentru mai multe informatii, vezi:
Oracle Server SQL Reference, Release 8.0, CREATE SYNONYM.
Crearea si stergerea sinonimelor
Crearea unui nume mai scurt pentru DEPT_SUM_VU.
SQL> CREATE SYNONYM d_sum
FOR dept_sum_vu;
Synonym Created.
Stergerea unui sinonim
SQL> DROP SYNONYM d_sum;
Synonym dropped.
Secvente
Generatorul de secvente poate fi folosit pentru a genera automat numere pentru nregistrarile bazelor de
date. Aceasta facilitate poate salva timp si reduce din codul necesar aplicatiei.
O secventa este un obiect al bazelor de date care poate fi folosit si de alti utilizatori n afara celui care a
creat-o. Informatii despre secvente pot fi gasite n baza de date USER_SEQUENCES.
Pentru a folosi o secventa, referirea ei se face cu pseudocampurile NEXTVAL si CURRVAL.
Referirea urmatorului numar din secventa prin sequence.NEXTVAL.
Returnarea numarului curent disponibil prin sequence.CURRVAL.
Indecsi
Indecsii sunt folositi pentru a optimiza interogarile.
Utilizatorii pot vizualiza definitiile indecsilor n USER_INDEXES.
Un index poate fi sters de cel care l-a creat sau de un utilizator cu privilegiul DROP ANY INDEX prin
instructiunea DROP INDEX.
Sinonime
DBA pot crea sinonime publice si utilizatorii pot crea sinonime private prin folosirea instructiunii
CREATE SYNONYM. Sinonimele reprezinta nume mai scurte sau nume alternative pentru obiecte.
Stergerea sinonimelor se realizeaza prin instructiunea DROP SYNONYM.
Lucrare practica
Se va crea o secventa pentru a fi folosita mpreuna cu baza de date DEPARTMENT.
Se vor crea de asemenea indecsi impliciti si expliciti.
1. Sa se creeze o secventa ce va fi folosita mpreuna cu cheia primara a tabelei DEPARTMENT.
Secventa trebuie sa nceapa cu 60 sisa aiba valoarea maxima 200. Incrementul secventei este de 10
numere. Numele secventei va fi DEPT_ID_SEQ.
2. Sa se afiseze urmatoarele informatii despre secventa: nume, valoarea maxima, marimea
incrementului si ultimul numar creat. Numele fisierului creat va fi p13q2.sql.
SEQUENCE_NAME
---------------------------CUSTID
DEPT_ID_SEQ
ORDID
PROID
MAX_VALUE
INCREMENT_BY
LAST_NUMBER
------------------------------------------------------ ---------------------------1.000E+27
1
109
200
1
60
1.000E+27
1
622
1.000E+27
1
200381