Professional Documents
Culture Documents
FACULTATEA DE INGINERIE
Gheorghe Hazi
BAZE DE DATE II
(ORACLE)
Bacău - 2007
Baze de date Oracle
CUPRINS
1. Introducere ............................................................................................................4
1.1. Caracteristici principale ale bazei de date Oracle...........................................4
1.2. Concepte şi facilităţi ale bazei de date Oracle................................................6
2. Arhitectura bazei de date Oracle..........................................................................10
2.1. Structura fizică a bazei de date......................................................................10
2.2. Structura logică a bazei de date.....................................................................11
2.3. Instanţa Oracle..............................................................................................12
2.4. Procesarea instrucţiunilor SQL.....................................................................16
3. Unelte de bază pentru administrare......................................................................18
3.1. Oracle Universal Installer (OUI)...................................................................18
3.2. Oracle Database Configuration Assistant (DBCA).......................................19
3.3. SQL Plus........................................................................................................20
3.4. Oracle Enterprise Manager (OEM)...............................................................24
4. Managementul unei instanţe oracle .....................................................................26
4.1. Parametrii de iniţializare...............................................................................26
4.2. Pornirea şi oprirea bazei de date...................................................................29
5. Crearea unei baze de date…………………………………………………….....32
5.1. Cerinţe pentru crearea unei baze de date.......................................................32
5.2. Crearea manuală a bazei de date...................................................................33
6. Dicţionarul bazei de date şi vederi.......................................................................38
6.1. Obiecte ale bazei de date...............................................................................38
6.2. Vederi statice ale bazei de date......................................................................39
6.3. Vederi dinamice ale bazei de date.................................................................46
7. Managementul fişierelor bazei de date.................................................................50
7.1. Fişierele de control........................................................................................50
7.2. Fişierele jurnal (redo log)..............................................................................52
7.3. Tablespace şi fişiere de date..........................................................................55
8. Managementul tabelelor şi a datelor.....................................................................58
8.1. Tipuri de date.................................................................................................58
8.2. Tipuri de tabele.............................................................................................60
8.3. Crearea unei tabele.........................................................................................60
8.4. Specificarea clauzelor de stocare...................................................................62
8.5. Modificarea şi ştergerea tabelelor.................................................................63
8.6. Managementul indecşilor..............................................................................65
9. Integritatea datelor şi restricţii în baza de date......................................................67
9.1. Metode de control a integrităţii datelor..........................................................67
9.2. Stări ale restricţiilor........................................................................................67
9.3. Verificarea restricţiilor...................................................................................68
9.4. Utilizarea cheilor în tabele.............................................................................68
9.5. Crearea, modificarea şi ştergerea restricţiilor................................................68
Cuprins
-2-
Baze de date Oracle
Bibliografie.........................................................................................................127
Cuprins
-3-
Baze de date Oracle
1. INTRODUCERE
În general, o bază de date reprezintă o colecţie de date tratate unitar. Scopul unei
baze de date este acela de a stoca şi regăsi informaţiile. Serverul de bază de date este
soluţia prin care se rezolvă managementul informaţiei. De cele mai multe ori un server
manipulează o cantitate mare de informaţii, cu acces simultan a mai multor utilizatori a
aceloraşi informaţii. Baza de date previne accesul neautorizat şi oferă soluţii eficiente
pentru recuperarea informaţiilor în cazul unor incidente.
Baza de date Oracle a apărut în versiunea 1 în anul 1978. Ea a fost scrisă în
limbaj de asamblare şi rula pe sisteme PDP-11 (în România Independent şi Coral) pe
sisteme de operare RSX cu 128 k memorie. Versiunea 2, prima versiune comercială, a
apărut în 1979. Această versiune a fost prima baza de date relaţională bazată pe SQL.
Firma a luat numele de Oracle în 1982. Ultimele versiuni au apărut în 1998 (versiunea
8), 2001 (versiunea 9), 2003 (versiunea 10g).
În acest curs vom studia versiunea 10 g.
Tabelul 1.2
Caracteristici principale baza de date Oracle 10 g
Limite ale bazei d date
Caracteristică Tip limită Valoare
Mărimea blocului Minim 2048 bytes
bazei de date Maxim 32 K
Mărime fişier bază Maxim Limita maximă admisă de SO
de date uzual 222 x 4 M
Fişiere de control Minim 1 – Se recomandă 2 sau mai
multe stocate pe discuri fizice
diferite
Număr de fişiere al Maxim/tablespace 1022
bazei de date Maxim pe baza de 65533
date
Tablespace (spaţii Număr maxim pe 64 K
pentru tabele) bază de date Nu poate depăşi numărul de
fişiere al bazei de date
Introducere
-4-
Baze de date Oracle
Tabelul 1.3
Caracteristici principale baza de date Oracle 10 g
Limite logice ale bazei de date
Caracteristică Tip limită Valoare
Număr de coloane Maxim/tabelă 1000
Restricţii Maxim/coloană nelimitat
Subqueries Maxim de nivele Nelimitat în clauza FROM
într-o interogare 255 în clauza WHERE
SQL
Linii Număr maxim într- Nelimitat
o tabelă
Număr tabele Maxim/bază de Nelimitat
date
Număr utilizatori Maxim 2147483638
Introducere
-5-
Baze de date Oracle
date, fişierele de date, fişierele jurnal (redo log). De obicei, din motive de siguranţă,
există mai multe copii ale fişierului de control. Fişierele jurnal înregistrează toate
modificările din baza de date cu scopul de a putea reface starea acesteia la un moment
dat. Şi aceste fişiere pot avea mai multe copii pe mai multe discuri.
Fiecare bază de date este împărţită logic pe mai multe tablespaceuri. Există două
tablespace utilizate de baza de date SYSTEM şi SYSAUX.
Obiectele bazei de date sunt reţinute logic într-o schemă. O schemă reprezintă
toate obiectele din baza de date deţinute de un utilizator al bazei de date. Principale
obiecte conţinute într-o schemă sunt:
¾ tabele
¾ vederi – sunt tabele virtuale rezultate ale unei interogări tip SQL
¾ indecşi
¾ clustere – o grupare de două sau mai multe tabele care folosesc
aceeaşi coloană
¾ secvenţe – sistem automat de generare a unui şir de numere cu un
anumit pas
¾ sinonime – este un alias (un nume suplimentar) pentru tabele,
secvenţe, proceduri, etc.
Introducere
-6-
Baze de date Oracle
tablespace specific ca informaţii necomise, ceilalţi utilizatori văd
informaţiile nemodificate.
- tranzacţii numai în citire – de obicei interogările reflectă situaţia la un
moment dat al bazei de date. Totuşi dacă vrem să efectuăm mai multe
interogări pe o bază de date, toate reflectând acelaşi moment, se
utilizează tranzacţii în citire.
- mecanisme de blocare – dacă o dată este modificată de un utilizator
se blochează modificarea de către alţi utilizatori până la comiterea ei
cu scopul ca toţi utilizatorii să vadă datele modificate de utilizatorii
precedenţi. Blocarea este automată, fără intervenţia utilizatorilor.
Pentru activităţi de administrare baza de date poate fi trecută în mod restrictiv
prin oprire şi deschidere cu restricţii.
Figura 1.2
Oracle Data Guard
Introducere
-8-
Baze de date Oracle
- partiţionarea tabelelor – permite segmentarea tablelor după mai multe
criterii fapt ce permite căutarea paralelă în mai multe segmente care
pot fi stocate în tablespace diferite.
- câmpuri BLOB, CLOB – în care se pot stoca fişiere binare,
nestructurate de mari dimensiuni (video, muzică, imagini, diverse
documente)
- Oracle Text – oferă un motor pentru indexarea şi regăsirea
documentelor, util pentru realizarea unor baze de date pentru stocarea
şi regăsirea documentelor
- Oracle Intermedia – oferă obiecte şi metode pentru stocarea şi
manipularea informaţiilor tip sunet, video, text.
- Oracle Spatial – oferă o serie de obiecte şi metode pentru stocarea şi
prelucrarea informaţiilor geografice
- module de securitate - permit o serie de funcţii avansate cum ar fi:
prevenirea accesului neautorizat
auditarea accesului la informaţii (pe ore, tabele, etc);
limitarea resurselor pentru un utilizator
drepturi de acces pe obiecte, mergând până la nivel de
coloană din tabel sau chiar la nivel de linie (row level security
– RLS)
drepturi de acces pe tipuri de operaţii (citire, scriere, ştergere)
- controlul integrităţii informaţiilor prin restricţiile scrise în dicţionarul
bazei de date. Restricţiile permise sunt:
NOT NULL – câmpul trebuie completat obligatoriu
UNIQUE KEY – un câmp al unei coloane dintr-un tabel nu
poate avea două valori identice
PRIMARY KEY – cheie primară în tabel, valori unice şi
nenule
FOREIGN KEY – valoarea trebuie să se regăsească ca o
cheie primară în alt tabel, numit tabel părinte
CHECK – permite stabilirea unor limite pentru valorile unui
câmp. Câmpul trebuie să satisfacă o expresie logică.
- trigere – sunt proceduri care se activează automat atunci când au loc
evenimente în baza de date (citire, scriere, înserare, modificare)
- interogări distribuite – optimizează volumul de date transferat atunci
când se efectuează interogări pe mai multe baze de date distribuite în
spaţiu
- replicarea datelor – proceduri automate pentru replicarea unor
informaţii în mai multe baze de date
- dezvoltarea de aplicaţii – se bazează pe SQL şi PL/SQL care poate fi
scris în proceduri stocate, în medii de dezvoltare proprii (Oracle
Developper) dar şi interfeţe avansate pentru Java, C++, Vizual Basic,
XML, COBOL.
- utilizarea unui număr mare de variantă de limbă, inclusiv română.
Introducere
-9-
Baze de date Oracle
Fisier
parole
Figura 2.1
Structura fizică a bazei de date
Fişierele de date conţin datele stocate în baza de date. Există două fişiere care sunt
utilizate de baza de date: SYSTEM01.DBF şi SYSAUX01.DBF şi care sunt create
automat o dată cu generarea bazei de date. În fişierul SYSTEM01.DBF se stochează
structura logică tablespace SYSTEM care conţine dicţionarul bazei de date (în mai
multe tabele) şi procedurile stocate ale bazei de date. SYSAUX01.DBF conţine
tablespace SYSAUX în care se stochează structuri mari de date utilizate intern de
ORACLE. De obicei, pentru utilizatori se creează tablespace USERS stocat în fişierul
UERS01.DBF. În procesul de funcţionare datele nu sunt scrise imediat în baza de date
ci sunt stocate în memorie (pentru rapiditate), scrierea în fişiere făcându-se în
background.
Fişierele de control conţin informaţiile necesare pentru a menţine şi pentru a
verifica integritatea bazei de date. Au implicit denumirea CONTROL01.CTL,
CONTROL02.CTL, CONTROL03.CTL, cele trei fişiere fiind identice. Numărul de
fişiere de control poate fi mai mare sau mai mic şi se recomandă stocarea lor în locuri
(harddiscuri diferite). Informaţiile stocate sunt date despre fişierele de date ale bazei de
date, fişierele redo log, numele bazei de date, etc. Sunt utilizate la deschiderea bazei de
date. De asemenea sunt utilizate la recuperarea bazei de date după incidente.
Fişierele jurnal (redo log) sunt utilizate pentru înregistrarea modificărilor efectuate
Baza de date este divizată din punct de vedere logic în mai multe unităţi numite
tablespace. Acestea grupează informaţii logice legate de obiecte la un loc. De exemplu
un tablespace grupează toate obiectele unei aplicaţii. Tablesapce pot fi gestionate de
administratori sau automat de către procesele din baza de date.
Blocurile de date sunt entităţile cele mai mici cu care operează baza de date. Un
bloc de date conţine un număr de blocuri ale sistemului de operare (de obicei 4 K).
Valorile uzuale ale dimensiunii blocului de date sunt 4096 sau 8192 bytes. Structura
unui bloc de date este dată în figura 2.2.
Extensiile sunt următorul nivel de
alocare a spaţiului în baza de date. Ele
reprezintă numărul de blocuri alăturate cu care
creşte spaţiul alocat într-un singur pas.
Segmentul reprezintă un set de extensii.
Toate datele sunt stocate în segmente. O
tabelă reprezintă cel puţin un segment de date.
Un caz particular îl reprezintă segmentul de
rollbak utilizat pentru stocarea mişcărilor
necomise.
Legătura între blocuri de date extensii şi
segment este arătată în figura 2.3.
Schema şi obiectele ei. O schemă
reprezintă o colecţie de obiecte ale bazei de
date. O schemă este proprietatea unui Figura 2.2
utilizator al bazei de date. Nu există o legătură Structura unui bloc de
date
obligatorie între tablespace şi schema, în
sensul că o schemă poate fi stocată în mai multe tablespace. O schemă poate conţine:
- tabele – reprezintă unitatea de bază în care Oracle stochează date accesibile direct
utilizatorilor. Fiecare tabelă conţine coloane şi linii.
Arhitectura bazei de date Oracle
- 11 -
Baze de date Oracle
- indecşi – reprezintă structuri opţionale asociate tabelelor care permit regăsirea
rapidă a informaţiilor. Sunt create din una sau mai multe coloane ale tabelei
asociate. Modificarea unei tabele, în sensul adăugării sau ştergerii de rânduri,
conduce automat la modificarea indecşilor.
- vederi – reprezintă o prezentare
customizată a unor informaţii din una sau
mai multe tabele. Ele reprezintă rezultatul
unei interogări în baza de date. Ca şi
tabelele, vederile pot fi modificate cu unele
restricţii. Oferă un nivel de securitate
superior, ascunzând unele informaţii (linii
sau coloane) din tabele.
- clustere – grupează una sau mai multe
tabele care au în comun o coloană şi care
adesea sunt utilizate împreună. Ca şi
indecşii, clusterele nu afectează aplicaţiile,
însă utilizarea lor creşte performanţa.
- sinonime – sunt nume suplimentare alocate
pentru tabele, vederi, secvenţe, proceduri,
funcţii, pachete de programe.
- secvenţe – reprezintă un generator automat
de numere, cu un anumit pas.
- proceduri, funcţii, pachete – module de
program scris în PL/SQL
- legături către alte baze de date – sunt Figura 2.3
definiţii ale unor legături către o bază de date Legătura între segment, extensii şi
situată în reţea (local sau internet) blocuri de date
- trigere – sunt proceduri stocate în baza de
date care se activează la evenimente specifice (înserare, modificare, ştergere,
vizulalizare)
- vederi materializate – sunt vederi care sunt stocate în baza de date, într-o schemă
separată, utilizate pentru calcule efectuate în tabele, distribuirea informaţiei, etc.
Figura 2.4
Structura memoriei utilizată de o bază de date Oracle
Fiecare utilizator conectat la baza de date rulează două module de cod: codul
specific aplicaţiei şi codul executat în baza de date. În figura 2.5 sunt reprezentate
procesele executate pentru un server configurat cu memorie dedicată fiecărui utilizator.
Oracle rulează o serie de procese proprii pentru a asigura satisfacerea cerinţelor
necesare proceselor utilizator. Procesele de pe server în combinaţie cu cele ale clientului
Oracle realizează următoarele funcţii:
• desface în componente comanda SQL trimis de aplicaţie
Arhitectura bazei de date Oracle
- 13 -
Baze de date Oracle
Figura 2.5
Procese în baza
de date Oracle
• citeşte blocurile de date în zone de memorie comune din SGA, dacă blocurile nu
erau deja încărcate în memorie
• returnează datele aplicaţiei care a emis cererea.
Pentru a realiza funcţiile necesare, baza de date rulează câteva procese numite
procese background. O instanţă Oracle poate avea mai multe procese background, însă
nu toate sunt prezente în acelaşi timp.
Procesele background pot include următoarele:
• Database Writer Process (DBWn)
• Log Writer Process (LGWR)
• Checkpoint Process (CKPT)
• System Monitor Process (SMON)
• Process Monitor Process (PMON)
• Recoverer Process (RECO)
• Job Queue Processes
• Archiver Processes (ARCn)
• Queue Monitor Processes (QMNn)
• Alte procese
În multe sisteme de operare procesele sunt pornite o dată cu lansarea instanţei
Oracle. În figura 2.6 sunt prezentate interacţiunea între diferite procese ale bazei de
date.
Database Writer Process (DBWn) – scrie în fişierele de date înregistrările din
memorie care au fost modificate. Dacă, în urma monitorizării, scrierea se face greu,
atunci pot fi activate mai multe procese de scriere (până la 20). Scrierea pe disc se face
urmând următoarele reguli:
- dacă nu există spaţiu liber în memoria cache atunci se dă o comandă de scriere
- scrierea se face periodic pentru a se apropia de checkpoint (punct de salvare),
adică apropierea între scrierea în fişiere jurnal şi scrierea în baza de date
Figura 2.6
Legătura
între
procese
Queue Monitor Processes (QMNn) - este un proces opţional pentru dacă se utilizează
facilitatea de lucru în flux. Pot fi până la 10 procese.
Cele 5 instrucţiuni SQL: SELECT, UPDATE, MERGE (selecţia datelor din din
una sau mai multe surse şi pentru a modifica sau însera date într-un tabel sau într-o
vedere), INSERT şi DELETE se execută în mod diferit. Pe lângă aceste instrucţiuni care
intră în categoria DML (Data Manipulation Language), mai sunt instrucţiuni pentru
definirea structurilor de date DDL (Data Definition Language).
Paşii la executarea unei interogări (SELECT) sunt:
• Analiza
o Caută o instrucţiune identică
o Verifică sintaxa, numele obiectelor vizate şi privilegiile (drepturile
utilizatorului)
o Blochează obiectele pe perioada analizei
o Creează şi stochează un plan de execuţie
• Execută legătura între date şi variabile
• Execută interogarea propriu-zisă
• Returnează rândurile procesului utilizator
În cazul instrucţiunilor DML paşii sunt
- Analiza şi legătura cu variabile sunt similare interogărilor
- Execuţie
Este un utilitar puternic care permite crearea interactivă a unei baze de date. Se
recomandă a fi utilizat pentru crearea bazelor de date customizate, pentru un număr
redus de instalări.
Paşii pentru crearea bazei de date sunt:
1. Conectarea la sistem cu drepturi de administrare.
2. Lansare DBCA
WINDOWS
Start > Programs > Oracle - home_name > Configuration and Migration
Tools > Database Configuration Assistant
UNIX – la prompt
dbca
3. Apare pagina Welcome. Se dă click Next.
4. Se selectează Create a Database şi se apasă Next.
5. În pagina Database Templates se poate alege
Data Warehouse, General Purpose sau Transaction Processing
Data Warehouse – se utilizează pentru stocarea volumelor de date de mari
dimensiuni, având de obicei un caracter istoric. Accesul utilizatorilor la date este
de obicei în citire.
Transaction Processing – se utilizează pentru baze de date cu un număr mare de
utilizatori care modifică datele în mod concurent.
6. În pagina Database Identification se introduce numele global al bazei de
date sub forma nume_global.nume_domeniu şi SID-ul bazei de date (Oracle
system identifier). Numele (SID-ul) bazei de date trebuie să fie unic în
domeniu. Se tastează Next.
7. În pagina Management Options se permite instalarea şi configurarea Oracle
Enterprise Manager. Dacă este instalat Oracle Management Agent, atunci se
poate selecta Use Grid Control for Database Management (adică
managementul centralizat a tuturor bazelor de date din domeniu). Se apasă
Next.
8. Se introduce parola pentru administratorii bazei de date (SYS – proprietarul
bazei de date şi SYSTEM). Poate fi setat o parolă unică sau parole separate.
Unelte pentru administrarea bazei de date
- 19 -
Baze de date Oracle
9. Se selectează opţiunea de stocare a datelor File System, Automatic Storage
Management (dacă sunt mai multe discuri fizice alocate bazei de date), sau
Raw Devices (discuri neformatate administrate de Oracle).
10. Se specifică locaţiile pentru fişierele bazei de date. Opţiunile sunt:
Use Common Location for All Database Files—Permite stabilirea unui nou
home pentru fişierele bazei de date. Şi în acest caz se poate modifica ulterior
locaţia.
Lansarea SQL Plus se face din start menu. După activare trebuie introduse
numele utilizatorului, parola şi şirul de conectare (figura 3.1):
Figura 3.1
Macheta pornire SQL Plus
Figura 3.2
Mediul SQL Plus
Figura 3.3
Pagina de început OEM
După lansare se afişează pagina din figura 3.3 din care se pot activa opţiunile
dorite.
Tabelul 4.1
Parametrii de iniţializare principali
Figura 4.1
Servicii aferente BD Oracle pentru
platformele WINDOWS
Figura 4.2
Pornire servicii în baza de date
în WINDOWS
Figura 4.3
Pornire baza de date cu SQL
Plus
Figura 4.4
Oprire baza de date cu SQL Plus
Figura 4.5
Oprire baza de date cu OEM
La crearea manuală a bazei de date se scriu scripturi manual sau automat după
care acestea se lansează secvenţial, urmărind la fiecare pas rezultatele. Înainte de
lansarea procesului de creare a bazei de date trebuie creat un fişier de iniţializare.
Conţinutul unui fişier de iniţializare:
########################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
########################################################################
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_file_multiblock_read_count=16
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
###########################################
# Database Identification
###########################################
db_domain=""
db_name=test
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=D:\oracle\product\10.2.0\admin\test\bdump
core_dump_dest=D:\oracle\product\10.2.0\admin\test\cdump
user_dump_dest=D:\oracle\product\10.2.0\admin\test\udump
###########################################
# File Configuration
###########################################
control_files=("D:\oracle\product\10.2.0\oradata\test\control01.ctl",
"D:\oracle\product\10.2.0\oradata\test\control02.ctl",
"D:\oracle\product\10.2.0\oradata\test\control03.ctl")
db_recovery_file_dest=D:\oracle\product\10.2.0\flash_recovery_area
db_recovery_file_dest_size=2147483648
###########################################
# Job Queues
###########################################
job_queue_processes=10
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.1.0
###########################################
# NLS
###########################################
nls_language="ROMANIAN"
nls_territory="ROMANIA"
###########################################
# Processes and Sessions
###########################################
processes=150
###########################################
# SGA Memory
###########################################
sga_target=167772160
###########################################
# Security and Auditing
###########################################
audit_file_dest=D:\oracle\product\10.2.0\admin\test\adump
remote_login_passwordfile=EXCLUSIVE
###########################################
# Shared Server
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=testXDB)"
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=16777216
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1
În continuare prezentăm un exemplu de script pentru crearea unei baze de date.
A. Fişierul de comenzi (BAT) principal:
mkdir D:\oracle\product\10.2.0\admin\test\adump
mkdir D:\oracle\product\10.2.0\admin\test\bdump
mkdir D:\oracle\product\10.2.0\admin\test\cdump
mkdir D:\oracle\product\10.2.0\admin\test\dpdump
mkdir D:\oracle\product\10.2.0\admin\test\pfile
mkdir D:\oracle\product\10.2.0\admin\test\udump
mkdir D:\oracle\product\10.2.0\db_1\cfgtoollogs\dbca\test
mkdir D:\oracle\product\10.2.0\db_1\database
mkdir D:\oracle\product\10.2.0\flash_recovery_area
mkdir D:\oracle\product\10.2.0\oradata\test
set ORACLE_SID=test
D:\oracle\product\10.2.0\db_1\bin\oradim.exe -new -sid TEST -startmode
manual -spfile
D:\oracle\product\10.2.0\db_1\bin\oradim.exe -edit -sid TEST -startmode auto -
srvcstart system
D:\oracle\product\10.2.0\db_1\bin\sqlplus /nolog
@D:\oracle\product\10.2.0\admin\test\scripts\test.sql
După crearea bazei de date reconfigurarea acesteia se face prin comenzi SQL,
cele mai utilizate fiind ALTER DATABASE, ALTER SYSTEM, ALTER SESSION.
Dicţionarul bazei de date este utilizat de Oracle pentru a găsi informaţii despre
utilizatori, obiectele din scheme şi structuri de stocare.
Orice utilizator Oracle poate accesa în citire dicţionarul pentru informaţii despre
baza de date.
Pentru vederile bazei de date s-au create sinonime publice. Mare parte din dicţionar
este reţinut în SGA pentru acces rapid. O parte dintre vederile bazei de date sunt
accesibile tuturor utilizatorilor, pe când altele sunt accesibile numai unor utilizatori.
Vederile bazei de date sunt statice şi dinamice.
Se referă la informaţiile statice ale bazei de date, care sunt reflectate de tabele.
Există trei seturi de vederi statice, prefixate ca atare:
- DBA – arată informaţii despre întreaga bază de date. Sunt accesibile numai
utilizatorilor cu privilegiul SELECT ANY TABLE. Acest privilegiu este acordat
utilizatorilor care au atribuit rolul DBA.
- ALL – arată informaţii despre toate obiectele la care utilizatorul are acces,
cuprinzând obiectele din schema proprie cât şi din alte scheme asupra cărora are
drepturi în citire.
- USER – arată informaţii numai despre obiectele utilizatorului curent. Nu sunt
necesare privilegii pentru a fi accesate.
Exemplu
SQL> select username, user_id, account_status, default_tablespace,
temporary_tablespace from dba_users;
13 înregistrări selectate.
6 înregistrări selectate.
Exemplu:
SQL> select * from dba_data_files;
FILE_NAME FILE_ID T_NAME
BYTES BLOCKS STATUS REL_FNO AUT MAXBYTES MAXBLOCKS
INCR_BY USER_BYTES USER_BLOCKS ONLINE
------------------------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\USERS01.DBF 4 USERS
125829120 15360 AVAILABLE 4 YES 3,4360E+10 4194302
160 125763584 15352 ONLINE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSAUX01.DBF 3 SYSAUX
251658240 30720 AVAILABLE 3 YES 3,4360E+10 4194302
1280 251592704 30712 ONLINE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\UNDOTBS01.DBF 2 UNDOTBS1
31457280 3840 AVAILABLE 2 YES 3,4360E+10 4194302
640 31391744 3832 ONLINE
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSTEM01.DBF 1 SYSTEM
503316480 61440 AVAILABLE 1 YES 3,4360E+10 4194302
1280 503250944 61432 SYSTEM
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\EXAMPLE01.DBF 5 EXAMPLE
104857600 12800 AVAILABLE 5 YES 3,4360E+10 4194302
80 104792064 12792 ONLINE
Exemplu
34 înregistrări selectate.
TABLE_NAME TABLESPACE_NAME
------------------------------ ------------------------------
REGIONS EXAMPLE
LOCATIONS EXAMPLE
JOBS EXAMPLE
COUNTRIES
DEPARTMENTS EXAMPLE
EMPLOYEES EXAMPLE
JOB_HISTORY EXAMPLE
7 înregistrări selectate.
11 înregistrări selectate.
Exemplu:
SQL>select * from v$NLS_Parameters
19 înregistrări selectate.
11 înregistrãri selectate.
NAME VALUE
-------------------- ----------
Fixed Size 1247684
Variable Size 62916156
Database Buffers 58720256
Redo Buffers 2945024
Dicţionarul bazei de date şi vederi
- 47 -
Baze de date Oracle
7. V$PGASTAT – Afişează informaţii despre PGA
Exemplu:
SQL> select * from v$pgastat;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
Fiecare bază de date are unul sau mai multe fişiere de control care sunt mici
fişiere binare care memorează structura fizică a bazei de date.
Aceste informaţii includ:
• Numele bazei de date
• Numele şi locaţia fişierelor de date asociate, precum şi a fişierelor jurnal (redo
log)
• Data şi ora creării bazei de date
• Informaţii despre ultimul checkpoint (punct de salvare coerentă a informaţiilor)
Fişierele de control sunt mereu disponibile atunci când baza de date este
deschisă. Fără fişierele de control deschiderea şi montarea bazei de date nu se poate
face, iar recuperarea datelor este dificilă. Fişierele de control sunt create o dată cu baza
de date, de obicei cel puţin două copii identice. Se recomandă ca aceste fişiere să fie
stocate pe discuri fizice diferite. Fişiere de control pot fi create şi ulterior.
Numele fişierelor de control sunt stabilite prin parametrul de iniţializare
CONTROL_FILES . La pornirea unei instanţe Oracle sunt deschise toate fişierele de
control listate. Instanţa deschisă întreţine şi actualizează fişierele de control.
Este bine să se facă salvări ale fişierelor de control ori de câte ori:
• se adaugă, se şterg sau se renumesc fişiere de date;
• se adaugă sau se şterg tablespace;
• se adaugă sau se şterg fişiere redo log.
Dimensiunea fişierelor de control este dată de parametrii de iniţializare
MAXDATAFILES, MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY şi
MAXINSTANCES. Modificarea acestor parametri duce la modificarea dimensiunilor
fişierelor de control.
Crearea de copii suplimentare, renumirea sau relocarea fişierelor de control se
face în următorii paşi:
• se opreşte baza de date
• se copiază un fişier de control existent într-o locaţie nouă folosind o
comandă a sistemului de opearare
• se editează parametrul CONTROL_FILES şi se adaugă noul fişier de control
sau se schimbă locaţia acestuia
• se restartează baza de date
Informaţii cu privire la locaţia fişierelor de control se pot obţine cu c-da:
SQL> SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
VALUE
--------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\CONTROL01.CTL,
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\CONTROL02.CTL,
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\CONTROL03.CTL
NAME
----------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSTEM01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\UNDOTBS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\SYSAUX01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\USERS01.DBF
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\EXAMPLE01.DBF
MEMBER
-------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO03.LOG
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO02.LOG
D:\ORACLE\PRODUCT\10.2.0\ORADATA\HAZI\REDO01.LOG
Sunt fişiere care stochează rapid toate modificările efectuate asupra bazei de
date. Fiecare instanţă este asociată unuia sau mai multor fişiere redo log pentru a o
proteja în caz de incident.
Înregistrările redo log sunt stocate iniţial în memorie într-o zonă circulară (redo
log buffer) şi sunt scrise de către procesul Lol Writer LGWR. Scrierea se realizează
atunci când o tranzacţie este comisă. O dată cu înregistrarea se scrie şi informaţia
referitoare la starea sistemului SCN (system change number) pentru a se identifica
înregistrările aferente unei tranzacţii comise.
Scrierea în fişierele jurnal se realizează de asemenea într-o manieră circulară,
aşa cum se arată în figura 7.1. Baza de date necesită minim 2 fişiere jurnal pentru a
garanta buna funcţionare. Dacă variabila ARCHIVELOG este setată, atunci într-un
fişier se scrie în timp ce celălalt este arhivat. Fişierele redo log sunt disponibile la
scriere în funcţie de modul în care funcţionează baza de date:
Figura 7.1
Scrierea înregistrărilor în fişierele
jurnal
• dacă arhivarea este dezactivată, atunci un fişier redo log plin devine
disponibil pentru rescriere după ce înregistrările modificate au fost scrise în
baza de date
• dacă arhivarea este activată, resrierea unui fişier jurnal se face după ce
înregistrările modificate au fost scrise în baza de date şi fişierul a fost arhivat
Fişierele redo log care sunt necesare pentru restaurarea bazei de date sunt fişiere
active, celelalte fiind inactive.
Pentru a proteja baza de date, Oracle permite multiplexarea fişierelor jurnal,
menţinând două sau mai multe copii ale aceluiaşi fişier în locaţii diferite. Este de
preferat ca locaţiile să fie situate pe discuri fizice diferite. Când sunt mai multe copii ale
fişierelor LGWR scrie simultan în toate copiile active. Multiplicarea fişierelor jurnal
implică noţiunea de grup care conţine mai multe copii ale unui fişier jurnal (figura 7.2).
Figura 7.2
Grupuri de fişiere jurnal
Crearea tablespace se face după crearea bazei de date. Orice bază de date are
câteva tablespace obligatorii:
• SYSTEM – conţine dicţionarul bazei de date şi segmentele de rollback
utilizate de sistem. Este administrat ca orice tablespace dar necesită privilegii
de cel mai înalt nivel.
• SYSAUX – conţine date auxiliare aferente unor componente ale bazei de
date Oracle
Pentru crearea şi administrarea tablespace se pot utiliza comenzile:
- CREATE TABLESPACE
- CREATE TEMPORARY TABLESPACE
- ALTER TABLESPACE
- ALTER DATABASE
- CREATE UNDO TABLESPACE – pentru crearea unui tablespace destinat
depunerii înregistrărilor nedefinitive (segmente ROLLBACK).
Din punct de vedere al administrării şi a modului de funcţionare există mai
multe tipuri de tablespace:
- tablespace administrate local (Locally Managed Tablespaces)
- bigfile tablespace
- temporary tablespace
- grupuri de tablespace temporare
• Poate conţine până la 32 TB date dacă blocurile sunt de 8K sau 128 TB dacă
blocurile au mărime de 32 K.
• Reduce semnificativ numărul de fişiere ale bazei de date, reducând
corespunzător dimensiunile fişierelor de control şi a SGA
• Simplifică managementul bazei de date, nemaifiind nevoie de referiri la
fişiere componente ale tablespace\
PARAMETER VALUE
------------------------------ -------------------------------
NLS_LANGUAGE ROMANIAN
NLS_TERRITORY ROMANIA
NLS_CURRENCY LEI
NLS_ISO_CURRENCY ROMANIA
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MM-RRRR
NLS_DATE_LANGUAGE ROMANIAN
NLS_SORT ROMANIAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD-MM-RRRR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MM-RRRR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY LEI
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
17 înregistrãri selectate.
Sesiune modificată.
Managementul tabelelor şi a datelor
- 60 -
Baze de date Oracle
Tabelă creată.
Figura 8.1
Specificarea atributelor
fizice ale tabelelor
PCTFREE – specifică procentul din fiecare bloc de date care este rezervat
pentru modificări ulterioare. Valori posibile între 0 şi 99%. Implicit 10%. Această
valoare rezervă 10% din fiecare bloc de date pentru modificări şi permite înserarea de
noi înregistrări până la gradul de ocupare de 90%.
PCTUSED – specifică procentul minim pe care Oracle trebuie să-l menţină
ocupat din fiecare bloc de date. Valori între 0 şi 99%, implicit 40%. Suma dintre
PCTFREE şi PCTUSED nu trebuie să depăşească 100.
INITRANS – specifică valoarea iniţială a numărului de tranzacţii concurente
alocate fiecărui bloc de date. Valori
de la 1 la 255, implicit 1.
Clauzele de stocare stabilesc cum se
stochează obiectele bazei de date, în
particular a tabelei. Clauzele
afectează atât timpul de acces, cât şi
utilizarea eficientă a spaţiului de
stocare. Clauzele posibile sunt arătate
în figura 8.2.
Figura 8.2
Specificarea
clauzelor de stocare
ale tabelelor
Tabelă creată.
Exemple:
Modificarea spaţiului liber în blocuri:
SQL> alter table divisions
pctfree 20;
Tabelã modificată.
Tabelă modificată.
Tabelă modificată.
Ştergerea unei coloane:
Tabelă modificată.
Tabelă modificată.
Tabelă modificată.
Tabelă modificată.
Ştergerea unei tabele:
SQL> drop table scott.divisions;
Index creat.
Index creat.
Index modificat.
Index eliminat.
O restricţie pentru controlul integrităţii datelor poate avea una din următoarele
stări:
• ENABLE, VALIDATE
• ENABLE, NOVALIDATE
• DISABLE, VALIDATE
• DISABLE, NOVALIDATE
O restricţie cu starea DISABLE NOVALIDATE nu este verificată. Datele sunt
prelucrate fără controlul integrităţii respective.
Cheia primară (PRIMARY KEY) şi cheia unică (UNIQUE) este pusă în practică
prin utilizarea indecşilor. Se poate controla locaţia şi tipul de index care este folosit.
Severul Oracle utilizează următoarea procedură pentru a implementa cheia unică şi
cheia primară:
- dacă restricţia este dezactivată (DISABLE), nu este necesar un index;
- dacă restricţia este activă (ENABLE) şi coloana este parte a unui index
atunci indexul este utilizat pentru crearea şi întreţinerea restricţiei;
- dacă restricţia este activă şi nu există un index pe coloană, atunci el este
creat automat.
În legătură cu cheile străine, acestea reduc posibilitatea de manevră în cazul
tabelelor legate. Pentru administratori, ştergerea unei tabele, trunchierea acesteia,
ştergerea unui tablespace care conţine o tabelă legată impune utilizarea opţiunii
CASCADE CONSTRAINTS.
Tabelă creată.
Crearea unei tablele de subunităţi:
SQL> create table subunitati
2 (cod_sub number (3) PRIMARY KEY,
3 denumire varchar2(30) not null);
Tabelă creată.
Modificarea tabelei personal şi adăugarea coloanei pentru subunităţi:
Tabelă modificată
Adăugarea unei legături între cele două tabele:
SQL> alter table personal add
2 constraint p_fk FOREIGN KEY (cod_sub) REFERENCES subunitati;
Tabelă modificată.
USER
------------------------------
TEST
SQL> select owner, table_name,constraint_name, constraint_type, status, deferrable,
deferred from user_constraints;
Apasati <ENTER>
7 înregistrãri selectate.
SQL>
Dezactivarea unei restricţii:
SQL> alter table personal disable constraint pers_val_salariu;
Tabelă modificată.
1 înregistrare creată.
Se observă că am înserat o înregistrare care încalcă restricţia salariu ∈ (1000,6000].
SQL> alter table personal enable validate constraint pers_val_salariu
*
EROARE la linia 1:
ORA-02293: (TEST.PERS_VAL_SALARIU) nu a putut fi validatã - restricţie
de verificare violată
Nu se poate activa restricţia pentru că există o înregistrare care este încălcată. Se poate
activa numai pentru înregistrările viitoare:
Tabelă modificată.
SQL> select * from personal;
Apasati <ENTER>
1 înregistrare actualizată.
SQL> alter table personal enable validate constraint pers_val_salariu;
Tabelă modificată.
Redenumirea unei restricţii:
SQL> alter table personal rename constraint SYS_C005485 to pk_pers;
Tabelă modificată.
SQL> select owner, constraint_name, constraint_type, status from
user_constraints where table_name='PERSONAL';
Apasati <ENTER>
Tabelă modificată.
Tabelă modificată.
1 înregistrare creatã.
SQL> commit;
commit
*
EROARE la linia 1:
ORA-02091: tranzacţia a fost derulată înapoi
ORA-02290: regulă de constrângere (TEST.PERS_VAL_SALARIU) violată
Aici se observă influenţa restricţiilor DEFERRED. O înregistrare s-a inserat fără a
respecta restricţiile, însă la sfârşitul tranzacţiei (COMMIT) ea a fost respinsă şi s-a făcut
ROLLBACK.
Profil creat.
Cu profilul de mai sus se impun următoarele restricţii:
- numărul de sesiuni simultane pentru utilizator – nelimitat
- într-o sesiune utilizatorul poate utiliza nelimitat timpul procesorului
- un simplu apel al utilizatorului nu poate solicita mai mult de 3000 sutimi de
secundă (30 secunde)
- o sesiune nu poate dura mai mult de 45 minute
- numărul de blocuri citite din BD este cel stabilit în profilul DEFAULT
- un simplu apel nu poate citi mai mult de 1000 blocuri
- se alocă 15 K din SGA
- într-o sesiune nu poate consuma mai mult de 5 milioane de unităţi de servire.
Funcţie creată.
SQL> CREATE PROFILE pers_prof2 LIMIT
2 FAILED_LOGIN_ATTEMPTS 5
3 PASSWORD_LIFE_TIME 60
4 PASSWORD_REUSE_TIME 60
5 PASSWORD_REUSE_MAX 5
6 PASSWORD_VERIFY_FUNCTION verify_function
Profil creat.
SQL> alter user test profile pers_prof2;
Utilizator modificat.
S-a ataşat utilizatorului test profilul pers_prof2. Profilul are următoarele
particularităţi:
- numărul de încercări înainte de blocarea contului este 5;
- durata de utilizare a parolei este 60 de zile, cu o perioadă ulterioară de 10 zile
de graţie în care aceasta poate fi schimbată;
- parola poate fi reutilizată după 60 de zile dacă s-au efectuat alte 5 modificări de
parolă între timp;
- la introducerea unei parole noi se fac verificările din funcţia
VERIFY_FUNCTION;
- blocarea parolei la parolă greşită se va face după 1/24 zile (o oră).
Utilizator creat.
Permisiune acordată.
Utilizator modificat.
Alte drepturi sau modificări ale profilului sau rolurilor acordate se face cu c-da
ALTER USER:
SQL> ALTER USER test
DEFAULT TABLESPACE data_ts
TEMPORARY TABLESPACE temp_ts
QUOTA 100M ON data_ts
QUOTA 0 ON test_ts
PROFILE clerk;
Utilizator modificat.
Ştergerea unui utilizator se face cu c-da DROP USER:
SQL> drop user test cascade;
Utilizator modificat.
Opţiunea CASCADE permite ştergerea tuturor obiectelor aflate în proprietatea
utilizatorului şi a altor legături (restricţii) în baza de date.
Obţinerea de informaţii despre utilizatori se pot obţine cu vederile:
Vedere Desriere
DBA_USERS Afişează toţi utilizatorii din baza de date
ALL_USERS Afişează utilizatorii vizibili pentru utilizatorul curent
USER_USERS Descrie utilizatorul curent
DBA_TS_QUOTAS Afişează cotele de spaţiu alocate utilizatorilor
USER_TS_QUOTAS
USER_PASSWORD_LIMITS Descrie restricţiile impuse parolei utilizatorului
RESOURCE_NAME LIMIT
-------------------------------- ----------------
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX 5
PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION
PASSWORD_LOCK_TIME ,0416
PASSWORD_GRACE_TIME 10
7 înregistrări selectate.
Permisiune acordatã.
Revocare acordată.
SQL> grant alter session to test
2 with admin option;
Permisiune acordatã.
Session altered.
Sunt anumite privilegii pe care la are implicit numai utilizatorii cu rolurile
SYSDBA sau SYSOPER: STARTUP, SHUTDOWN, ALTER DATABASE OPEN |
MOUNT, RECOVER DATABASE.
Privilegiile tip obiect sunt privilegii sau drepturi pentru a executa o acţiune
anume asupra unei tabele, vederi, secvenţe, proceduri. Câteva privilegii asupra
obiectelor sunt date în tabelul 10.2:
Tabelul 10.2
Privilegii tip obiect – Exemple
Categoria Privilegiu Utilizare
TABLE ALTER Modifică structura tabelei
DELETE Ştergere de înregistrări din
tabelă
INDEX Creează un index pentryu
tabelă
INSERT Înserează înregistrări în tabelă
SELECT Vizualizare date
UPDATE Modifică rânduri din tabelă
REFERENCES Creează o restricţie care referă
tabela (de ex. cheie străină)
PROCEDURE, EXECUTE Execută procedura sau funcţia
FUNCTION, direct
PACKAGE DEBUG Acces prin depanator la
variabile, metode şi alte tipuri
definite
Exemple:
SQL> grant select on personal to scott;
Permisiune acordată.
Exemplu: Crearea unui rol pers prin care utilizatorul are acces la tabela
employees din schema hr:
SQL>create role pers identified by hr;
Rol creat.
Permisiune acordată.
Permisiune acordată.
SQL> conn test/test@hazi
Conectat.
SQL> select first_name, last_name, salary from hr.employees;
Rol modificat.
În paragraful 3.3 s-au prezentat câteva informaţii esenţiale despre SQL Plus. Aşa
cum s-a arătat, SQL Plus este un instrument de bază în administrarea bazei de date,
precum şi în testarea interogărilor SQL. De asemenea în SQL Plus se pot obţine rapid
rapoarte formatate text, rezultate dintr-o interogare SQL.
Pentru a executa o procedură PL/SQL sau un bloc PL/SQL acesta se scrie într-
un fişier ASCII şi se execută cu c-da @fişier_sql sau se tastează direct blocul PL/SQL:
SQL> DECLARE
2 x NUMBER := 100;
3 BEGIN
4 DELETE FROM TEMP;
5 FOR i IN 1..10 LOOP
6 IF MOD (i, 2) = 0 THEN --i is even
7 INSERT INTO temp VALUES (i, x, 'i is even');
8 ELSE
9 INSERT INTO temp VALUES (i, x, 'i is odd');
10 END IF;
11 x := x + 100;
12 END LOOP;
13 END;
14 /
SQL> commit;
Confirmare finalizată.
I NUMAR PAR_IMPAR
---------- ---------- ---------------
1 100 i is odd
2 200 i is even
3 300 i is odd
4 400 i is even
5 500 i is odd
6 600 i is even
7 700 i is odd
8 800 i is even
9 900 i is odd
10 1000 i is even
10 înregistrări selectate.
SQL în Oracle
- 84 -
Baze de date Oracle
Se remarcă că un bloc PL/SQL începe cu DECLARE, dacă sunt variabile de
declarat sau cu BEGIN în caz contrar. Pentru a fi executată, după ultima linie de cod
(END) se introduce /.
Pe lângă blocuri PL/SQL pot fi create şi stocate proceduri şi funcţii
precompilate în baza de date. Acestea pot fi lansate şi referite de către orice aplicaţie
sau utilizator în funcţie de drepturile utilizatorului. Generarea acestora se face cu c-zile
SQL CREATE PROCEDURE, respectiv CREATE FUNCTION:
SQL> CREATE OR REPLACE PROCEDURE sterg_sal (nmarca IN NUMBER, nr_sal
OUT NUMBER) AS
2 BEGIN
3 DELETE FROM personal
4 WHERE personal.marca = nmarca;
5 Select count(*) into nr_sal from personal;
6 END;
7 /
Procedură creată.
Să considerăm următorul bloc PL/SQL care apelează procedura:
SQL> DECLARE nr_salariati number;
2 BEGIN
3 sterg_sal(110,nr_salariati);
4 DBMS_OUTPUT.PUT_LINE('Nr. salariaţi rămaşi: '
||TO_CHAR(nr_salariati));
5* END;
/
Nr. salariaţi rămaşi: 20
TEXT
-----------------------------------------------------------------
PROCEDURE sterg_sal (nmarca IN NUMBER, nr_sal OUT NUMBER) AS
BEGIN
DELETE FROM personal
WHERE personal.marca = nmarca;
Select count(*) into nr_sal from personal;
END;
6 înregistrări selectate.
Apelul unei proceduri stocate poate fi făcut în mai multe moduri, de exemplu, prin
utilizarea variabilelor de legătură:
SQL> variable nr_salariati number;
SQL> call sterg_sal(120,:nr_salariati);
SQL în Oracle
- 85 -
Baze de date Oracle
11.2. Particularităţi SQL în Oracle
'NUMELEESTE:'||NUME
-------------------------------------------
Numele este: Mihailă Alexandru
- operatori pentru mulţimi
o UNION – înregistrări distincte din mai multe interogări
o UNION ALL - înregistrări din mai multe interogări, inclusiv
multiple
SQL în Oracle
- 86 -
Baze de date Oracle
o INTERSECT – înregistrări distincte aflate în două interogări
o MINUS – înregistrări distincte aflate în prima interogare şi negăsite
în cea de-a doua
- Operatori definiţi de utilizator cu c-da CREATE OPERATOR:
SQL> CREATE FUNCTION eq_f(a VARCHAR2, b VARCHAR2) RETURN NUMBER
AS
2 BEGIN
3 IF a = b THEN RETURN 1;
4 ELSE RETURN 0;
5 END IF;
6 END;
7 /
Funcţie creată.
Apasati <ENTER>
EQ_OP('4','3')
--------------
0
Se observă că operatorul EQ_OP seamănă cu o funcţie.
Funcţii în SQL Oracle
Există un număr foarte mare de funcţii, împărţite în mai multe categorii:
- funcţii numerice: ACOS, ASIN, LN, MOD, POWER, etc
- funcţii pentru şiruri de caractere: CHR, CONCAT, REPLACE, etc
- funcţii pentru seturi de caractere naţionale: NLS_CHARSET_DECL_LEN,
NLS_CHARSET_ID, NLS_CHARSET_NAME
- funcţii pentru şiruri de caractere care returnează valori numerice: ASCII,
INSTR, LENGTH, etc
- funcţii pentru dată şi timp: SYSDATE, MONTH_BETWEEN, NEW_TIME,
LAST_DAY, SYSTEMESTAMP, etc
- funcţii de comparare generală: GREATEST, LEAST
- funcţii de conversie: ASCII, CAST, CONCAT, TO_CHAR, TO_NUMBER,
SCN_TO_TIMESTAMP, etc
- funcţii pentru obiecte de mari dimensiuni: EMPTY_BLOB, EMPTY_CLOB
- funcţii pentru mulţimi: SET, CARDINALITY, etc
- funcţii pentru interogări ierarhice: SYS_CONNECT_BY_PATH
- funcţii pentru codare şi decodare: DECODE, VSIZE, etc
- funcţii pentru tratarea valorilor nule (NULL): COALESCE, NVL, etc
- funcţii pentru informaţii despre mediu: SYS_CONTEXT, USER, etc
SQL în Oracle
- 87 -
Baze de date Oracle
- alte funcţii
Condiţii în SQL Oracle
Principalele condiţii şi prioritatea lor sunt date în tabelul 11.1:
Tabelul 11.1
Condiţii şi prioritatea lor
Prioritate Condiţie Utilizare
1 =, !=, <, >, <=, >= Comparaţie
2 IS [NOT] NULL, LIKE, Comparaţie
[NOT] BETWEEN,
[NOT] IN, EXISTS, IS OF tip
3 NOT Negare logică
4 AND ŞI logic
5 OR SAU logic
Exemple de utilizare a condiţiilor:
SQL> select first_name, last_name, department_id, salary from
employees
2* where last_name like 'A%';
Apasati <ENTER>
Apasati <ENTER>
Apasati <ENTER>
SQL în Oracle
- 88 -
Baze de date Oracle
7 înregistrări selectate.
Apasati <ENTER>
DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
10 Administration
20 Marketing
30 Purchasing
40 Human Resources
50 Shipping
60 IT
70 Public Relations
80 Sales
90 Executive
100 Finance
110 Accounting
11 înregistrări selectate.
Apasati <ENTER>
SQL în Oracle
- 89 -
Baze de date Oracle
3 Baer Hermann 70 10000
3 Mavris Susan 40 6500
3 Whalen Jennifer 10 4400
2 De Haan Lex 90 17000
3 Hunold Alexander 60 9000
4 Ernst Bruce 60 6000
4 Austin David 60 4800
4 Pataballa Valli 60 4800
4 Lorentz Diana 60 4200
2 Russell John 80 14000
Apasati <ENTER>
Apasati <ENTER>
SQL în Oracle
- 90 -
Baze de date Oracle
NUME
----------------------------------------------
Abel Ellen
Alexa Valentin
Ande Sundar
Atkinson Mozhe
Austin David
Baer Hermann
Baida Shelli
Banda Amit
Bates Elizabeth
Bell Sarah
Bernstein David
Bissot Laura
În acest exemplu sunt reunite numele unor persoane aflate în două tabele
din scheme diferite: hr.employees şi test.personal. Se remarcă că pentru clauza
ORDER BY este necesar ca numele coloanelor rezultate să fie identice.
TO_BINARY_FLOAT(3)
------------------
3,0E+000
Interogări cu legături
Sunt interogări cu clauza WHERE condiţie. Interogările cu legături sunt
de mai multe tipuri:
- equijoins – conţine o relaţie de tip egalitate în condiţie
SQL> SELECT last_name, job_id, departments.department_id,
department_name
2 FROM employees, departments
3 WHERE employees.department_id = departments.department_id
4 ORDER BY last_name;
Apasati <ENTER>
SQL în Oracle
- 91 -
Baze de date Oracle
Apasati <ENTER>
SQL în Oracle
- 92 -
Baze de date Oracle
162
133
136
.........................................................
Se observă că în exemplul de mai sus sunt returnate şi id-urile salariaţilor care
nu sunt şefi.
- antijoins – sunt returnate înregistrările din partea stângă a restricţiei care nu
au corespondenţă în dreapta
SQL> SELECT e.employee_id, e.last_name, l.city
2 FROM employees e, locations l, departments d
3 WHERE e.department_id NOT IN
4 (SELECT d.department_id FROM departments
5 WHERE d.location_id = 1700)
6 AND (l.location_id=d.location_id )
7 AND (e.department_id=d.department_id)
8* ORDER BY last_name
SQL> /
Apasati <ENTER>
SQL în Oracle
- 93 -
Baze de date Oracle
10 Administration 200 1700
90 Executive 100 1700
100 Finance 108 1700
40 Human Resources 203 2400
60 IT 103 1400
20 Marketing 201 1800
70 Public Relations 204 2700
30 Purchasing 114 1700
80 Sales 145 2500
50 Shipping 121 1500
11 înregistrãri selectate.
Utilizare subqueries
În exemplele precedente s-au utilizat de mai multe ori subqueries. Mai arătăm un
exemplu în care sunt listaţi salariaţii cu salariul mai mare ca media acestuia pe
departament:
SQL> select department_id, avg(salary)
2 from employees
3* group by department_id
SQL> /
Apasati <ENTER>
DEPARTMENT_ID AVG(SALARY)
------------- -----------
30 3914,28571
100 8600
7000
20 9500
70 10000
90 19333,3333
110 10150
50 3475,55556
40 6500
80 8955,88235
10 4400
60 5760
12 înregistrări selectate.
SQL> SELECT department_id, last_name, salary
2 FROM employees x
3 WHERE salary > (SELECT AVG(salary)
4 FROM employees
5 WHERE x.department_id = department_id)
6 ORDER BY department_id;
Apasati <ENTER>
SQL în Oracle
- 94 -
Baze de date Oracle
Împachetare creată.
SQL> CREATE OR REPLACE PACKAGE BODY emp_mgmt AS
2 tot_emps NUMBER;
3 tot_depts NUMBER;
4 FUNCTION hire
5 (last_name VARCHAR2, job_id VARCHAR2,
6 manager_id NUMBER, salary NUMBER,
7 commission_pct NUMBER, department_id NUMBER)
8 RETURN NUMBER IS new_empno NUMBER;
9 BEGIN
10 SELECT employees_seq.NEXTVAL
11 INTO new_empno
12 FROM DUAL;
13 INSERT INTO employees
Împachetare modificată.
SQL> ALTER PACKAGE hr.emp_mgmt
2 COMPILE BODY;
PL/SQL este o extensie procedurală a SQL, într-un limbaj din generaţia 4 (4GL).
Mediul oferă facilităţi avansate precum: încapsulare, suprascriere a procedurilor,
colecţii obiecte pe tipuri, tratarea excepţiilor, etc.
Principalele avantaje ale utilizării mediului PL/SQL sunt:
- integrare naturală cu SQL;
- performanţe mărite (a se vedea figura 12.1). Din figură se observă că există
mai multe tehnici de a interoga o bază de date: prin SQL emise de aplicaţii,
Programe stocate în baza de date
- 97 -
Baze de date Oracle
prin SQL incluse în mediul PL/SQL şi prin proceduri PL/SQL stocate în
baza de date, acestea
fiind apelate de la
distanţă (Remote
Procedure Call –
RPC);
- productivitate
ridicată – modulele
PL/SQL pot fi
integrate direct în
mediile de
dezvoltare Oracle,
ca de exemplu
Oracle Forms;
- portabilitate în orice
sistem de operare
Figura 12.1 care acceptă Oracle;
Integrarea PL/SQL cu BD
- securitate ridicată în
Oracle
cazul procedurilor
stocate, o parte importantă a acestora fiind invizibilă utilizatorilor;
- acces la toate pachetele livrate cu baza de date;
- poate fi utilizat la crearea de aplicaţii Web sau servere de pentru pagini de
internet;
Modulele PL/SQL, pot fi întâlnite ca blocuri PL/SQL, în proceduri stocate sau în
trigere ale bazei de date.
Structura unui bloc PL/SQL este următoarea:
[DECLARE
-- declaraţii]
BEGIN
-- instrucţiuni
[EXCEPTION
-- handlers]
END
Figura 12.2
Structuri de
control
DECLARE
plsql_block VARCHAR2(500);
BEGIN
-- de notat că ; trebuie inclus între ghilimele
plsql_block := 'BEGIN raise_emp_salary(:cvalue, :cname, :amt);
END;';
EXECUTE IMMEDIATE plsql_block USING 110, 'DEPARTMENT_ID', 10;
EXECUTE IMMEDIATE 'BEGIN raise_emp_salary(:cvalue, :cname,
:amt); END;'
USING 112, 'EMPLOYEE_ID', 10;
END;
/
DECLARE
sql_stmt VARCHAR2(200);
v_column VARCHAR2(30) := 'DEPARTMENT_ID';
dept_id NUMBER(4) := 46;
dept_name VARCHAR2(30) := 'Special Projects';
mgr_id NUMBER(6) := 200;
loc_id NUMBER(4) := 1700;
BEGIN
EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';
sql_stmt := 'INSERT INTO departments VALUES (:1, :2, :3, :4)';
EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, mgr_id,
loc_id;
EXECUTE IMMEDIATE 'DELETE FROM departments WHERE ' || v_column
|| ' = :num' USING dept_id;
EXECUTE IMMEDIATE 'ALTER SESSION SET SQL_TRACE TRUE';
EXECUTE IMMEDIATE 'DROP TABLE bonus';
END;
/
În PL/SQL, o eroare este numită excepţie. Ele pot fi definite intern (prin rutine
sistem) sau de către utilizator. Exemple de excepţii interne sunt împărţirea la zero sau
depăşirea memoriei, acestea având numele de ZERO_DIVIDE, respectiv
STORAGE_ERROR.
Când se întâlneşte o eroare este ridicată o excepţie. Definirea unei excepţii
utilizator trebuie ridicată explicit prin instrucţiunea RAISE.
DECLARE
stock_price NUMBER := 9.73;
net_earnings NUMBER := 0;
pe_ratio NUMBER;
BEGIN
pe_ratio := stock_price / net_earnings;
DBMS_OUTPUT.PUT_LINE('Price/earnings ratio = ' || pe_ratio);
EXCEPTION – zona de prelucrare a excepţiilor
-- Numai o ramură WHEN este executată
WHEN ZERO_DIVIDE THEN – interceptează împărţirea la zero
DBMS_OUTPUT.PUT_LINE('Company must have had zero
earnings.');
pe_ratio := NULL;
WHEN OTHERS THEN – interceptează orice ale erori
DBMS_OUTPUT.PUT_LINE('Some other kind of error
occurred.');
pe_ratio := NULL;
END; -- sfârşit zona excepţii
/
În exemplul următor se defineşte o excepţie:
DECLARE
past_due EXCEPTION;
acct_num NUMBER;
due_date DATE := SYSDATE - 1;
Programe stocate în baza de date
- 106 -
Baze de date Oracle
todays_date DATE := SYSDATE;
BEGIN
IF due_date < todays_date THEN
RAISE past_due;
END IF;
EXCEPTION
WHEN past_due THEN
DBMS_OUTPUT.PUT_LINE('Interceptare excepţie PAST_DUE !');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Nu s-a găsit PAST_DUE_EXCEPTION în
această procedură.');
END;
/
9 înregistrãri selectate.
Pentru alte căi trebuie creat un obiect nou directory:
SQL> CREATE DIRECTORY my_dir AS 'd:\oracle\usr\datafiles';
Utilizatorul trebuie să aibă drepturi de scriere în director, prin proceduri
ORACLE:
SQL> grant read, write on directory data_pump_dir to scott;
Figura 13.1
Schema de lucru
SQL LOADER
Figura 14.1
Imagine OEM
Pagina generală oferă informaţii sumare despre baza de date cum ar fi momentul
ultimei porniri, numele instanţei şi gazda bazei de date.
Secţiunea aferentă CPU prezintă gradul de ocupare a procesorului. Se precizează
cât din puterea procesorului este utilizat de Oracle şi cât de alte procese din sistem. Se
poate vedea şi sesiunile care sunt active în baza de date.
Pe lângă ADDM, Oracle dispune şi de alţi sfătuitori, cum ar fi:
• SQL Tuning Advisor – analizează instrucţiunile SQL şi face recomandări
pentru creşterea vitezei de execuţie
• SQL Access Advisor – Analizează obiectele din schemă şi face propuneri de
îmbunătăţire a schemei (de exemplu utilizarea indecşilor, a vederilor
materializate, etc)
• Sfătuitori pentru configurare memorie – Shared Pool Advisor, Buffer Cache
Advisor, PGA Advisor.
Figura 14.2
Configurare ASM cu OEM
Figura 14.3
Componentele memoriei
Figura 14.4
Configurare backup cu OEM
Figura 14.5
Configurare backup(user) cu OEM
RMAN>
RMAN>
Recuperarea datelor se face cu comenzile RESTORE DATABASE şi
RECOVER DATABASE, ca în exemplul de mai jos. Baza de date trebuie să fie numai
montată.
RMAN> startup force mount;
database opened
RMAN>
Informaţii despre pachetele de sarvare se pot obţine cu comenzile RMAN
LIST BACKUP OF DATABASE BY BACKUP, LIST BACKUP BY FILE.
File Key TY LV S Ckp SCN Ckp Time #Pieces #Copies Compressed Tag
---- ------- - -- - ---------- --------- ------- ------- ---------- ---
1 7 B 1 A 572195 01-OCT-07 1 1 NO
Thrd Seq Low SCN Low Time BS Key S #Pieces #Copies Compressed Tag
---- ------- ---------- --------- ------- - ------- ------- ---------- ---
1 2 565146 01-OCT-07 3 A 1 1 NO
TAG200710
01T103914
1 3 571478 01-OCT-07 6 A 1 1 NO
TAG200710
01T104017
RMAN>
BIBLIOGRAFIE
1. Michele Cyran, Paul Lane, JP Polk, Oracle® Database Concepts10g
Release 2 (10.2), October 2005
2. Steve Fogel, Paul Lane, Oracle® Database Administrator's Guide10g
Release 2 (10.2), May 2006
3. Colin McGregor, Michele Cyran, Daniela Hansell, Vasudha Krishnaswamy,
Peter Laquerre, Venkat Maddali, Mughees Minhas, JP Polk, Mark
Townsend, and Wanli Yang, Oracle® Database 2 Day DBA 10g Release 2
(10.2), December 2005
4. Sumit Jeloka, Oracle® Database Advanced Security Administrator’s
Guide10g Release 2 (10.2), November 2005
5. Immanuel Chan, Oracle® Database 2 Day + Performance Tuning Guide10g
Release 2 (10.2), November 2006
6. Oracle, Oracle® Database Backup and Recovery Quick Start Guide10g
Release 2 (10.2), November 2005
7. Antonio Romero, Oracle® Database Backup and Recovery Reference10g
Release 2 (10.2), November 2005
8. Diana Lorentz, Oracle® Database SQL Reference10g Release 2 (10.2),
December 2005
9. Simon Watt, SQL Plus® User’s Guide and Reference10g Release 2 (10.2),
June 2005
10. Shashaanka Agrawal, Cailein Barclay, Eric Belden, Dmitri Bronniko,
Oracle® Database PL/SQL User's Guide and Reference10g Release 2
(10.2), June 2005
11. Kathy Rich, Oracle® Database Reference10g Release 2 (10.2), November
2005
Bibliografie
- 126 -