Visszafizetési tranzakció lekérdezés és visszaváltási táblázat az oracle-ben
Értékelés: 0/5
A FLASHBACK_TRANSACTION_QUERY nézet lehetővé teszi azon tranzakció vagy tranzakciók azonosítását, amelyek felelősek a megadott időintervallumon belül a táblázatban szereplő adatok bizonyos módosításaiért. A Flashback Tranzakció lekérdezése egyszerűen megkérdezi a FLASHBACK_TRANSACTION_QUERY nézetet, és információt nyújt a tranzakciókról. beleértve az SQL utasításokat is. Szükséges a tranzakciók egyetlen tranzakcióval vagy tranzakciók készletével meghatározott időtartamra történő törléséhez. Ez az eszköz nemcsak a logikai hibák kijavítását teszi lehetővé, hanem a tranzakciók ellenőrzését is az adatbázisban.
A Flashback Tranzakció lekérdezés az összes tranzakciós információt megkapja a visszavonási szegmensek közül. Ezért az UNDO_RETENTION paraméterhez beállított érték. Meghatározza, hogy a múltban milyen mélységben térhet vissza a törlési adatokhoz.
Flashback tranzakció lekérdezés használata
A FLASHBACK_TRANSACTION_QUERY nézet felkutatásához szükség van a SELECT ANY TRANSACTION rendszer jogosultságra. Ez a nézet olyan oszlopokat tartalmaz, amelyek lehetővé teszik a tranzakció időbélyegének azonosítását, a tranzakció végrehajtását végző felhasználónak, a tranzakció során végrehajtott tranzakció típusának és a forráskód letöltéséhez szükséges szegmensek visszavonásának. Az alábbi lista a FLASHBACK_TRANSACTION_QUERY nézet struktúráját mutatja.
A FLASHBACK_TRANSACTION_QUERY nézet a következő oszlopokat tartalmazza.
- START_SCN és START_TIMESTAMP azonosítják, amikor egy adott sor készült.
- A COMMIT_SCN és a COMMIT_TIMESTAMP a tranzakció végrehajtásakor jelentkeznek.
- XID. ROW_ID és UNDO_CHANGE # azonosítja a tranzakciót, a sort és a visszavonási számot.
- MŰKÖDÉS jelentése, mely DML műveletet hajtott végre - beillesztés, frissítés vagy törlés.
A jegyzethez! Ha az ÜZEMELÉS oszlopban található érték nem ismert. ez azt jelenti, hogy nincs elegendő információ a táblázat visszavonásakor a tranzakció művelet pontos típusának pontos azonosításához.
- LOGON_USER. A TABLE_NAME és a TABLE_OWNER a felhasználónevet, az asztalnevet és a séma nevét jelöli.
- Az UNDO_SQL bemutatja a pontos SQL utasítást, amelyet végre kell hajtani a tranzakció megszakításához. Íme egy példa egy olyan adattípusra, amely az UNDO_SQL oszlopban található:
Ha a Flashback Transaction Query műveletben részt vevő táblák bármelyikét tartalmazó sorokat tartalmazzák, vagy ha fürtözött táblákat használnak, akkor a Flashback Transaction Query használat előtt további naplózást kell engedélyezni az adatbázisban. Ez a következő SQL utasítással történik:
Az alábbi lekérdezés minden tranzakciót megjelenít, mind elkötelezett, mind aktív, minden lemondási szegmensben:
Az alábbi listában szereplő lekérdezés azt mutatja meg, hogyan kell meghatározni egy műveletet, amely megszünteti a tranzakciót és egy olyan SQL utasítást, amely ilyen lemondást hajt végre:
A fenti lista OPERATION oszlopa azt mutatja, hogy a lekérdezésben megadott időtartamra két beillesztést hajtottak végre. Az UNDO_SQL oszlopban megjelenik a pontos változat visszavonásához szükséges SQL utasítás, melyet az undo szegmensekből kell lekérni. Ebben az egyszerű példában csak két törlési utasítást látunk. Ezeket a lépéseket akkor kell elvégeznie, ha el kívánja dobni a lekérdezés által megjelenített betéteket. Azonban a tranzakciók jellemzően több DML-állítást tartalmaznak, és ebben az esetben a módosítások visszavonását annak a sorrendnek a visszavonásával kell végrehajtania, amelyben visszaadta a lekérdezést, hogy helyesen helyreállíthassa az adatokat eredeti állapotában.
Tanács. Ha az Oracle Flashback Query vagy az Oracle Flashback Transaction Query lekérdezést használja a kritikus adathibák kijavításához, fontolja meg a RETENTION_GARANTEE beállítását a táblázat visszavonásához. Ez biztosítja, hogy az adatbázis minden törlési szegmensben megőrizze a szükséges elavult törlési adatokat.
A Flashback Tranzakció lekérdezésre vonatkozó megfontolások
A Flashback Tranzakció lekérdezéssel kapcsolatban a következő megfontolásokat kell figyelembe venni.
- Minimális további naplózást tartalmaz, ha a műveletek kapcsolt vonalakkal és különleges tárolási struktúrákkal foglalkoznak, például fürtözött táblázatokkal.
- Az indextáblák lekérdezésekor a frissítési művelet mindig kétlépéses törlési / beillesztési műveletként jelenik meg.
- Ha a lekérdezés egy távoli táblát vagy egy távoli felhasználót tartalmaz, akkor objektumszámokat és felhasználói azonosítót ad vissza objektumnevek és felhasználónevek helyett.
Flashback tranzakció lekérdezés és flashback verziók megosztása
A Flashback Versions Query eszköz lehetővé teszi a különféle karakterkészletek kivonását, azok egyedi azonosítóit, a vonalverzió időbélyegeit, az SCN számokat és így tovább. Megmutatja, mi volt a sorban, és mi történt vele. A Flashback Tranzakciók lekérdezése eszköz viszont nemcsak azonosítja a művelet típusát, amely a string egyes változataihoz van folyamatban, de megadja azt az SQL kódot is, amely szükséges ahhoz, hogy visszatérjen az eredeti állapotába. Megmutatja, hogyan térhet vissza a sor előző verziójához.
E két eszköz képességei kombinálhatók, következetesen felhasználva auditok és kapcsolódó tevékenységek elvégzésére. Vegyünk egy példát, amely bemutatja, hogyan lehet kombinálni a Flashback Versions Query és a Flashback Tranzakciók lekérdezést a nem kívánt változások visszavonásához.
Először a Flashback Versions Query használatával azonosítunk egy adott táblázatban szereplő sorok összes változatát, amelyek egy bizonyos idő alatt megváltoztak, amint az az alábbi listában látható (ez megegyezik a cikk első felsorolásával).
Tegyük fel, hogy a fenti listában szereplő második sor a törlési műveletet mutatja (D). Hiba történt, ha az egyik felhasználó helytelenül törölte a karakterláncot. Mindössze annyit kell tennie, hogy a megfelelő SQL-beszámoló törlése eltávolítása - az, hogy egy ügylet (XID) ebből az eredményből Flashback változatok Kérdés és megtalálja azt a FLASHBACK_TRANSACTION_QUERY képviselet .A lista mutatja a lekérdezést, hogy meg kell végrehajtani.
Flashback táblázat
Az Oracle Flashback Table eszköz lehetővé teszi egy asztal visszaállítását a múltban egy bizonyos időpontban. Ez az eszköz információkra támaszkodik a törlést törlési adatbázis szegmensek behajtása az időpontban helyreállítása nélkül adatfájlokat vagy alkalmazásával archivált redo log fájlokat, hogy szükség van a hagyományos adatbázis-helyreállítási, hogy egy adott időpontban. A Flashback Table segítségével vissza lehet állítani a változásokat az időbélyeg vagy az SCN szám által megadott időtartamra.
Mert támaszkodik törlése adatátvitel adatbázis vagy annak bármely táblaterületekhez a stand-alone (kikapcsolt) állapotban van időszakában művelet Flashback tábla nem kell, hogy visszatérjen a táblázat az állami (backup helyett helyreállítása a fájlok). Az Oracle exkluzív DML zárolásokat állít be az asztalra vagy a visszaállítandó táblákra, de ezek a táblák online maradnak.
A Flashback táblázat működése
A Flashback tábla visszavonja az adatokat, hogy helyreállítsa az adatok sorát a DML utasítások által módosított táblák blokkjában, például az INSERT. UPDATE és DELETE. Nézzük meg a Flashback Table művelet sorrendjét.
A jegyzethez! Nem tudja visszaállítani a SYS felhasználói objektumokat.
Az első lépés az, hogy megbizonyosodjon arról, hogy a felhasználó végrehajtó a Flashback táblázat művelet az összes kiváltságokat, amely lehet Flashback ANYTABLE, vagy több meghatározott Flashback objektum jogosultsággal az asztalra szükséges. A felhasználónak rendelkeznie kell a SELECT jogosultságokkal is a táblán. INSERT, DELETE és ALTER.
A flashback műveletek nem védik az Oracle ROWID azonosítókat, amikor visszaállítják a sorokat a táblázatban megváltozott tömbökben, mivel DML műveleteket hajtanak végre munkájuk során. Ezek a DML műveletek módosítják az érintett sorok ROWID azonosítóit, ezért ügyeljünk arra, hogy engedélyezzük a táblázatok sorainak áthelyezését Flashback Table használatával:
Ha engedélyezi a sorok mozgását a táblázatban, készen áll arra, hogy visszamenőlegesen megnézze az asztalt bármely időpontban vagy bármilyen múltbeli SCN-számot, feltéve, hogy rendelkezésére állnak a szükséges információk a törlési táblaterületen.
A Flashback Table eszköz használata előtt olvassa el a teljes szintaxisát:
Íme egy példa, amely bemutatja, hogyan kell a táblázat retrospektívát végrehajtani az előző SCN-számhoz:
Tanács. Amikor a Flashback Table művelet befejeződött, a Flashback Table listában szereplő táblákhoz tartozó összes index is vissza fog térni az állapotba a tábla visszatérésekor. Az optimalizáló statisztikái azonban a táblázatban szereplő aktuális adatokat tükrözik.
Az idő megadható az SCN szám helyett időbélyegzéssel is:
A táblázatot egy nappal azután a következő üzemeltető visszaküldi:
Egynél több tábla retrospektív futtatását végezheti el, amint az a következő példában látható (először győződjön meg róla, hogy a táblázatban lévő sorokat áthelyezheti):
A Flashback Table művelet "in-place", on-line módon történik, ezért nem igényli az adatfájlok vagy táblaterületek offline állapotban történő fordítását, ellentétben a hagyományos visszaállítással egy adott időpontra. Az Oracle Database alapértelmezett letiltja az összes kapcsolódó kiváltó, és újra lehetővé teszi számukra befejezésekor a helyreállítása az asztalra, bár ez a viselkedés könnyű változtatni, hozzátéve építési ENABLE triggerek szereplő Flashback TABLE.
Hiányos törlési adatok hiányában az alábbi listában szereplő hiba előfordul, hogy visszaadja a táblát a régi állapotba, és ez azt jelenti, hogy a törlési adatok egy része felül lett írva. Sajnos a Flashback Table nem segít ebben az esetben, mert teljes mértékben a szükséges visszavonási adatok jelenlétére támaszkodik. Ebben az esetben az egyetlen megoldás a nagyméretű törlési táblaterület használata, vagy annak lehetővé tétele, hogy biztosítsák a törlési adatok megőrzésének eszközeit.
A Flashback Table működésének visszavonása
Ha kiderül, hogy a Flashback táblázat eredményei nem felelnek meg, akkor kiadhatja a FLASHBACK TABLE utasítást, hogy visszaadja az asztalt az első FLASHBACK TABLE hívás előtt.
Mielőtt a flashback tábla működését futtatná, fontos, hogy mindig emlékezzen az aktuális SCN-számra, így szükség esetén a FLASHBACK TABLE újbóli elhívásával megszakíthatja a műveletet. A SCN-hez. Az adatbázis aktuális SCN-számát a következő lekérdezés jeleníti meg:
A flashback táblázat korlátozásai
Számos korlátozás társul a Flashback táblahoz, amelynek legfontosabb elemei az alábbiak.
- Nem lehet visszagondolni a SYS tulajdonában lévő táblát. visszaállított objektumok vagy egy távoli tábla.
- Nem lehet visszamenőlegesen megnézni egy táblázatot a DDL művelet előtt, amely tartalmazza a táblázat szerkezetének módosításait, például oszlop törlését, táblázatok csonkítását, korlátozások hozzáadását vagy partíciókkal kapcsolatos műveletek végrehajtását, például egy rész hozzáadása vagy eltávolítása.
- A FLASHBACK utasítás egy tranzakciót tartalmaz, és a Flashback művelet teljes egészében végrehajtásra kerül. Ha a retrospektív művelet több táblát is lefed, az adott időpontban visszatér az állapotba, vagy az SCN-szám mindegyik táblázatban vagy ezek közül egyik sem.
- Ha az Oracle felismeri a korlátozások megsértését a Flashback művelet során, a művelet törlődik és a táblák eredeti állapotban maradnak.
- Amikor táblát csonkol, vagy olyan attribútumokat módosít, amelyek nem kapcsolódnak a tárhelyhez (a PCTFREE.INITTRANS és a MAXTRANS kivételével), akkor nem végezhet retrospektív műveletet a változást megelőző idő előtt.
A jegyzethez! A teljes retrospektív műveletet egyetlen tranzakcióként hajtják végre