Haben Sie sich vielleicht schon einmal gewundert, warum Sie nach dem Löschen einer Tabelle keinen freien Speicherplatz gewonnen haben, aber dafür plötzlich Objekte mit Namen BIN$c7WXyzMkT1q9DglxITmbRw==$0 (oder so ähnlich) vorhanden sind
Das liegt an einem Feature names RECYCLE BIN.
Durch einen (alten) DROP TABLE-Befehl wird eine Tabelle nicht mehr - wie in den vorangegangenen Versionen - endgültig gelöscht und der Speicherplatz sofort freigegeben, sondern die Tabelle und alle darauf liegenden Indizes (inkl. Constraints) werden umbenannt und dem Recycle Bin zugeordnet. Der Inhalt des Recycle Bin wird somit weiter zur Quota des Benutzers gezählt.
Views zu Recycle Bin
Folgende Befehle zeigen den Inhalt des eigenen "Papierkorbs" an:
SELECT * FROM recyclebin;
-- oder
SELECT * FROM user_recyclebin;
-- oder
SHOW RECYCLEBIN
Und über folgenden SELECT kann sich der Administrator den Recycle Bin der gesamten Datenbank anzeigen lassen:
SELECT * FROM dba_recyclebin;
Einsatz des Recycle Bin
Im ersten Beispiel soll die Tabelle EMP gelöscht und anschließend wieder hergestellt werden.
DROP TABLE emp;
SELECT object_name, object_type FROM user_objects
WHERE object_name LIKE 'BIN$%';
OBJECT_NAME OBJECT_TYPE
------------------------------ -------------------
BIN$c7WXyzMkT1q9DglxITmbRw==$0 INDEX
BIN$vvz7kZGhSoqCVWbdTtoSbQ==$0 TABLE
Hinweis:
Die gelöschten Objekte werden nicht mehr in der USER_OBJECTS-View angezeigt. Gesehen werden sie nur noch in der View USER_RECYCLEBIN oder über:
SHOW RECYCLEBIN
ORIGNAME_PLUS_SHOW_RECYC OBJECTNAME_PLUS_SHOW_RECYC OBJTYPE_PLUS_SHOW_RECYC
DROPTIME_PLUS_SHOW_
------------------------ ------------------------------ ----------------------- -------------------
EMP BIN$vvz7kZGhSoqCVWbdTtoSbQ==$0 TABLE 2018-05-26:09:42:33
FLASHBACK TABLE emp TO BEFORE DROP;
-- die Tabelle wird unter ihrem alten Namen wieder hergestellt.
Indizes und Constraints bekommen beim Flashback ihren alten Namen nicht automatisch wieder. Sie müssen extra umbenannt werden:
ALTER INDEX "BIN$c7WXyzMkT1q9DglxITmbRw==$0" RENAME TO pk_emp;
ALTER TABLE emp RENAME CONSTRAINT "BIN$c7WXyzMkT1q9DglxITmbRw==$0"
TO pk_emp;
Im zweiten Beispiel wird die Tabelle EMP endgültig gelöscht und der Speicherplatz freigegeben.
DROP TABLE emp PURGE;
-- alternativ
DROP TABLE emp;
PURGE TABLE emp;
-- oder
PURGE RECYCLEBIN;
-- alle Objekte aus dem Benutzer-Papierkorb werden endgültig gelöscht
Ausschalten des Recycle Bin
Vielleicht erscheint dem ein oder anderen Benutzer das Recycle Bin-Konzept überflüssig und er möchte gerne auf dieses Feature verzichten. Da aus Gewohnheit die PURGE-Option beim Löschen aber vergessen wird und der "Papierkorb" somit noch einmal separat geleert werden muss, kann dieses Verhalten auch ausgeschaltet werden.
SHOW PARAMETER recyclebin
ALTER SESSION SET recyclebin = OFF;
-- oder
ALTER SYSTEM SET recyclebin = OFF;
Weitere Tipps zu Recycle Bin
Tabellen der Benutzer SYS und SYSTEM werden nicht in den Recycle Bin verschoben."
Beim Löschen von Tablespaces oder Benutzern werden die Tabellen nicht in den Recycle Bin verschoben."
SELECT-Zugriffe sind auf die Tabellen des Recycle Bin unter dem vom System-generierten Namen möglich. DDL- und DML-Anweisungen sind nicht zulässig und ergeben den Fehler ORA-38301."
Die Objekte im Recycle Bin werden automatisch gelöscht, wenn die Quota eines Benutzers ausgeschöpft wäre oder ein Tablespace erweitert werden müsste, weil kein Platz mehr verfügbar ist."
Beim Wiederherstellen einer Tabelle müssen eventuelle Fremdschlüssel manuell erzeugt werden."