Documente online.
Username / Parola inexistente
  Zona de administrare documente. Fisierele tale  
Am uitat parola x Creaza cont nou
  Home Exploreaza
Upload




























Manipularea datelor - Limbajul de manipulare a datelor (DML)

Informatica




Manipularea datelor

Text Box: Obiective:

 Dupa parcurgerea acestei lectii, ar trebui sa puteti face urmatoarele:
. Sa descrieti fiecare comanda DML
. Sa inserati īnregistrari īntr-un tabel
. Sa reactualizati īnregistrarile dintr-un tabel
. Sa stergeti īnregistrari dintr-un tabel
. Sa controlati tranzactiile.





Scopul lectiei:

Īn aceasta lectie veti īnvata cum sa inserati īnregistrari īntr-o tabela, sa reactualizati īnregistrari existente īn tabela si sa stergeti īnregistrari existente dintr-o tabela. Veti mai īnvata si cum sa controlati tranzactii cu comenzile COMMIT, SAVEPOINT si ROLLBACK.

Text Box: Limbajul de manipulare a datelor (DML)

. O comanda DML este executata cānd:
- Adaugati noi īnregistrari la tabela
- Modificati īnregistrari existente īntr-o tabela
- Stergeti īnregistrari existente dintr-o tabela
. O tranzactie consta dintr-o colectie de comenzi DML care formeaza o unitate logica de lucru


Limbajul de manipulare a datelor

Limbajul de manipulare a datelor (DML) este partea de baza a SQL. Cānd doriti sa adaugati, sa modificati sau sa stergeti date dintr-o baza de date, executati o comanda DML. O colectie de comenzi DML care formeaza o unitate logica de lucru se numeste tranzactie.

Considerati o baza de date din domeniul bancar. Cānd un client al bancii doreste sa transfere bani dintr-un depozit īntr-un cont curent, tranzactia ar putea consta īn 3 operatii separate: scade suma din depozit, creste suma din contul curent, īnregistreaza tranzactia īn jurnalul de tranzactii. Serverul Oracle trebuie sa garanteze ca toate cele 3 comenzi SQL sunt executate īn asa fel īncāt sa mentina echilibrul necesar īntre conturi. Cānd ceva opreste una dintre comenzile tranzactiilor sa se execute, atunci celelalte comenzi ale tranzactiilor trebuie sa fie anulate.


Adaugarea unei noi īnregistrari īntr-un tabel:

Graficul de mai sus ilustreaza a 21221g64v daugarea unui nou departament īn tabelul DEPT.


Prin intermediul comenzii INSERT se pot introduce noi īnregistrari īntr-un tabel.

Īn descrierea sintaxei:

tabel este numele tabelului (bazei de date).

coloana este numele coloanei din tabelul respectiv.

valoare este valoarea corespunzatoare coloanei.

Nota Aceasta comanda folosind clauza VALUES adauga numai cāte un rānd odata la un tabel.


Deoarece se poate insera o noua īnregistrare care contine valori pentru fiecare coloana, lista coloanelor nu este necesara īn sintaxa INSERT. Totusi, daca aceasta nu este precizata, valorile trebuie enumerate conform ordinii coloanelor din tabel.

SQL> DESCRIBE dept

 

Name  Null? Type

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

DEPTNO  NOT NULL NUMBER(2)

DNAME  VARCHAR2(14)

LOC  VARCHAR2(13)

Pentru claritate, precizati lista coloanelor īn sintaxa INSERT. Īncadrati doar sirurile de caractere si datele īntre ghilimele simple; nu īncadrati si valorile numerice.


Metode de inserare a valorilor NULL:

Metoda

Descriere

Implicita

Omiteti coloanei din lista.

Explicita

Specificati cuvāntul cheie NULL īn lista de dupa VALUES.

Specificati sirul vid ('') īn lista de dupa VALUES; numai pentru siruri de caractere si pentru valori de tip data.

Asigurati-va ca pentru coloana vizata este permisa valoarea NULL, verificānd cāmpul Null? furnizat de comanda SQL*Plus DESCRIBE.

Serverul Oracle aplica automat toate constrāngerile de integritate, de domeniu si tip pentru date. Orice coloana care nu este specificata īn lista explicit va primi o valoare nula īn noua īnregistrare.


Inserarea de valori speciale folosind functii SQL:

Se pot folosi pseudocoloane pentru a introduce valori speciale īn tabele.

Exemplul de mai sus īnregistreaza informatia pentru angajatul Green īn baza de date EMP. Pentru a introduce data si ora curenta īn cāmpul HIREDATE este folosita functia SYSDATE.

Se poate de asemeni folosi functia USER la introducerea de valori īntr-un tabel. Functia USER furnizaza numele utilizatorului curent.

Verificarea adaugarilor la tabel:

SQL> SELECT empno, ename, job, hiredate, comm

FROM emp

WHERE empno = 7196;

EMPNO ENAME JOB HIREDATE COMM

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

GREEN SALESMAN 01-DEC-97


Inserarea de valori de tip data calendaristica:

Formatul DD-MON-YY este de obicei folosit pentru a insera o valoare de tip data calendaristica. Cu acest format, secolul este implicit cel curent. Deoarece data contine de asemenea informatii despre timp, ora implicita este 00:00:00.

Daca o data calendaristica necesita specificarea altui secol sau ora, trebuie folosita functia TO_DATE.

Exemplul din figura īnregistreaza informatia despre angajatul Aromano īn baza de date EMP. Cāmpul HIREDATE primeste valoarea February 3, 1997.

Daca formatul RR este setat, secolul poate sa fie diferit de cel curent.


Inserarea de valori folosind variabile de substitutie:

Se poate scrie o comanda INSERT care sa permita utilizatorului sa adauge valori interactiv folosind variabilele de substitutie SQL*Plus.

Exemplul de mai sus īnregistreaza informatia pentru un departament īn tabelul DEPT. Numarul departamentului, numele si locatia sunt cerute interactiv utilizatorului.

Pentru valori de tip data calendaristica sau sir de caractere, ampersandul si numele variabilei sunt īncadrate de ghilimele simple (apostroafe).


Crearea unui script pentru manipularea datelor:

Comanda īmpreuna cu variabilele de substitutie pot fi salvate īntr-un fisier si acesta poate fi executat. De fiecare data cānd se executa fisierul, sunt cerute valori noi pentru variabile. Prin intermediul comenzii SQL*Plus ACCEPT, mesajele afisate la cererea introducerii valorilor pot fi modificate.

Exemplul din figura īnregistreaza informatia pentru un departament īn tabelul DEPT. Utilizatorului īi sunt cerute numarul departamentului, numele si locatia acestuia, folosind mesajele de prompt stabilite īn ACCEPT.

Introduceti numarul departamentului: 90

Introduceti numele departamentului: PAYROLL

Introduceti orasul: HOUSTON

1 row created.

Parametrul de substitutie SQL*Plus nu trebuie precedat de & cānd este referit īntr-o comanda ACCEPT. Pentru a continua o comanda SQL*PLUS pe linia urmatoare se foloseste o linie. (-)

Copierea īnregistrarilor dintr-un alt tabel:

Comanda INSERT poate fi folosita pentru a adauga īnregistrari īntr-un tabel, valorile pentru cāmpuri fiind derivate dintr-un tabel existent. Pentru aceasta se foloseste, īn locul clauzei VALUES, o subinterogare.


Sintaxa este urmatoarea:

INSERT INTO tabel [ coloana ( , coloana ) ]

Subinterogare;

unde tabel este numele tabelului (bazei de date).

coloana este numele coloanei din tabelul īn care se face inserarea.

subinterogare este subinterogarea care returneaza īnregistrarile īn tabel.



Numarul si tipul cāmpurilor (coloanelor) din lista specificata īn comanda INSERT trebuie sa corespunda numarului si tipului valorilor din subinterogare.


Modificarea datelor dintr-un tabel:

Figura de mai sus arata modificarea numarului departamentului pentru Clark din 10 īn 20.

