CATEGORII DOCUMENTE |
Segmentele de revenire sunt folosite pentru inregistrarea actiunilor unei tranzactii SQL in vederea derularii inapoi a acestora daca se doreste acest lucru. Un segment de revenire restabileste baza de date in starea in care se gasea la ultimul punct de salvare. Fiecare tranzactie foloseste un singur segment de revenire pentru a stoca toate informatiile de revenire.
Header-ul segmentului de revenire contine un tabel de tranzactii care contine informatii despre tranzactiile curente care folosesc segmente de revenire. Printre aceste informatii se numara numele fisierului de date si identificatorul blocului pentru datele care au fost modificate.
Scopul folosirii segmentelor de revenire:
Revenirea tranzactiei: atunci cand un utilizator actualizeaza o linie intr-un tabel, vechea imagine a coloanelor modificate este salvata in segmentul de revenire asociat tranzactiei, sub forma unei instructiuni ce readuce linia respectiva la starea initiala. De exemplu, daca un utilizator insereaza o linie intr-un tabel, o instructiune delete corespunzatoare este stocata in segmentul de revenire. Daca se doreste revenirea, server-ul Oracle restaureaza valorile originale, executand instructiunea din segmentul de revenire.
Recuperearea tranzactiei: Daca are loc un esec al instantei in timpul derularii unei tranzactii, server-ul Oracle trebuie sa revina asupra schimbarilor nesalvate atunci cand baza de date va fi repornita. Recuperarea este posibila datorita faptului ca modificarile efectuate asupra segmentelor de revenire sunt protejate de catre fisierele de redolog.
Atata timp cat tranzactia este in curs, ceilalti utilizatori ai bazei de date nu pot vedea modificarile efectuate de catre tranzactie. Odata ce utilizatorul a inceput modificarea datelor, el va fi singura persoana ce poate vizualiza aceste modificari pana cand toate aceste schimbari vor fi salvate. In acelasi timp, server-ul Oracle initiaza mecanismul de blocare a blocurilor de date ce sunt supuse modificarilor, nefiind permis astfel modificari ale acestora de catre o alta tranzactie ulterioara. Prin acest mecanism de blocare server-ul Oracle impiedica doi sau mai multi utilizatori sa modifice aceleasi date. Aceste modificari odata salvate datele pot fi vizualizate si accesate de catre ceilalti utilizatori ai bazei, blocarerea blocurilor de date fiind dezactivata.
Server-ul Oracle garanteaza citirea consistenta a datelor chiar daca acestea sunt in curs de modificare de catre o alta tranzactie.
Astfel, cand un server Oracle incepe executia unei comenzi SELECT, el determina SCN- ul curent si se asigura ca orice blocuri de date accesate, modificate si nesalvate inainte de acest SCN nu sunt procesate de catre aceasta tranzactie. Consideram cazul inceperii executarii unei interogari de lunga durata, timp in care au fost efectuate mai multe modificari. Daca liniile modificate nu au fost salvate la inceputul interogarii server-ul Oracle construieste o imagine consistenta a liniilor, regasind imaginea anterioara modificarilor efectuate din segmentele de revenire. Acestei imagini consistente a liniilor, astfel creata in memorie, i se aplica interogarea initiala.
Segmentul de revenire sistem: este creat in spatiul-tabel sistem la crearea bazei de date. Acest segment de revenire poate fi folosit numai la crearea obiectelor din spatiu-tabel sistem. Segmentul de revenire sistem functioneaza identic in ambele moduri de lucru: manual si automat.
Segmente de revenire non-sistem: o baza de date ce are spatii-tabele multiple necesita cel putin un segment de revenire non-sistem pentru modul de lucru manual sau un segment de revenire non-sistem pentru modul de lucru automat.
Pentru modul de lucru manual un segment de revenire non-sistem creat de catre administrator poate fi utilizat pentru modificarile facute obiectelor din orice spatiu-tabel non-sistem. Exista doua tipuri de segmente de revenire non-sistem:
segmentele de revenire private sunt segmentele ce sunt aduse online de catre o instanta deoarece ele sunt declarate in fisierul de parametrii al bazei de date. Acestea pot fi aduse online executind comanda ALTER ROLLBACK SEGMENT.
Segmente de revenire public sunt folosite de catre REAL APPLICATION CLUSTER.
Segmente de revenire amanate: pot fi create atunci cand un spatiu-tabel este adus in starea offline. Acestea sunt folosite de catre tranzactiile de revenire atunci cand spatiu-tabel este adus online. Sunt sterse automat atunci cand nu mai sunt de folos. Deoarece aceste segmente sunt create de catre server-ul Oracle, nu este nevoie a fi intretinute de catre administrator.
Concepte:
Datele de revenire sunt administrate utilizand spatii-tabel de revenire.
Se aloca un singur spatiu-tabel pentru o instanta cu suficient spatiu pentru a satisface necesitatile de incarcare a bazei de date.
Server-ul Oracle mentine automat datele de revenire in spatiul-tabel de revenire
Segmentele de revenire automate sunt create utilizand urmatoarea conventie de nume:
_SYSSMUn$
Parametrii de configurare din fisierul de initializare:
UNDO_MANAGEMENT: AUTO sau MANUAL
UNDO_TABLESPACE: se specifica un spatiu-tabel particular pentru a fi folosit ca spatiu-tabel de revenire. Acest parametru poate fi initializat si dinamic, utilizand comanda ALTER SYSTEM SET undo_tablespace = UNDOTBS;
Administrarea automata a segmentelor de revenire necesita un spatiu-tabel. Pot exista mai mult de un singur spatiu-tabel in baza de date, dar unul singur poate fi activ. Se pot crea spatii-tabel de revenire in urmatoarele circumstante:
La crearea bazei de date prin adaugarea clauzei specifice in comanda de creare a bazei de date.
Ulterior crearii bazei de date utilizand comanda:
CREATE UNDO TABLESPACE undotbs DATAFILE '/opt/oracle/rollback/undotbs.dbf' SIZE 20M.
Alterarea spatiilor-tabel de revenire se realizeaza utilizand comanda:
ALTER TABLESPACE undotbs
ADD DATAFILE "/opt/oracle/rollback/undotbs2.dbf"
SIZE 30M
AUTOEXTEND ON;
Schimbarea spatiilor-tabel de revenire se realizeaza dinamic cu comanda:
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2;
Stergerea unui spatiu-tabel de revenire se poate realiza numai daca acesta nu este folosit curent de catre instanta. Pentru a sterge un spatiu-tabel de revenire acesta trebuie inlocuit cu un altul si apoi sters, dar numai dupa ce toate tranzactiile curente sunt complete. Se va verifica existenta tranzactiilor curente interogand vederile dinamice V$rollname, V$rollstat.(starea segmentului nu trebuie sa fie PENDING ONLINE):
SELECT a.name, b.status
FROM v$rollname a, v$rollstat b
WHERE a.name IN (SELECT segment_name
FROM dba_segments
WHERE tablespace_name = "UNDOTBS")
AND a.usn = b.usn;
Comanda de stergere:
DROP TABLESPACE UNDOTBS2;
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1905
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved