Întrebare de tranzacție Flashback și tabel de reflexie în oracol

Evaluare: 0/5

Vizualizarea FLASHBACK_TRANSACTION_QUERY vă permite să identificați o tranzacție sau tranzacții care sunt responsabile pentru anumite modificări ale datelor din tabel care au avut loc în intervalul de timp specificat. Întoarcerea Flashback Transaction Query audiază pur și simplu vizualizarea FLASHBACK_TRANSACTION_QUERY și oferă informații despre tranzacții. inclusiv instrucțiunile SQL. Este necesar pentru anularea modificărilor efectuate de o singură tranzacție sau de un set de tranzacții pentru o anumită perioadă de timp. Acest instrument vă permite nu numai să corectați erorile logice, ci și să efectuați operațiuni de audit în baza de date.

Feedback Transaction Query acceptă toate informațiile despre tranzacții din segmentele de anulare. Prin urmare, valoarea setată pentru parametrul UNDO_RETENTION. Aceasta determină cât de adânc în trecut puteți reveni pentru a obține datele de anulare.

Utilizarea interogării tranzacției Flashback

Pentru a sincroniza vizualizarea FLASHBACK_TRANSACTION_QUERY, aveți nevoie de privilegiul SYSTEM SELECT ANY TRANSACTION. Această vizualizare conține coloane care vă permit să identificați marca de timp a tranzacției, utilizatorul care a executat tranzacția, tipul de tranzacție efectuat în timpul tranzacției și segmentele de anulare necesare pentru a prelua șirul sursă. Listarea de mai jos arată structura vizualizării FLASHBACK_TRANSACTION_QUERY.

Vizualizarea FLASHBACK_TRANSACTION_QUERY include următoarele coloane.

  • START_SCN și START_TIMESTAMP sunt identificate atunci când un rând specific a fost creat.
  • COMMIT_SCN și COMMIT_TIMESTAMP sunt raportate când tranzacția a fost angajată.
  • XID. ROW_ID și UNDO_CHANGE # identifică tranzacția, rândul și numărul de revocare al modificării respectiv.
  • Rapoartele de funcționare care au efectuat operația DML - inserați, actualizați sau ștergeți.

La nota! Dacă valoarea din coloana OPERAȚIE este necunoscută. acest lucru înseamnă că nu există suficiente informații în spațiul tabelului de refuz pentru a identifica corect tipul exact al operațiunii de tranzacție.

  • LOGON_USER. TABLE_NAME și TABLE_OWNER reprezintă numele de utilizator, numele tabelului și numele schemei.
  • UNDO_SQL arată exact instrucțiunea SQL care trebuie executată pentru a anula tranzacția. Iată un exemplu de tip de date care poate fi găsit în coloana UNDO_SQL:

Dacă oricare dintre tabelele care participă la operația Flashback Transaction Query conține rânduri asociate sau dacă sunt utilizate tabele cu grupuri, trebuie să fie activată o logare suplimentară în baza de date înainte de utilizarea interogării Flashback Transaction Query. Aceasta se face folosind următoarea instrucțiune SQL:

Interogarea de mai jos va afișa toate tranzacțiile, atât cele angajate, cât și cele active, în toate segmentele de anulare:

Interogarea din lista de mai jos arată cum se definește o operație care va anula o tranzacție și o instrucțiune SQL specifică care va efectua o astfel de anulare:

Coloana OPERAȚIE din lista de mai sus arată că pentru perioada de timp specificată în interogare au fost efectuate două inserări. Coloana UNDO_SQL arată exacta instrucțiune SQL pe care trebuie să o executați pentru a anula modificările - această informație este preluată din segmentele de anulare. În acest exemplu simplu, vedem doar două instrucțiuni de ștergere. Trebuie să finalizați acești pași dacă doriți să renunțați la inserțiile afișate de interogare. Cu toate acestea, tranzacțiile conțin, de obicei, mai multe instrucțiuni DML și, în acest caz, trebuie să aplicați anularea modificărilor în ordinea în care a returnat interogarea pentru a restabili corect datele în starea inițială.

Consiliul. Dacă intenționați să utilizați interogările Oracle Flashback Query sau Oracle Flashback Transaction Query pentru a remedia erorile de date critice, luați în considerare aplicarea setării RETENTION_GARANTEE pentru spațiul de tabelă anulează. Acest lucru asigură că baza de date păstrează datele de anulare necesare în toate segmentele de anulare.

