Oracle回收站介绍

简介

oracle 回收站,从原理上来说就是一个数据字典表,放置用户删除(drop)掉的数据库对象信息。用户进行删除操作的对象并没有被数据库删除,仍然会占用空间。除非用户手工进行Purge或因存储空间不够而被数据库清掉。数据库有了这样的功能,能够减少很多不必要的麻烦。

如果一个表被删除,实际上是把表改名了(新表名前缀为BIN$ ),回收站里可以查到新名字,只是表的定义指向了回收站,被标识为可回收了,表的数据其实还在原来的位置。回收站里的表可以查询,但是不能执行DDL和DML操作。与该表有关联的对象,例如索引、约束和其他依赖对象都会在前面加BIN$$这个前缀。

启动和关闭回收站

可以使用下面的查询语句来查看回收站的当前状态:

SELECT Value FROM V$parameter WHERE Name = 'recyclebin'; 

如果返回值为“on”表明回收站是启动的,“off”表明是关闭的。

当然,你可以启动或者关闭回收站里的每个会话(session)和系统(system),代码如下:

ALTER SESSION SET recyclebin = ON; -- 启动回收站里的会话    
ALTER SYSTEM SET recyclebin = ON;  
ALTER SESSION SET recyclebin = OFF; -- 关闭回收站里的会话 
ALTER SYSTEM SET recyclebin = OFF; 

获取回收站里的内容

可以使用下面的任意一个语句来获得回收站中的对象:

SELECT * FROM RECYCLEBIN; -- 当前用户内容  
SELECT * FROM USER_RECYCLEBIN;  -- 当前用户内容    
SELECT * FROM DBA_RECYCLEBIN;   --所有内容

还原回收站里的内容

可以使用如下语法来还原被删除的对象:

FLASHBACK TABLE <<Dropped_Table_Name>> TO BEFORE DROP RENAME TO <<New_Table_Name>>;  

示例:
SELECT * FROM RECYCLEBIN; 语句查询结果如下:
在这里插入图片描述
可知,在2021-09-26:15:29:56时,数据库中进行了这样一个操作:drop了名为AUD_WTPARTALTERNATELINK的table,重命名为 BIN$zOHyeK/NbuPgU3JAnwqumw==$0后存放在回收站里。

现发现AUD_WTPARTALTERNATELINK表为误删,需要恢复出来,可执行如下命令:

FLASHBACK TABLE "BIN$zOHyeK/NbuPgU3JAnwqumw==$0" TO BEFORE DROP RENAME TO "AUD_WTPARTALTERNATELINK";

这里的RENAME是给删除的对象进行重新命名,是一个可选命令。

所以上面的命令可以简化为:

FLASHBACK TABLE "BIN$zdP/8v4GE8XgU3JAnwrt4Q==$0" TO BEFORE DROP;

清空回收站

清空包含两种情况:有条件的清空;全部清空。

清空特定表:

PURGE TABLE <<Table_NAME>>; 

清空特定索引:

PURGE INDEX <<Index_NAME>>; 

清空与该表空间有关联的对象:

PURGE TABLESPACE<<Table_NAME>>; 

清空特定用户的表空间对象:

PURGE TABLESPACE<<Table_NAME>> USER <<User_Name>>; 

清空回收站:

PURGE RECYCLEBIN; --当前用户清空回收站
PURGE DBA_RECYCLEBIN; --DBA清空回收站

删除(drop)表时直接从回收站中清空

DROP TABLE <<Table_Name>> PURGE; 

猜你喜欢

转载自blog.csdn.net/Ruishine/article/details/120653508