参考:
https://www.cnblogs.com/kerrycode/p/4008362.html
检查回收站的开启状态:
SHOW PARAMETER RECYCLEBIN;
或
SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='recyclebin';
默认是开启的,我们也建议开启,如需关闭(两个级别),则:
ALTER SYSTEM SET RECYCLEBIN=OFF;
ALTER SESSION SET RECYCLEBIN=OFF;
SHOW PARAMETER RECYCLEBIN;
开启回收站(两个级别):
ALTER SYSTEM SET RECYCLEBIN=ON;
ALTER SESSION SET RECYCLEBIN =ON;
查看回收站对象:
show recyclebin
其中RECYCLEBIN是USER_RECYCLEBIN 的同义词
COL OBJECT_NAME FOR A30
COL ORIGINAL_NAME FOR A8
COL OPERATION FOR A9
COL TYPE FOR A8
COL DROPTIME FOR A19
COL TS_NAME FOR A30
SELECT OBJECT_NAME ,ORIGINAL_NAME ,OPERATION ,TYPE ,DROPTIME ,TS_NAME FROM RECYCLEBIN;
或
SELECT * FROM RECYCLEBIN;
查看当前数据库用户的回收站对象:
SELECT * FROM USER_RECYCLEBIN;
sysdba查看数据库回收站所有对象:
SELECT * FROM DBA_RECYCLEBIN;
为了避免被删除的表与同类对象名称的重复,被删除的表以及相依的对象放到回收站后,ORACLE数据库会对被删除的对象名称进行重命名
表现为即使ORIGINAL_NAME相同,但RECYCLEBIN_NAME也会不同,RECYCLEBIN_NAME的命名规则为BIN$GUID$Version
查看回收站中表的数据:
SELECT * FROM "BIN$BLmi9vlwN3TgUKjAgYxoiA==$0";
还原回收站被删除的表、索引等对象:
FLASHBACK TABLE TEST TO BEFORE DROP;
如果两个相同名字的表TEST被删除了,此时闪回被DROP的表TEST,实质是闪回最后一个被删除的表(后进先出原则)
如果想闪回再之前的那个表需要在闪回过程中进行重命名操作:
flashback table test to before drop rename to test_2;
否则会报ORA-38312: original name is used by an existing object
如果想精确闪回表需要通过RECYCLEBIN_NAME进行闪回:
flashback table "BIN$BLmi9vlwN3TgUKjAgYxoiA==$0" to before drop;
删除表,并让表不进回收站,而是彻底删除:
DROP TABLE TABLE_NAME PURGE;
当表空间被回收站数据完全占满,以至于必须扩展数据文件来容纳更多数据时,可以说表空间处于“空间压力”情况下。
此时,对象以先进先出的方式从回收站中自动清除。在删除表之前,相关对象(如索引)被删除。
同样,空间压力可能由特定表空间定义的用户限额而引起。
表空间可能有足够的空余空间,但用户可能将其在该表空间中所分配的部分用完了。
在这种情况下,Oracle 自动清除该表空间中属于该用户的回收站对象。
如果在删除名为 TEST 的特定表之后需要从回收站中清除它,可以执行:
PURGE TABLE TABLE_NAME;
或者指定RECYCLEBIN_NAME:
PURGE TABLE "BIN$04LhcpndanfgMAAAAAANPw==$0";
PURGE命令将从回收站中删除表 TEST 及所有相关对象,如索引、约束等,
仅从回收站删除索引,不删除表数据:
PURGE INDEX IN_TEST1_01;
清除USERS表空间所有对象:
PURGE TABLESPACE USERS;
只清除表空间中特定的用户的对象:
PURGE TABLESPACE USERS USER SCOTT;
清空当前用户回收站中的对象:
PURGE RECYCLEBIN;
sysdba权限整个清空回收站:
PURGE DBA_RECYCLEBIN;
注意事项:
1:只能用于非系统表空间和本地管理的表空间
2:对象的参考约束不会被恢复,指向该对象的外键约束需要重建
3:对象能否恢复成功,取决于对象空间是否被覆盖重用
4:当删除表时,依赖于该表的物化视图也会同时删除,但是由于物化视图并不会放入recycle binzhong,
因此当你执行flashback drop时,并不能恢复依赖其的物化视图,需要手工重建
5:对于回收站(Recycle Bin)中的对象,只支持查询。不支持任何其他DML、DDL等操作