数据库
首页 > 数据库> > ORACLE恢复删除的表数据

ORACLE恢复删除的表数据

作者:互联网

1、oracle中有recyclebin表,用来保存用户删除的表的相关信息,相当于回收站。在recyclebin打开的情况下,用户drop掉的对象并没有被数据库删除,仍然会占用空间,除非用户手工进行purge或因为存储空间不够而被数据库清掉。

show parameter recyclebin;
--运行该SQL可以知道recyclebin这个表是否是开启的

a、recycle bin有dba_recyclebin和user_recyclebin两种视图

     dba_recyclebin放置所有用户drop掉的对象,不含system表空间,包含以下字段

OWNER                --drop掉的对象所属的用户
OBJECT_NAME          --对象名,命名规范是BIN$unique_id$version,BIN代表RecycleBin,unique_id是数据库中该对象的唯一标志,24个字符长度,version表示该对象的版本号
ORIGINAL_NAME        --原始表名
OPERATION            --操作,有drop
TYPE                 --类型,有index、table、lob、lob index
TS_NAME              --用户类型,有TS_ODS、USERS
CREATETIME           --创建时间
DROPTIME             --drop时间
DROPSCN              --drop的scn号
PARTITION_NAME       
CAN_UNDROP        
CAN_PURGE          
RELATED               
BASE_OBJECT      
PURGE_OBJECT    
SPACE                 

user_recyclebin放置当前用户drop掉的对象,字段比 dba_recyclebin少了一个OWNER

 

b、利用flashback还原回收站内容

语法:FLASHBACK TABLE [已删除TABLE名|”RECYCLEBIN中的名字”] TO BEFORE DROP;

flashback table "BIN$KI5DFtx9TnyUTUiZIuC8YA==$0" to before drop;
--这里是OBJECT_NAME,也可以是ORIGINAL_NAME

--再把这个表删除了通过ORIGINAL_NAME恢复也是一样的
flashback table sell to before drop;
--这里是ORIGINAL_NAME

 

 

c、如果有几个的ORIGINAL_NAME都是一样的,通过ORIGINAL_NAME恢复,只能恢复最后被drop掉的对象;若想明确某个对象就通过OBJECT_NAME恢复。

如果在数据库中存在和回收站相同对象名的表时,恢复回收站的对象时需要rename对选哪个名。如数据库中存在一个表名为atest,回收站中也存在一个atest

 flashback table atest to before drop;
--flashback table "BIN$6b6dC4BIR9CZLSfGZWvrVQ==$0" to before drop;
--使用object_name或origin_name都会出现错误

flashback table atest to before drop rename to atest_bak;
--atest是原始名,atest_bak是重新的命名

 

 

d、清空回收站,之后不可以通过回收站恢复清空的数据

purge table stest;
--清空某个特定对象,stest是表名

 

purge user_recyclebin;
--purge dba_recyclebin;需要改用户拥有系统权限,否则不允许清空

 

 参考文章https://blog.csdn.net/u010098331/article/details/50782395

 

标签:NAME,删除,--,恢复,drop,recyclebin,ORACLE,table,回收站
来源: https://www.cnblogs.com/muhai/p/15501744.html