一、在恢复以前我们先看一下删除数据
1、删除表中数据两种方法
a. delete * from My_Table --不释放区
b. truncate table My_Table;
2、删除整个表
drop table My_Table --释放区(还会占用表空间,一般清理彻底不要的表一定要加 purge )
drop table My_Table purge --释放表空间
二、数据恢复
1、恢复drop(不加purge,purge是无法恢复的)
但可以用如下语句查询到这个表还在Oracle回收站中:
SELECT * FROM user_recyclebin WHERE original_name='tablename'
那么现在就可以用如下语句进行恢复:
FLASHBACK TABLE tablename TO BEFORE DROP
2、delete 事务已提交(习惯用时间来恢复)
a、根据时间来恢复:
查询数据库当前时间(目的是为了检查数据库时间是否与你电脑时间相近,避免时间不同而将数据恢复到错误时间点)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
查询删除数据时间点之前的数据
select * from tablename as of timestamp to_timestamp('2018-08-01 16:06:10','yyyy-mm-dd hh24:mi:ss')
如果发现没有数据试着往前提几分钟
恢复数据(激动人心的时刻)
flashback table tablename to timestamp to_timestamp('2018-08-01 16:06:10','yyyy-mm-dd hh24:mi:ss');
报错:ORA-08189:未启用行移动功能,不能闪回表;
alter table tablename enable row movement;
然后再次执行上面SQL即可;
b、根据数据库SCN恢复数据
查询当前数据库SCN号
select current_scn from v$database;(不能执行的话,切换到sys用户或system用户查询)
查询到的当前值为:91799986
缩小SCN号查询被删除表数据
(若无数据继续缩小SCN,由于数据库操作不止一人,SCN号变化比较多,可以多缩小几个号)
select * from tablename as of scn 91799980;
恢复数据
flashback table tablename to scn 91799980;
报错:ORA-08189:未启用行移动功能,不能闪回表;
alter table tablename enable row movement;
然后再次执行上面SQL即可;