Actualizarea īnregistrarilor:

Īnregistrarile existente pot fi modificate folosind comanda UPDATE.


Īn sintaxa de mai sus:

tabel este numele tabelului (bazei de date).

coloana este numele coloanei din tabelul īn care se face modificarea.

valoare este valoarea sau subinterogarea ce corespunde coloanei.

conditie identifica īnregistrarile care trebuie modificate si este alcatuita din expresii, nume de coloane, constante, subinterogari si operatori de comparare.

Puteti avea confirmarea operatiei de modificare prin interogarea tabelului, afisānd rāndurile modificate.

Nota: Īn general, folositi cheia primara pentru a identifica o singura īnregistrare. Folosirea altor coloane poate determina modificarea mai multor īnregistrari. De exemplu, identificarea unei singure īnregistrari īn tabelul EMP prin nume poate fi periculoasa, deoarece pot exista mai multi angajati cu acelasi nume.

Comanda UPDATE modifica anumite īnregistrari daca este specificata clauza WHERE. Exemplul urmator transfera angajatul cu numarul 7782 (Clark) la departamentul 20.


Daca omiteti clauza WHERE, vor fi modificate toate īnregistrarile din baza de date.

SQL>SELECT ename, deptno

FROM employee;

ENAME DEPTNO

_ _ _ _ _ _

KING  20

BLAKE  20

CLARK

JONES  20

MARTIN  20

ALLEN  20

TURNER  20

14 rows selected.

Nota: Tabelul EMPLOYEE contine aceleasi date ca si EMP.


Modificarea īnregistrarilor folosind subinterogari dupa mai multe cāmpuri:

Īn clauza SET a unei comenzi UPDATE pot fi implementate subinterogari dupa mai multe cāmpuri.

Sintaxa:

UPDATE tabel

SET (coloana, coloana, ... ) =

