Sunteți pe pagina 1din 36

TRANZACŢII.

PROCEDURI
STOCATE. TRIGGER-I
(DECLANSATORI).
CE REPREZINTĂ TRANZACŢIE
 O tranzacţie reprezintă una sau mai multe
instrucţiuni SQL care compun o singură unitate
logica de lucru.
 Tranzacţia începe cu prima instructiune SQL
executata si se încheie în momentul în care
efectele tranzacţiei sunt salvate sau sunt
derulate înapoi.
DE CE SE FOLOSESC TRANZACŢII
 Tranzactiile dau posibilitatea utilizatorului
serverului SQL, programatorului aplicaţiei şi
administratorului bazei de date să garanteze
coerenţa şi simultaneitatea datelor.
 Coerenţa datelor furnizează utilizatorului
o imagine coerenta a datelor, care consta
din date salvate de alţi utilizatori precum
si modificări efectuate de utilizatorul
însusi.
 Simultaneitatea (concurenta) datelor
permite utilizatorului sa acceseze date
care sunt utilizate simultan de mulţi alţi
utilizatori.
CE PERMITE?
O tranzacţie îi permite unui programator să
grupeze mai multe operaţii elementare într-un tot
indivizibil, să construiască deci noi operaţii, dar
într-un fel care să nu ne permită să discernem
structura lor interioară (adică faptul că sunt
compuse din mai multe bucăţele).
PROPRIETĂŢI ALE TRANZACŢIILOR
 În literatură sunt evidenţiate patru proprietăţi esenţiale,
ale căror iniţiale sunt ACID.
 Să reţinem însă că anumite implementări ale tranzacţiilor nu
oferă toate aceste proprietăţi, probabil pentru că domeniul de
utilizare al nu are neapărată nevoie de unele din proprietăţi.
Vom vedea de asemenea că proprietăţile acestea nu sunt
complet independente, şi că anume mecanisme de
implementare pot oferi simultan mai multe proprietăţi; o
oarecare independenţă există între proprietăţi.
ATOMICITATE

 O tranzacţie grupează mai multe instrucţiuni într-o


“macro-instrucţiune” care se comportă ca o unitate
indivizibilă.
 Un grup de instrucţiuni dintr-o tranzacţie se comportă ca o
singură entitate atunci cînd se întîmplă o catastrofă. Chiar
dacă am grupat 10 instrucţiuni şi curentul cade după ce am
executat numai primele 5, sistemul de tranzacţii trebuie să ne
asigure că după reluarea execuţiei efectul celor cinci
instrucţiuni nu este vizibil. O întrerupere catastrofală trebuie
să lase sistemul într-o stare corectă, care ar fi putut surveni în
urma unei execuţii normale. Cu alte cuvinte dacă am grupat
nişte instrucţiuni într-o tranzacţie atunci se execută ori toate
ori niciuna: “totul sau nimic”.
CONSISTENŢA
 Consistenţa (consistency) unei tranzacţii
înseamnă proprietatea acesteia de a efectua
modificări corecte ale bazei de date. Cu alte
cuvinte, o tranzacţie transformă baza de date
dintr-o stare consistentă în altă stare consistentă.
 Starea unei baze de date este consistentă
dacă respectă toate constrângerile de
integritate implicite sau explicite.
IZOLAREA

 Izolarea (isolation) este proprietatea unei


tranzacţii de a face vizibile modificările
efectuate numai după ce a fost validată
(committed).

 Independenţa se referă la un context în care mai


multe programe acţionează simultan asupra
aceluiaşi set de date (activitate concurentă). Un
program nu trebuie să vadă rezultatele parţiale
ale altui program, pentru că acestea nu ar fi
corecte
DURABILITAREA
 Durabilitarea (durability, sau permanenţa -
permanency) este proprietatea prin care, după
validarea unei tranzacţii, modificările efectuate
de aceasta în baza de date nu vor mai fi pierdute
datorită unor defectări ulterioare a sistemului.
PE SCURT PROPRIETĂŢILE TRANZACŢIILOR:

