Sunteți pe pagina 1din 5

GESTIUNEA OBIECTELOR BAZEI DE DATE

Obiectiv: Crearea obiectelor necesare unei aplicaţiei denumită INVENTORY. In această


lecţie se va utiliza tablespace-ul INVENTORY creat în lecţia anterioară (pentru server-ul
ASE acest tablespace există deja).

Interfaţa Enterprise Manager Console poate fi accesată utilizând


http://37.120.250.20:5500/em pentru server-ul ASE. Numele bazei de date este oracle si
portul 1521.
Pentru instanta locala (masina virtuala):
Enterprise manager console http://xpone:1158/em
Instanta BD
host: xpone
port 1521
service name: orcl

Pentru conexiunea in SQL Developer folositi urmatoarele detalii in fereastra New


database Connection (click dr pe Connection-> New Connection):

Connection Name: numele Dvs


Username: DBA1_NUME
Parola: oracle
Server Masina virtuala
Host: 37.120.250.20 Host: xpone
Port 1521 Port: 1521
Service_name: oracle Service_name: orcl

1. Vă conectaţi în Enterprise Manager cu utilizatorul creat în lecţia anterioară


(DBA1_NUME) .

2. In tablespace-ul INVENTORY tablespace, creaţi tabela PRODUCT_MASTER astfel:


a) Selectaţi Schema > Database Objects > Tables.
b) Click Create.
c) Lăsaţi opţiunile implicite Standard, Heap Organized permanent, şi click
Continue.
d) Introduceţi numele tabelei PRODUCT_MASTER şi alegeţi ca Tablespace
INVENTORY.
e) Introduceţi primele cinci coloane astfel:
PRODUCT_ID number(7).
PRODUCT_NAME varchar2(50) NOT NULL
CODE varchar2(10) NOT NULL
REORDER_THRESHOLD number(5)
COST number(5,2)

1
f) Click pe Add 5 Table Columns, şi adăugaţi coloana PRICE number(5,2)
g) Click pe tab-ul Constraints.
h) Alegeţi din lista drop-down opţiunea PRIMARY şi click Add.
i) Introduceţi numele restricţiei PK_INV în caseta Name.
j) Alegeţi coloana PRODUCT_IDpentru aplicarea restricţiei de cheie primară
primary key. Apoi click Continue.
k) Din lista drop-down alegeţi tipul restricţiei CHECK şi click Add.
l) Introduceţi numele restricţiei CHK_REORDER
m) Introduceţi condiţia reorder_threshold > 0 în caseta Check
Condition.
n) Lăsaţi implicite restul de opţiuni şi click Continue.
o) Click OK pentru crearea tabelei. Dacă apar erori, le corectaţi şi click OK.
p) Care este comanda SQL necesară pentru crearea acestei tabele, inclusiv a
restricţiilor de integritate?

3. In tablespace-ul INVENTORY, creaţi tabela PRODUCT_ON_HAND cu următoarele


coloane. Urmaţi paşii de mai sus pentru acest lucru:
PRODUCT_ID number(7). Pe această coloană adăugaţi o restricţie de tipul
foreign key pentru legătura cu coloana PRODUCT_ID din tabela
PRODUCT_MASTER.
QUANTITY number(5)
WAREHOUSE_CITY varchar2(30)
LAST_UPDATE date

4. In tablespace-ul INVENTORY, creaţi tabela OBSOLETE_PRODUCTS.


PRODUCT_ID number(7). Adăugaţi restricţia primary key.
PRODUCT_NAME varchar2(50) Not Null
CODE varchar2(20) Not Null
COST number(5,2)
PRICE number(5,2)

5. In tablespace-ul INVENTORY, creaţi un index denumit OBS_CODE pe coloana CODE


din tabela OBSOLETE_PRODUCTS. Alegeţi tipul de index B-tree sau Bitmap.
a) Explicaţi decizia Dvs pentru această alegere ……………………………….
b) Selectaţi Schema > Database Objects > Indexes, click Create.
c) Introduceţi numele OBS_CODE
d) Lăsaţi opţiunile implicite (Default for schema).
e) Introduceţi numele tabelei OBSOLETE_PRODUCTS
f) Click Populate Columns.
g) Introduceţi 1 la opţiunea ORDER pentru coloana CODE.
h) Click Show SQL, pentru a vizualiza codul SQL generat şi apoi click Return.
i) Click OK pentru a crea index-ul.
j) Care este comanda SQL necesară pentru crearea acestui index?

2
6. In tablespace-ul INVENTORY, creaţi un index denumit PROD_NAME_CODE
combinat pe coloanele PRODUCT_NAME şi CODE din tabelele PRODUCT_MASTER.

7. In tablespace-ul INVENTORY pentru a crea un index combinat denumit


POH_PROD_ID_QTY pe coloanele PRODUCT_ID şi QUANTITY din tabela
PRODUCT_ON_HAND.
a) In fereastra SQL Developer introduceţi următoarea comandă:
create index poh_prod_id_qty on
product_on_hand(product_id, quantity);

8. Primiţi de la utilizatorii aplicaţiei INVENTORY o cerere de modificare a tabelei


