Recycle bin - Flashback Table - 10g
Een tabel terugzetten die per ongeluk is weggegooid is een simpel klusje als je gebruik maakt van de Flashback Table mogelijkheden in Oracle 10g

Hier is een scenario dat vaker voorkomt dan je lief is. Een user gooit per ongeluk een erg belangrijke tabel weg en natuurlijk moet deze zo snel mogelijk weer beschikbaar zijn.

Oracle9i introduceerde het concept van de Flashback Query optie om data terug te halen van een tijstip in het verleden, maar het kan geen DDL operaties zoals drop table ‘flashbacken’. De enige mogelijkheid in dat geval is om een point in time recovery te doen in een andere database en dan middels export/import deze opnieuw te creëren, of op enige andere manier. Deze procedure vraagt veel inspanning van de DBA een uiteraard veel tijd. En dan hebben we het nog niet eens over het gebruik van een andere database met clonen.

Gebruik de Flashback Table mogelijkheid in Database 10g, wat het terugzetten van de gedropte tabel even makkelijk maakt als het uitvoeren van een paar statements. Eerst kijken we even welke tabellen we in het schema hebben:

SQL> select * from tab; 

TNAME TABTYPE CLUSTERID
------------------------ ------- ----------
RECYCLETEST TABLE


Drop de table:
SQL> drop table recycletest;
Table dropped.


Check de status van de tabel.

SQL> select * from tab; TNAME                          TABTYPE  CLUSTERID 
------------------------------ ------- ----------
BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE


De tabel RECYCLETEST is weg maar let op de aanwezigheid van de nieuwe BIN$04LhcpndanfgMAAAAAANPw==$0. Dit is gebeurd: De gedropte tabel RECYCLETEST, is in plaats van compleet te zijn verdwenen, hernoemt naar systeem gedefinieerde naam. Het blijft in dezelfde tablespace en dezelfde structuur als de originele tabel. Als er indexen of triggers zijn gedefinieerd op de tabel, dan worden deze ook hernoemt, gebruik makend van dezelfde naamconventie als de tabel. Alle afhankelijke bronnen zolas procedures aken invalid; de triggers en indexen van de originele tabel worden op de hernoemde table BIN$04LhcpndanfgMAAAAAANPw==$0 gezet,met behoud van de complete tructuur van het dropte object.

 

De tabel en zijn bijbehorende objecten worden in logische container geplaatst genaamd de “recycle bin”, welke gelijk is aan die op je PC. Echter de objecten worden niet verplaatst van de tablespace waar ze eerder in zaten, ze bezetten nog steeds de ruimte aldaar. De recycle bin is meer een logische structuur dat de gedropte objecten catalogiseert. Met het volgende SQL*Plus commando kan je de inhoud van de recycle bin zien (je hebt wel SQL*Plus 10.1 nodig om dit te kunnen doen):

SQL> show recyclebin 
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ ------------------
RECYCLETEST BIN$04LhcpndanfgMAAAAAANPw==$0 TABLE 2004-02-16:21:13:31

Dit laat de originele tabelnaam alsmede de nieuwe naam, welke hetzelfde is als de naam die we eerder we zagen net na de drop. Om de tabel terug te zetten, is het enige dat je hoeft te doen het FLASHBACK TABLE commando geven:

SQL> FLASHBACK TABLE RECYCLETEST TO BEFORE DROP;
FLASHBACK COMPLETE.
SQL> SELECT * FROM TAB; TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
RECYCLETEST TABLE

En kijk , de tabel is zonder moeite teruggezet. Als je nu de recycle bin bekijkt zal je zien dat deze leeg is.
Onthoud dat indien er een tabel in de recycle bin beland, deze niet de ruimte vrijgeeft in de originele tablespace. Om de ruimte vrij te geven zal je de recycle bin moeten purgen:

SQL>PURGE RECYCLEBIN; 


Maar wat als je de tabel compleet wil weggooien zonder de noodzaak van de flashback mogelijkheid? Dan kan je het volgende commando gebruiken:


SQL>DROP TABLE RECYCLETEST PURGE;


Dit commando zal de naam niet veranderen maar de tabel definitief weggooien , als in eerder versie van Oracle.

Zie ook:

Managen van de recycle bin
Table Versions en Flashback






 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 285 gasten online