Nume Proprietate
Catastrofele nu pot
Atomicitate întrerupe o tranzacţie ``la
mijloc''
Tranzacţiile păstrează
Consistenţă
structurile de date corecte
Programe executate în paralel
Independenţă
nu interferă
Rezultatul unei tranzacţii
Durabilitate
este permanent
OPERAŢIILE EFECTUATE DE O TRANZACŢIE
1. begin: această operaţie marchează începutul execuţiei unei
tranzacţii.
2. read sau write: sunt operaţii de citire sau scriere a
articolelor în baza de date, executate în cadrul unei
tranzacţii.
3. end: această operaţie marchează terminarea operaţiilor de
scriere sau citire din baza de date, ceea ce înseamnă că
tranzacţia se poate termina; totuşi, este posibil să fie
necesare unele operaţii de verificare înainte de validarea
(commit) tranzacţiei.
OPERAŢIILE EFECTUATE DE O TRANZACŢIE
4. commit: această operaţie semnalează terminarea
cu succes a tranzacţiei, validarea tuturor
modificărilor efectuate în baza de date şi
vizibilitatea modificărilor efectuate pentru alte
tranzacţii; din acest moment, modificările efectuate
nu mai pot fi anulate, nici pierdute printr-o
defectare ulterioară a sistemului (bineînţeles, dacă
mecanismul de refacere al SGBD-ului funcţionează
corect).
5. rollback (sau abort): această operaţie semnalează
faptul că tranzacţia a fost abandonată şi că orice
efect pe care tranzacţia l-a avut asupra bazei de
date trebuie să fie anulat (printr-o “rulare înapoi”
a operaţiilor).
SINTAXA
 BEGIN TRAN[SACTION] [nume_tranzacţie]
