Recycle bin - Table Versions en Flashback - 10g

Het komt vaak voor dat gebruikers dezelfde tabel meerdere keren wil maken en droppen zoals:

 

SQL>CREATE TABLE TEST (COL1 NUMBER);
SQL>INSERT INTO TEST VALUES (1);
SQL>COMMIT;
SQL>DROP TABLE TEST;
SQL>CREATE TABLE TEST (COL1 NUMBER);
SQL>INSERT INTO TEST VALUES (2);
SQL>COMMIT;
SQL>DROP TABLE TEST;
SQL>CREATE TABLE TEST (COL1 NUMBER);
SQL>INSERT INTO TEST VALUES (3);
SQL>COMMIT;
SQL>DROP TABLE TEST;



Als je nu flashback wilt doen op de TEST tabel, wat zou dan de waarde van de kolom COL1 zijn? Normaal gesproken zou je denken dat de eerste versie van de tabel teruggehaald zou worden van de recycle bin, waar de waarde van de kolom COL1 1 is. Echter de derde versie wordt teruggehaald zodat de waarde van de kolom COL1, 3 zal zijn en niet 1.

Op dit moment kan je ook de andere versies van de gedropte tabel terughalen echter het bestaan van een tabel TEST zal dit niet toestaan. Je hebt nu 2 keuzes:

  • Gebruik de rename optie:

    SQL>FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST2; 
    SQL>FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST1;


wat de eerste versie van de tabel TEST terug zal zetten naar TEST1 en de tweede versie naar TEST2. De waardes van de kolom COL1 in TEST1 en TEST2 zullen respectievelijk 1 en 2 zijn.

  • Gebruik de specifieke recycle-bin namen van de tabellen die je terug wilt zetten. Om dat te doen moet je eerst achter de namen van de tabellen in de recycle bin zien te komen:

    SQL>FLASHBACK TABLE "BIN$04LhcpnoanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST2; 
    SQL>FLASHBACK TABLE "BIN$04LhcpnqanfgMAAAAAANPw==$0" TO BEFORE DROP RENAME TO TEST1;

Dat zal de 2 versies van de gedropte tabel terugzetten.

Let op...


De un-drop feature zet de tabel terug naar zijn originele naam maar niet de bijbehorende objecten als indexen en triggers, die de recycled namen houden. Objecten zoals views en procedures die op de tabel zijn gedefinieerd worden niet gecompileerd en blijven derhalve invalid. Deze oude namen moeten handmatig teruggehaald worden en dan tegen de flashed-back tabel gehouden worden. De informatie wordt bewaard in de USER_RECYCLEBIN view. Voor het flash-backen van de tabel kan je de volgende query gebruiken om de oude namen terug te halen:

SQL>SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE 
FROM USER_RECYCLEBIN
WHERE BASE_OBJECT = (SELECT BASE_OBJECT FROM USER_RECYCLEBIN
WHERE ORIGINAL_NAME = 'RECYCLETEST')
AND ORIGINAL_NAME != 'RECYCLETEST';

OBJECT_NAME ORIGINAL_N TYPE
------------------------------ ---------- --------
BIN$04LhcpnianfgMAAAAAANPw==$0 IN_RT_01 INDEX
BIN$04LhcpnganfgMAAAAAANPw==$0 TR_RT TRIGGER


Nadat de tabel is geflashed-back, zullen de indexes en triggers op de tabel RECYCLETEST genaamd zijn als in de OBJECT_NAME kolom. Uit de bovenste query kan je de originele naam als volgt gebruiken om de objecten te hernoemen:
SQL>ALTER INDEX "BIN$04LhcpnianfgMAAAAAANPw==$0" RENAME TO IN_RT_01; 
SQL>ALTER TRIGGER "BIN$04LhcpnganfgMAAAAAANPw==$0" RENAME TO TR_RT;



Een uitzondering zijn de bitmap indexes. Als die gedropt zijn, worden ze niet in de recycle bin geplaatst en dus zijn ze ook niet terug te halen. De constraint namen zijn ook niet terug te halen uit de view. Zij moeten uit andere bronnen worden hernoemt.

Overig gebruik van Flashback Tables


Flashback Drop Table is niet gelimiteerd aan de drop van een tabel. Gelijk aan flashback queries, is het ook mogelijk om een tabel terug te zetten naar een andere point in time, en de gehele tabel verruilen voor zijn “vroegere”versie. Het volgende voorbeeld laat het terughalen van een tabel zien naar een system change number (SCN) 2202666520.
SQL>FLASHBACK TABLE RECYCLETEST TO SCN 2202666520;


Deze feature gebruikt de Oracle Data Pump techniek om een ander tabel te creëren, gebruikt flashback om de tabel te vullen met data van de versie of die SCN en zal dan de originele tabel met de nieuwe. Om uit te vinden hoe ver terug je kan flashbacken kijk dan in de versioning feature van Oracle Database 10g. Het is ook mogelijk om een timestamp te specificeren in plaats van een SCN, in de flashback clause.

Zie ook:

Flashback table
Managen van de recycle bin

 

 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 302 gasten online