Considerații privind interogarea tranzacției Flashback

În ceea ce privește interogarea cu privire la tranzacțiile Flashback, trebuie luate în considerare următoarele considerații.

  • Includeți logarea suplimentară minimă dacă operațiunile se ocupă de șiruri de legături și de structuri speciale de stocare, cum ar fi tabele grupate.
  • Când interogați tabelele index, operația de actualizare este afișată întotdeauna ca o operație de ștergere / lipire în doi pași.
  • Dacă interogarea include o tabelă la distanță sau un utilizator de la distanță, aceasta returnează numerele de obiecte și ID-urile utilizatorilor în locul numelor de obiecte și a numelor de utilizatori.

Partajarea interogării Flashback Transaction Query și Flashback Versions Query

Instrumentul Flashback Versions Query vă permite să extrageți diferite versiuni ale unui șir, împreună cu identificatorii lor unici, marcajele temporale ale versiunii de linie, numerele SCN și așa mai departe. Arată ce era pe linie și ce sa întâmplat cu ea. Instrumentul Flashback Transactions Query, pe de altă parte, nu numai că identifică tipul de operație efectuat cu fiecare versiune a șirului, dar oferă, de asemenea, codul SQL necesar pentru ao readuce la starea inițială. Aceasta arată cum să reveniți la versiunea anterioară a liniei.

Capacitățile acestor două instrumente pot fi combinate, utilizându-le în mod consecvent pentru audit și activități conexe. Luați în considerare un exemplu care demonstrează cum să combinați Interogarea Flashback Versions Query și Flashback Transactions Query pentru a anula modificările nedorite ale datelor.

În primul rând, folosim Întrebarea versiunilor Flashback pentru a identifica toate versiunile unui rând într-un anumit tabel care s-au schimbat într-o perioadă de timp, după cum se arată în lista de mai jos (aceasta este identică cu prima înregistrare din acest articol).

Să presupunem că a doua linie din lista de mai sus arată operația de ștergere (D). În mod eronat, unul dintre utilizatori a șters erorile șirul. Tot ce trebuie să faceți pentru a obține corect SQL declarație pentru anularea îndepărtării - este de a lua un ID de tranzacție (XID) din acest rezultat versiuni Flashback Query și găsi în reprezentare FLASHBACK_TRANSACTION_QUERY .żn Listarea de mai jos arată o interogare care aveți nevoie pentru a efectua.

Tabelul Flashback

Instrumentul Oracle Flashback Table vă permite să restaurați o tabelă de la un moment dat în timp în trecut. Acest instrument se bazează pe informații din segmentele de baze de date de anulare a rezervării pentru a efectua recuperarea până la punctul în timp fără a restabili orice fișiere de date sau aplicarea fișierelor redo log arhivate, care este impusă de recuperare a bazei de date tradiționale la un anumit punct în timp. Tabelul Flashback poate fi folosit pentru a redirecționa modificările la timpul trecut specificat de marca de timp sau de numărul SCN.

Deoarece vă bazați pe anularea datelor pentru a reveni la starea tabelului (în loc să restaurați fișierele de rezervă), nu este nevoie să traduceți baza de date sau oricare dintre spațiile de tabel într-o stare autonomă (dezactivată) pe durata operației. Oracle stabilește blocări DML exclusive pe tabel sau tabele care sunt restaurate, dar aceste tabele rămân online.

Cum funcționează Flashback Table

Flashback Table utilizează informații anulează pentru a restabili rândurile de date în blocuri de tabele modificate prin declarații DML, cum ar fi INSERT. UPDATE și DELETE. Să aruncăm o privire secvențială asupra pașilor din operația Flashback Table.

La nota! Nu puteți restabili obiectele utilizatorului SYS.

Primul pas este să vă asigurați că utilizatorul care efectuează operația Flashback Table are toate privilegiile care pot fi fie FLASHBACK ANYTABLE, fie privilegiul de obiect FLASHBACK mai specific pe tabelul cerut. De asemenea, utilizatorul trebuie să aibă privilegii SELECT pe masă. INSERT, DELETE și ALTER.