PRODUCT_MASTER pentru adăugarea a două coloane: PRIMARY_SOURCE
varchar2(50)şi SECONDARY_SOURCE varchar2(50). Care este comanda SQL
prin care se poate realize acest obiectiv? Puteţi să utilizaţi şi Enterprise Manager Console
pentru a face acest lucru:
a) Selectaţi Schema > Database Objects > Tables.
b) Lăsăţi opţiunile implicite pentru caseta Schema şi apoi click Go.
c) Selectaţi tabela PRODUCT_MASTER şi click Edit.
d) Introduceţi PRIMARY_SOURCE iîn caseta Name şi setaţi Data Type la
VARCHAR2 şi Size la 50.
e) Introduceţi SECONDARY_SOURCE cu opţiunile de Data Type - VARCHAR2,
şi Size - 50.
f) Click Show SQL.
g) Click Return şi apoi click Apply.

9. Primiţi o altă cerere pentru aplicaţia INVENTORY: tabela OBSOLETE_PRODUCTS


trebuie ştearsă, iar în tabela PRODUCT_MASTER trebuie adăugată coloana OBSOLETED
cu tipul de date DATE. Realizaţi aceste obiective fie prin comenzi SQL fie prin EM. Care
este opţiunea din comanda DROP TABLE care permite eliminarea restricţiilor de
integritate referenţiale?
a) Selectaţi Schema > Database Objects > Tables.
b) Lăsăţi opţiunile implicite pentru caseta Schema şi apoi click Go.
c) Selectaţi tabela OBSOLETE_PRODUCTS şi click Delete With Options.
d) Lăsăţi opţiunile implicite pentru DROP, şi click Show SQL pentru a vizualiza
opţiunile CASCADE CONSTRAINTS.
e) Click Return, şi click Yes.
f) Selectaţi tabela PRODUCT_MASTER şi click Edit.
g) In caseta Name introduceţi OBSOLETED, iar tipul de date (Data Type) -
DATE.
h) Click Apply.

10. Primiţi o altă cerere pentru aplicaţia INVENTORY să realizaţi o tabelă virtuală
denumită WAREHOUSE_VW:
a) Selectaţi Schema > Database Objects > Views.
b) Click Create.

3
c) La nume introduceţi WAREHOUSE_VW.
d) In caseta de text Query Text introduceţi comanda pentru crearea tabelei
virtuale:
select product_name, quantity, warehouse_city
from product_master pm, product_on_hand poh
where pm.product_id = poh.product_id
e) Click OK.

11. Primiţi o semnalare din partea utilizatorilor aplicaţiei în care vi se cere să opţimizaţi
execuţia unei cereri care rulează des. Trebuie mai întâi să vedeţi timpul de execuţie
pentru aceasta. Mai intâi rulaţi un script pentru a încărca date in tabela
PRODUCT_MASTER. Apoi rulaţi interogarea respectivă de câteva ori pentru a stabili un
timp mediu de execuţie.
a) Pentru popularea cu înregistrări executaţi scriptul lab_07_11_a.sql in SQL
Developer
b) Pentru rularea interogării executaţi scriptul lab_07_11_b.sql in SQL
Developer
c) Executaţi ultimul script de mai multe ori pentru a stabili timpul mediu de
răspuns. Observaţi că execuţia durează câteva secunde. Pentru a reduce timpul de
execuţie puteţi să creaţi un index pe coloana CODE astfel:
d) Selectaţi Schema > Database Objects > Indexes.
e) Click Create.
f) Introduceţi CODE_FUNC în caseta Name.
g) Lăsăţi opţiunile implicite pentru caseta Schema şi apoi click Go.
h) Introduceţi numele tabelei PRODUCT_MASTER
i) Click Populate Columns.
j) Click Add Column Expression.
k) In caseta Column Name introduceţi upper(substr(code,5,2))
l) Introduceţi 1 în caseta Order .
m) Click Show
n) Click Return.
o) Click OK.
p) Rulaţi din nou cererea pentru a observa dacă apare vreo îmbunătăţire.

12. Utilizaţi SQL Developer pentru a vizualiza informaţii din dicţionarul de date
referitoare la obiectele create anterior.
a) Doriţi să vizualizaţi informaţii legate de obiectele la care utilizatorul curent are
acces, deci puteţi să utilizaţi tabele virtuale din dicţionar care au prefixul ALL.
Pentru a vizualiza tabelele virtuale care permit obţinerea de informaţii despre obiecte
putem utiliza ALL_OBJ%
SELECT * FROM dictionary
WHERE table_name like 'ALL_OBJ%'
ORDER BY table_name;
b) Utilizaţi tabela virtuală ALL_OBJECTS pentru a vizualiza detalii legate de
obiectele la care utilizatorul curent are acces sau tabela virtuală USER_OBJECTS
pentru a vizualiza obiectele create de utilizatorul curent.

4
f) Utilizaţi şi alte tabele virtuale, de exemplu: USER_TABLES,
USER_INDEXES, USER_CONSTRAINTS, USER_VIEWS. Răspundeţi la
următoarele întrebări:
Câte tabele sunt în schema utilizatorului curent? __________________
Câţi indecşi sunt în schema utilizatorului curent? __________________
Câte restricţii de integritate sunt în schema utilizatorului curent? _____________
Câte tabele virtuale sunt în schema utilizatorului curent? __________________