COMMIT [TRAN[SACTION] [nume_tranzacţie]
ROLLBACK [TRAN[SACTION]
[nume_tranzacţie]
EXEMPLU
BEGIN TRAN update_royalty
IF EXISTS (SELECT nume, prenume,
nota
FROM student a, note_exam b
WHERE a.st_id = b.st_id
AND curs_id=10) UPDATE
note_exam SET nota= 8 WHERE nota>5
ELSE ROLLBACK TRAN update_royalty
EXISTĂ DOUĂ FELURI ÎN CARE O TRANZACŢIE
SE POATE TERMINA CU EŞEC:

 Cînd programul execută


instrucţiunea Abort tranzacţia se “sinucide”;
 Cînd sistemul care implementează tranzacţii
observă că nu poate oferi garanţiile promise, el
poate ucide o tranzacţie spontan. Aceasta este o
crimă.
LA CE SUNT UTILE TRANZACŢIILE?
 Programare uşoară în prezentă concurenţei: dacă vrem să
respectăm invarianţi în prezenţa unor procese concurente, atunci
închidem porţiunile de cod care “strică” invarianţii în tranzacţii şi
alte programe vor vedea numai stări consistente;
 Tratament al malfuncţiilor hardware/software
(crashes): nu mai trebuie să ne facem griji ce se întîmplă dacă pică
un calculator; chiar dacă se vor pierde date, calculatorul va putea
funcţiona corect, pentru că datele rămase sunt consistente. De
asemenea, dacă ni s-a promis că ceva s-a executat, rezultatul a
devenit permanent în pofida catastrofelor;
 Tratament simplificat al erorilor: dacă survine o condiţie de
eroare programatorul poate executa un simplu Abort pentru a reveni
la starea iniţială corectă, fără a trebui să refacă ``manual'' toate
valorile modificate.
ÎNCHEIERE
 Tranzacţiile sunt o sculă foarte utilă pentru
programator, care cu preţul unei oarecare scăderi
în performanţă oferă o serie de proprietăţi foarte
utile ale datelor. Este de aşteptat să devină o
paradigmă din ce în ce mai întîlnită în arsenalul
sculelor programatorilor.
PROCEDURI STOCATE
O procedură stocată este o mulţime ordonată de
instrucţiuni SQL stocată permanent pe server şi
compilată la utilizare.
 Procedurile stocate reprezintă o modalitate de a
crea rutine şi proceduri care să fie rulate pe
server de către procesele serverului.
PROCEDURI STOCATE
 Aceste proceduri pot fi lansate in execuţie de o
aplicaţie apelantă sau de declanşatoare sau de
regulile de integritate.
 Deoarece SQL-server permite administrarea
bazelor de date din sistem este logic ca serverul
este locul cel mai bun pentru rularea procedurii
stocate.
AVANTAJE

 1. Procedurile stocate rulează pe servere care sunt


calculatoare puternice;

 2. Deoarece ele sunt stocate pe server nu mai necesită


transfer de informaţii din baza de date, ele fiind pe
acelaşi calculator;

 3. Procedura beneficiază de un acces direct, rapid şi


imediat la baza de date ce permite o prelucrare rapidă a
informaţiilor;
 4. Permite partajarea logicii aplicaţiei intre
aplicaţii diferite;
AVANTAJE
 5. Simplifică integrările parametrizate facilitand
rularea repetată aceleiaşi interogări cu seturi
diferite;
 6. Componentele de pe server pot fi dezvoltate
separat de componentele client fapt ce face
posibilă refolosirea lor intre aplicaţile client;
AVANTAJE
 7. Ele pot furniza mecanisme de securitate:
gestiunea vederilor şi a procedurilor stocate pot
fi folosite ca instrumente de asigurare a
securitătii . Pot fi create proceduri stocate pentru
operatiile de adăugare/ modificare/ ştergere/
citire controland programat fiecare din aceste
tipuri de acces la informaţii;
 9. Impune pe partea de server reguli orientate
spre date, permit impunerea de reguli şi relaţii
logice care sporesc controlul informaţiilor in
sistem;
 10 .Micşorează transferul de instrucţiuni T-SQL.
CREAREA UNEI PROCEDURI STOCATE
 CREATE PROCEDURE [posesor].
nume_procedura:nr
 @nume_parametru tip_data [=default][output]

 @nume_parametru tip_data [=default][output]

 …………….

 [FOR REPLICATION][WITH Recompile]

 [WITH ENCRIPTION]

 AS ………..

 INSTRUCŢIUNI SQL

 RETURN
ELIMINAREA PROCEDURII
Prin folosirea instructiunii
DROP PROCEDURE nume_procedura
se elimină procedură.

Numele şi alte informaţii sunt inregistrate in tabelul


sysobjects, iar codul sursă este stocat in syscomments.
EXECUŢIA UNEI PROCEDURI
Execuţia unei proceduri se face prin execuţia unei
instrucţiuni:
EXECUTE nume_procedura

O procedură nu poate fi creată decat in baza de


date curentă. Pentru că baza de date să fie curentă
in care dorim să creem o procedură trebuie ca
instrucţiunea de creare să fie precedată de USE-
nume_bază.
EXEMPLU
CREATE PROCEDURE determină_salariaţi
as
SELECT * FROM salariaţi
EXEC determină_salariaţi

Numele procedurii nu poate să conţină spaţii şi


poate fi accesat prin
BAZA_DEDATE.<OBJECT>
TRANSMITEREA DE PARAMETRII
Programatorul poate să transmită valori care pot
să intervină in execuţia procedurii.

Parametrii sunt folosiţi pentru a transmite


informaţii unei proceduri la apelul ei care se
introduc după numele ei separaţi prin virgule şi
urmaţi de tipul informaţiilor aşteptate
TRANSMITEREA DE PARAMETRII
o procedură poate avea o mulţime nevidă de
parametrii;
 parametrii pot fi utilizaţi ca locaţii nominale;

 desemnarea parametrilor se realizează prin


prefixarea numelor cu simbolul @;
 parametrii sunt locali pentru procedura in care
sunt definiţi.
EXEMPLU
CREATE PROCEDURE inserare
@n char(15),
@p char(15),
@v int ,
as
INSERT INTO stud VALUES(@n,@p,@v)
Inserare(‘Albu’,’Ion’,20)
EXECUŢIA DE CĂTRE UTILIZATOR
 Prima dată cand se execută o procedură nouă ea este
citită din tabelul syscomments şi se rezolvă referirile ei la
alte obiecte.In timpul acestui proces, procesorul de
comenzi construieşte arborele de secvenţă sau interogare
care este apoi transferat optimizatorului de interogare şi
compilare.
COMPILAREA
 După ce s-a reuşit crearea arborelui de interogare
optimizatorul SQL Server compilează intreg pachetul
şi il optimizează şi verifică drepturile de acces. In
timpul fazei de optimizare,optimizatorul transformă
arborele de interogare intr-o structură optimală
ţinand cont de planul de accesare a datelor vizate de
procedură.
 Planul de execuţie al procedurii va fi plasat in memoria cache
rezervată procedurii după ce optimizatorul l-a terminat de
construit şi este compus din:
 - paşi de realizare a procedurii stocate,
 - paşii ce descriu impunerea restricţiilor;
 - paşii de declanşare lansaţi de procedura stocată.
DECLANSATOARE
 Un declansator defineste o actiune care trebuie
executata in baza de date la aparitia unui
anumit eveniment ( insert, update, delete).

 Declansatoarele sunt similare procedurilor -


sunt tot blocuri SQL denumite.
 Deoarece declansatoarele apar datorita unor
evnimente, se pot configura astfel incat sa apara
imediat inainte sau dupa aceste evenimente.
PENTRU CE SE UTILIZEAZA
DECLANSATOARELE?

 Pentru a mentine constrangeri de integritate


complexe sau reguli de afacere
 Pentru auditarea informatiilor intr-un
tabel prin inregistrarea modificarilor
 Pentru activarea automata a altor programe
care trebuie sa ruleze la efectuarea anumitor
modificari in tabel
 Pentru colectarea si intretinerea datelor
statistice.
SINTAXA
 CREATE [OR REPLACE] TRIGGER
nume_declansator
{BEFORE | AFTER}
{INSERT|UPDATE|DELETE} [OF coloana]
ON tabel_referit
[FOR EACH ROW [WHEN conditii]]
[DECLARE] -- optional, pentru
declararea variabilelor locale
corpul_declansatorului
COMENZI CORESPUNZATOARE
DECLANSATOARELOR


• DROP TRIGGER nume_decl
• ALTER TRIGGER nume_decl [{DISABLE |
ENABLE }]
• ALTER TABLE nume_tabel [{DISABLE |
ENABLE } [ALL TRIGGERS]]
ÎNTREBĂRI?

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