Operațiile flashback nu protejează identificatorii ROWID Oracle atunci când restaurează rândurile în blocurile modificate ale tabelului, deoarece efectuează operații DML în munca lor. Aceste operații DML modifică identificatorii ROWID ai rândurilor afectate, deci trebuie să vă asigurați că permiteți mutarea rândurilor în tabele utilizând instrumentul Flashback Table:

Permițând mișcarea rândurilor în tabel, sunteți gata să vizualizați retrospectiv la masă în orice moment sau la orice număr SCN în trecut, cu condiția să aveți informațiile necesare în spațiul tabelului de anulare.

Înainte de a utiliza instrumentul Flashback Table, consultați sintaxa completă:

Iată un exemplu care arată cum să efectuați o retrospectivă a tabelului la numărul SCN anterior:

Consiliul. Când operația Flashback Table este finalizată, toți indiciile legate de tabelele din lista tabelului Flashback vor fi returnate, de asemenea, la starea în momentul în care se întoarce tabelul. Cu toate acestea, statisticile optimizatorului vor reflecta datele curente din tabel.

De asemenea, puteți specifica ora specificând un marcaj de timp în locul numărului SCN:

Tabelul este returnat cu o zi în urmă utilizând următorul operator:

Puteți rula o retrospectivă pentru mai multe table simultan, așa cum se arată în exemplul următor (mai întâi trebuie să vă asigurați că puteți deplasa rânduri în tabel):

operațiune Flashback Tabelul se realizează „în loc“, on-line, și, prin urmare, nu necesită transferul de fișiere de date sau spațiu tabelă într-o stare off-line, în contrast cu recuperarea tradițională la un anumit moment în timp. Oracle Database implicit dezactivează toate declanșatoare asociate și să le reactivează la finalizarea restaurării mesei, cu toate că acest comportament este ușor să se schimbe, adăugând construcții ENABLE declanșatori operatorul FLASHBACK TABLE.

În absența unor date de anulare suficiente, eroarea afișată în lista de mai jos apare pentru a returna tabelul în starea veche, ceea ce înseamnă că o parte din datele de anulare au fost suprascrise. Din păcate, tabelul Flashback nu ajută în acest caz, deoarece se bazează în întregime pe prezența informațiilor necesare pentru anulare. Singura soluție în acest caz este de a folosi spațiul de masă de anulare pe scară largă sau de a permite mijloacelor să se asigure că datele de anulare sunt păstrate.

Anulați funcționarea tabelului Flashback

Dacă se dovedește că rezultatele tabelului Flashback nu satisfac, puteți emite din nou instrucțiunea TABEL FLASHBACK pentru a returna tabelul în starea în care se afla înainte de primul apel FLASHBACK TABLE.

Înainte de a efectua operația Flashback Table, este important să rețineți întotdeauna numărul SCN curent, astfel încât, dacă este necesar, puteți anula operația apelând din nou FLASHBACK TABLE. SCN. Numărul SCN actual al bazei de date este afișat de următoarea interogare:

Limitările tabelului Flashback

Mai multe limitări sunt asociate cu Flashback Table, dintre care cele mai importante sunt enumerate mai jos.

  • Nu este posibil să retrospectezi un tabel deținut de SYS. obiecte restaurate sau o masă la distanță.
  • Nu puteți examina retrospectiv o tabelă înainte de orice operație DDL care include modificări ale structurii tabelului, cum ar fi ștergerea unei coloane, trunchierea unui tabel, adăugarea constrângerilor sau efectuarea operațiilor legate de partiții, cum ar fi adăugarea sau eliminarea unei secțiuni.
  • Instrucțiunea FLASHBACK include o singură tranzacție, iar operația Flashback este fie complet executată, fie nu. Dacă operația retrospectivă acoperă mai multe tabele, reveniți la starea într-un moment dat sau numărul SCN trebuie să fie toate aceste tabele sau niciuna dintre ele.
  • Dacă Oracle detectează orice încălcare a constrângerilor în timpul operației Flashback, operația va fi anulată și tabelele vor rămâne în starea inițială.
  • Atunci când trunchiați o masă sau modificați orice atribute care nu sunt legate de spațiul de stocare (altul decât PCTFREE.INITTRANS și MAXTRANS), nu puteți efectua o operație retrospectivă în momentul înaintea acestei modificări.

La nota! Întreaga operație retrospectivă se realizează ca o singură tranzacție

Articole similare