(SELECT coloana, coloana,

FROM tabel

WHERE condition

WHERE condition


Actualizarea īnregistrarilor folosind valori dintr-un alt tabel:

Puteti folosi subinterogari īn comenzi UPDATE pentru a modifica īnregistrari dintr-un tabel. Exemplul de mai sus arata cum se fac actualizari īn tabelul EMPLOYEE pe baza valorilor din tabelul EMP. Este schimbat numarul de departament pentru toti angajatii cu aceeasi slujba ca a celui cu numarul 7788; noul lor numar de departament devenind egal cu al acestuia.


Violarea constrāngerii de integritate:

Daca īncercati sa atribuiti unui cāmp o valoare care este legata de o constrāngere de integritate, va rezulta o eroare.

Īn exemplul de mai sus, departamentul cu numarul 55 nu exista īn tabelul parinte, DEPT, si astfel veti obtine eroarea parent key violation ORA-02291.

Nota: Constrāngerile de integritate asigura ca datele adera la un set predefinit de reguli. O lectie urmatoare va dezvolta acest subiect mai pe larg.

Stergerea unei īnregistrari dintr-un tabel

Figura de mai jos ilustreaza stergerea departamentului DEVELOPMENT din tabelul DEPT (presupunānd ca nu exista constrāngeri definite pe tabelul DEPT).


Stergerea īnregistrarilor:

Puteti sterge īnregistrari dintr-un tabel folosind DELETE.

Īn sintaxa:

tabel este numele tabelului (bazei de date).

conditie identifica īnregistrarile care trebuie sterse si este alcatuita din expresii, nume de coloane, constante, subinterogari si operatori de comparare.


Puteti sterge anumite īnregistrari prin specificarea clauzei WHERE īn comanda DELETE. Exemplul de mai sus sterge departamentul DEVELOPMENT din tabelul DEPARTMENT. Va puteti asigura ca stergerea s-a facut corect, īncercānd afisarea rāndurilor sterse printr-un SELECT.

SQL> SELECT *

FROM department

WHERE dname = 'DEVELOPMENT';

no rows selected.

Exemplu:

Stergeti toti cei angajati dupa data de 1 Ianuarie, 1997.

SQL> DELETE FROM emp

WHERE hiredate > TO_DATE('01.01.97', 'DD.MM.YY');

1 row deleted.

Daca ati omis clauza WHERE, toate rāndurile din tabel vor fi sterse. Cel de-al doilea exemplu din figura sterge toate rāndurile din tabelul DEPARTMENT, deoarece nu a fost specificata nici o clauza WHERE.

Nota: Tabelul DEPARTMENT contine aceleasi date ca si DEPT.


Stergerea īnregistrarilor folosind valori dintr-un alt tabel:

Puteti folosi subinterogari pentru a sterge īnregistrari dintr-un tabel, folosind informatiile din altul. Exemplul de mai sus sterge toti angajatii care sunt īn departamentul 30. Subinterogarea cauta īn tabelul DEPT numarul de departament pentru SALES, apoi furnizeaza numarul de departament interogarii principale, care sterge īnregistrari din EMP pe baza acestuia.




Violarea constrāngerii de integritate:

Daca īncercati stergerea unei īnregistrari care contine un cāmp cu o valoare legata de o constrāngere de integritate, veti obtine o eroare.

Īn exemplul de mai sus se īncearca stergerea departamentului cu numarul 10 din tabelul DEPT, dar aceasta provoaca o eroare, deoarece numarul de departament este folosit ca si cheie externa īn tabelul EMP. Daca īnregistrarea parinte pe care īncercati sa o stergeti are īnregistrari fii, atunci veti primi un mesaj de eroare: child record found violation ORA - 02292.

Text Box: Tranzactii

Constau īntr-un grup din urmatoarele comenzi:

. Comenzi DML care se constituie īntr-o schimbare consistenta a datelor
. O comanda DDL
. O comanda DCL


Tranzactii īn baze de date:

Serverul Oracle asigura consistenta datelor  pe baza tranzactiilor. Tranzactiile va ofera mai multa flexibilitate si control la modificari aduse datelor si asigura consistenta datelor īn eventuala cadere a sistemului sau īn cazul unei erori a procesului utilizator.

Tranzactiile constau din comenzi DML care se constituie īntr-o schimbare consistenta asupra datelor. De exemplu, un transfer de fonduri īntre doua conturi ar trebui sa includa debitul unui cont si creditul celuilalt cu o aceeasi suma de bani. Ambele actiuni ar trebui fie sa reuseasca īmpreuna, fie sa esueze īmpreuna. Operatia de creditare nu ar trebui sa poata fi efectuata fara ca cea de debit sa aiba succes.

Tipuri de tranzactii

Tip

Descriere

Limbaj de manipulare a datelor  (DML)

Consta din orice numar de comenzi DML pe care serverul Oracle le trateaza ca o singura entitate sau unitate logica de lucru.

Limbaj de definire a datelor (DDL)

Consta dintr-o singura comanda DDL

Limbaj de control al datelor (DCL)

Consta dintr-o singura comanda DCL

Text Box: Tranzactii īn baze de date

. Īncep odata cu executia primei comenzi SQL executabile
. Se termina la unul dintre urmatoarele evenimente:
- COMMIT sau ROLLBACK
- Executia unei comenzi DDL sau DCL ( automatic commit)
- Deconectarea utilizatorului
- Caderea sistemului


Cānd īncepe si cānd se termina o tranzactie?

O tranzactie īncepe cānd este īntalnita prima comanda SQL executabila si se termina la aparitia unuia dintre evenimentele:

O comanda COMMIT sau ROLLBACK

O comanda DDL, de exemplu CREATE

O comanda DCL

Utilizatorul iese din SQL*Plus

'Pica' sistemul.

Dupa ce se īncheie o tranzactie, urmatoarea tranzactie va īncepe automat la prima comanda SQL executabila īntālnita.

O comanda DDL sau DCL este commited (modificarile facute sunt salvate) automat si de aceea īncheie īn mod implicit o tranzactie.

Text Box: Avantajele COMMIT si ROLLBACK

. Asigura consistenta datelor
. Ofera posibilitatea revederii schimbarilor facute īnainte de a le salva
. Grupeaza operatii relationate logic


Comenzi pentru controlul explicit al tranzactiilor:

Puteti controla logica tranzactiilor folosind comenzile COMMIT, SAVEPOINT si ROLLBACK.


Comanda

Descriere

COMMIT

Īncheie actuala tranzactie facānd ca toate modificarile sa devina permanente (salveaza modificarile)

SAVEPOINT nume

Marcheaza un punct de īntoarcere (savepoint) īn cadrul tranzactiei curente

ROLLBACK [TO

SAVEPOINT name

Comanda ROLLBACK īncheie tranzactia curenta pierzāndu-se toate modificarile temporare (pending changes) asupra datelor. ROLLBACK TO SAVEPOINT name sterge savepoint-ul si toate schimbarile de dupa el (temporare).

Nota: SAVEPOINT nu este ANSI standard SQL.

Text Box: Procesarea implicita a tranzactiilor

. Un commit (salvarea modificarilor) automat are loc īn urmatoarele circumstante:
- Este data o comanda DDL
- Este data o comanda DCL
- O parasire normala a mediului SQL*Plus, fara a da explicit o comanda COMMIT sau ROLLBACK
. Un rollback automat are loc īn conditiile unei terminari anormale a sesiunii SQL*Plus sau īn cazul unei 'caderi' de sistem.


Stare

Circumstante

Commit automat

Comanda DDL sau DCL

Iesire normala din SQL*Plus, fara o comanda COMMIT sau ROLLBACK explicita

Rollback automat

Terminare anormala a SQL*Plus sau cadere sistem

Nota: Īn SQL*Plus mai este disponibila si o a treia comanda. Comanda SQL*Plus AUTOCOMMIT poate fi setata ON sau OFF. Daca este setata pe ON, fiecare comanda DML individuala duce la salvarea modificarilor, imediat ce este executata. Nu se mai poate reveni la situatia dinainte (un rollback nu mai este posibil). Daca este setata pe OFF, COMMIT poate fi data explicit. De asemeni, COMMIT este executata odata cu o comanda DDL sau la iesirea din SQL*Plus.

Caderile sistemului: Cānd o tranzactie este īntrerupta de o cadere a sistemului, īntreaga tranzactie este automat pierduta (este 'rolled back'). Aceasta īmpiedica eroarea sa determine schimbari nedorite asupra datelor si reface starea bazelor din momentul ultimului COMMIT. (explicit sau implicit). Astfel, SQL*Plus pastreaza integritatea tabelelor (bazelor de date).

Salvarea modificarilor:

Fiecare modificare efectuata īn timpul tranzactiei este temporara pāna cānd apare un 'commit' (pāna la 'salvarea' tranzactiei).

Starea datelor īnainte de un COMMIT sau ROLLBACK:

Operatiile de manipulare a datelor afecteaza initial buffer-ul bazei de date; de aceea, starea initiala a datelor poate fi refacuta.

Utilizatorul curent poate urmari schimbarile facute prin interogarea tabelelor.

Alti utilizatori nu pot vedea modificarile facute de utilizatorul curent. Serverul Oracle instituie o consistenta la citire pentru a se asigura ca fiecare utilizator vede datele asa cum existau ele īn momentul ultimei salvari.

Īnregistrarile afectate sunt protejate (locked); alti utilizatori nu pot face modificari asupra lor.

Text Box: Starea datelor īnainte de COMMIT sau ROLLBACK

. Starea anterioara a datelor poate fi refacuta.
. Utilizatorul curent poate revedea rezultatul operatiilor DML folosind comanda SELECT.
. Alti utilizatori nu pot vedea rezultatul comenzilor DML date de utilizatorul curent.
. Īnregistrarile modificate sunt protejate (locked); alti utilizatori nu pot modifica datele din aceste īnregistrari.

Text Box: Starea datelor dupa COMMIT

. Modificarile asupra datelor din baza de date devin permanente.
. Starea anterioara a datelor nu mai poate fi refacuta.
. Toti utilizatorii pot vedea rezultatele.
. Īnregistrarile protejate (locked) sunt deblocate pentru modificare si pot fi schimbate de alti utilizatori.
. Toate savepoint-urile sunt sterse.


Puteti salva toate modificarile prin folosirea comenzii COMMIT. Dupa executarea unui COMMIT:

Modificarile datelor sunt salvate īn baza de date.

Starea anterioara a datelor nu mai poate fi refacuta.

Toti utilizatorii pot vedea rezultatele tranzactiei.

Protectia īnregistrarilor modificate este īnlaturata; aceste īnregistrari pot fi modificate de alti utilizatori.


Toate savepoint-urile sunt sterse.

Exemplul de mai sus modifica tabelul EMP si seteaza numarul de departament pentru angajatul numarul 7782 (Clark) la 10. Apoi face ca modificarea sa devina permanenta prin comanda COMMIT.

Exemplu:

Creati un nou departament ADVERTISING cu cel putin un angajat. Salvati modificarile facute.

SQL> INSERT INTO department(deptno, dname, loc)

VALUES (50, 'ADVERTISING','MIAMI');

1 row created.

SQL> UPDATE employee

SET deptno = 50

WHERE empno = 7876;

1 row updated.

SQL> COMMIT;

Commit complete.


Stergerea modificarilor (refacerea starii initiale):

Puteti anula modificarile temporare folosind comanda ROLLBACK. Dupa un ROLLBACK:

Modificarile facute sunt pierdute.

Starea anterioara a datelor este refacuta.

Protectia asupra īnregistrarilor implicate este ridicata.

Exemplu:

Īncercānd sa stergeti o īnregistrare din tabelul TEST, puteti sterge accidental īntreg tabelul. Puteti corecta greseala, iar apoi sa dati comenzile corecte si sa salvati modificarile.

SQL> DELETE FROM test;

25,000 rows deleted.

SQL> ROLLBACK;

Rollback complete.

SQL> DELETE FROM test

WHERE id = 100;

1 row deleted.

SQL> SELECT *

FROM test

WHERE id = 100;

No rows selected.

SQL> COMMIT;

Commit complete.




Anularea modificarilor pāna la un savepoint:

Puteti crea un marcaj īn cadrul tranzactiei curente folosind comanda SAVEPOINT. Astfel, tranzactia poate fi īmpartita īn sectiuni mai mici. Puteti apoi anula modificarile temporare pāna la acel marcaj folosind comanda ROLLBACK TO SAVEPOINT.

Daca creati un al doilea savepoint cu acelasi nume ca unul anterior, savepoint-ul anterior este sters.

Text Box: Rollback la nivel de comanda

. Daca o singura comanda DML esueaza īn timpul executarii ei, se reface starea dinaintea acelei comenzi. 
. Serverul Oracle implementeaza un savepoint implicit.
. Toate celelalte modificari sunt mentinute.
. Utilizatorul ar trebui sa īncheie tranzactiile explicit, printr-o comanda COMMIT sau ROLLBACK.


Rollback la nivel de comanda:

Se poate anula o parte din tranzactie printr-un rollback implicit daca este detectata o eroare la executia unei comenzi. Daca o singura comanda DML esueaza īn timpul executiei unei tranzactii, efectul ei este anulat printr-un rollback la nivel de comanda, dar schimbarile facute de comenzile DML anterioare īn tranzactie nu vor fi anulate. Ele pot fi salvate (commited) sau anulate (rolled back) īn mod explicit de catre utilizator.

Oracle executa o comanda COMMIT implicita īnainte si dupa orice comanda DDL.

Deci, chiar daca comanda voastra DDL nu se executa cu succes, nu puteti anula comenzile anterioare pentru ca serverul a executat un commit (a salvat modificarile).

Terminati-va tranzactiile explicit, prin executarea unei comenzi COMMIT sau ROLLBACK.

Text Box: Consistenta la citire

. Consistenta la citire garanteaza o vedere consistenta a datelor īn fiecare moment.
. Schimbarile facute de un utilizator nu intra īn conflict cu schimbarile realizate de un altul.
. Asigura ca, pentru aceleasi date:
- Cei care citesc datele sa nu-i astepte pe cei care le modifica;
- Cei care modifica datele sa nu-i astepte pe cei care le citesc.


Consistenta la citire:

Utilizatorii bazei de date o acceseaza pe aceasta īn doua moduri:

Operatii de citire (comanda SELECT);

Operatii de scriere (comenzile INSERT, UPDATE, DELETE).

Consistenta la citire este necesara pentru ca:

Cei care citesc/modifica datele sa aiba o vedere consistenta a datelor;

Cei care citesc datele sa nu vada datele care sunt īn curs de modificare;

Cei care modifica datele sa aiba siguranta ca schimbarile īn baza de date se fac īn mod consistent;

Schimbarile facute de un utilizator sa nu intre īn conflict sau sa afecteze schimbarile facute de un altul.

Scopul consistentei la citire este sa asigure ca fiecare utilizator vede datele īn starea īn care erau la ultima salvare, īnainte sa īnceapa o operatie DML.

Implementarea consistentei la citire:

Consistenta la citire este implementata īn mod automat. Este pastrata o copie partiala a bazei de date īn segmente rollback.

Cānd se realizeaza o operatie de insertie, actualizare sau stergere asupra bazei de date, serverul Oracle scrie o copie a datelor dinainte de modificare īntr-un segment rollback.

Toti utilizatorii, cu exceptia celui care a initiat modificarea, vad īnca baza de date īn starea de dinainte de īnceperea modificarii; ei vad datele din segmentul rollback.

Īnainte ca schimbarile sa fie salvate īn baza de date, numai utilizatorul care modifica datele vede baza de date modificata, toti ceilalti vazānd datele din segmentul rollback. Aceasta garanteaza ca utilizatorii citesc consistent datele care nu sufera schimbari īn chiar acel moment.

Cānd o comanda DML este salvata, schimbarea facuta īn baza de date devine vizibila oricui executa o comanda SELECT. Spatiul ocupat de 'vechile' date din segmentul rollback este eliberat pentru a fi reutilizat.

Daca tranzactia este anulata, schimbarile sunt la rāndul lor anulate.

Versiunea originala mai veche a datelor din segmentul rollback este scris īnapoi īn tabel.

Toti utilizatorii vad baza de date asa cum era īnainte de a īncepe tranzactia.

Text Box: Protectia la scriere (locking)

Lacatele Oracle:
. Previn interactiunile destructive īntre tranzactii concurente
. Nu necesita actiuni din partea utilizatorului
. Folosesc īn mod automat cel mai mic nivel de restrictionare
. Sunt valabile pe durata unei tranzactii
. Sunt de doua moduri:
- Exclusive;
- Partajate.


Ce sunt lacatele?

Lacatele sunt mecanisme care previn interactiunea destructiva īntre tranzactii ce acceseaza aceeasi resursa: fie un obiect utilizator (de ex. tabele sau īnregistrari), fie obiecte sistem care nu sunt vizibile utilizatorilor (de ex. structuri de date partajate si īnregistrari "data dictionary").

Cum protejeaza Oracle datele

Protejarea unei baze de date Oracle este automatizata īn īntregime si nu necesita actiuni din partea utilizatorului. Implicit, protejarea are loc pentru toate comenzile SQL cu exceptia lui SELECT. Mecanismul implicit de protectie īn Oracle foloseste īn mod automat cel mai mic nivel aplicabil de restrictionare, astfel furnizānd cel mai mare grad de concurenta existent, precum si integritate maxima a datelor. Oracle permite si protejarea datelor manual de catre utilizator.

Modurile de protectie

Oracle foloseste doua moduri de protectie īntr-o baza de date multiutilizator.

Mod de protectie

Descriere

exclusiva

(lacat exclusiv)

Īmpiedica partajarea unei resurse.

Prima tranzactie care blocheaza resursa īn mod exclusiv este singura tranzactie care poate modifica resursa pāna cānd lacatul exclusiv este anulat.

partajata

(lacat partajat)

Permite resursei sa fie partajata.

Mai multi utilizatori care citesc datele le pot folosi īn comun prin crearea unor lacate partajate ce īmpiedica accesul concurent pentru scriere (care necesita un lacat exclusiv).

Mai multe tranzactii pot obtine lacate partajate pentru aceeasi resursa.

Text Box: Rezumat
Comanda Descriere
INSERT Adauga o īnregistrare noua la tabel.
UPDATE Modifica īnregistrari existente īn tabel.
DELETE Sterge īnregistrari existente din tabel.
COMMIT Face ca schimbarile sa devina permanente.
SAVEPOINT Permite īntoarcerea la un savepoint.
ROLLBACK Anuleaza toate schimbarile temporare.


Rezumat:

Puteti manipula datele dintr-o baza de date utilizānd comenzile: INSERT, UPDATE si DELETE.

Puteti controla modificarile datelor utilizānd comenzile: COMMIT, SAVEPOINT si ROLLBACK.

Serverul Oracle garanteaza o vedere consistenta a datelor īn orice moment.

Protejarea poate fi implicita sau explicita.

Text Box: Trecerea īn revista a exercitiilor

. Inserarea de īnregistrari īn tabele
. Actualizarea si stergerea īnregistrarilor din tabele
. Controlul tranzactiilor


Īn aceste exercitii, veti adauga noi īnregistrari la tabelul MY_EMPLOYEE, veti actualiza si sterge date din tabel si va veti controla tranzactiile.

Exercitii:

Inserarea de date īn tabelul MY_EMPLOYEE.

Executati scriptul lab9_1.sql pentru a crea baza de date MY_EMPLOYEE, care va fi folosita pentru laborator.

Descrieti structura tabelului MY_EMPLOYEE pentru a identifica numele cāmpurilor.

Adaugati prima īnregistrare a tabelului din exemplul de mai jos. Nu folositi lista coloanelor īn clauza INSERT.

ID

LAST_NAME

FIRST_NAME

USERID

SALARY

Patel

Ralph

rpatel

Dancs

Betty

bdancs

Biri

Ben

bbiri

Newman

Chad

cnewman

Ropeburn

Audry

aropebur

Introduceti īn tabelul MY_EMPLOYEE si al doilea rānd de date din exemplul de mai sus. De data aceasta, specificati coloanele explicit īn clauza INSERT.

Verificati adaugarea la tabel.

Creati un script numit loademp.sql pentru a insera īnregistrari īn tabelul MY_EMPLOYEE interactiv. Cereti utilizatorului numele mic(FIRST_NAME), numele de familie (LAST_NAME) si salariul fiecarui angajat. Concatenati prima litera a numelui mic si primele 7 caractere ale numelui de familie pentru a crea userid.

Inserati urmatoarele doua īnregistrari īn tabel, prin intermediul scriptului creat.

Verificati adaugarile.

Salvati modificarile.

Stergerea si actualizarea datelor din tabelul MY_EMPLOYEE.

Modificati numele de familie al angajatului cu ID = 3 īn Drexler.

Modificati salariul la 1000 pentru toti cei cu salariul mai mic decat 900.

Verificati modificarile facute.

Stergeti-o pe Betty Dancs din tabelul MY_EMPLOYEE.

Verificati modificarile.

Salvati toate modificarile temporare.

Controlul tranzactiilor de date asupra tabelului MY_EMPLOYEE.

Inserati īn tabel ultima īnregistrare rulānd scriptul creat la punctul 6.

Verificati adaugarea.

Marcati un savepoint īn cadrul tranzactiei.

Stergeti toate īnregistrarile din tabel.

Verificati ca tabelul este gol.

Anulati cea mai recenta operatie DELETE fara a anula si INSERT -ul anterior.

Verificati ca rāndul nou este intact.

Salvati adaugarea, facānd-o permanenta.










Document Info


Accesari: 6061
Apreciat:

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site

Copiaza codul
in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate




Copyright © Contact (SCRIGROUP Int. 2021 )