分为两种方法:scn和时间戳两种方法恢复。 一、通过scn恢复删除且已提交的数据 1、获得当前数据库的scn号
select current_scn from v$database; (切换到sys用户或system用户查询)
查询到的scn号为:1499223 2、查询当前scn号之前的scn
select * from 表名 as of scn 1499220; (确定删除的数据是否存在,如果存在,则恢复数据;如果不是,则继续缩小scn号) 3、恢复删除且已提交的数据
flashback table 表名 to scn 1499220; 二、通过时间恢复删除且已提交的数据 1、查询当前系统时间
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 2、查询删除数据的时间点的数据
select * from 表名 as of timestamp to_timestamp('2013-05-29 15:29:00','yyyy-mm-dd hh24:mi:ss'); (如果不是,则继续缩小范围) 3、恢复删除且已提交的数据
flashback table 表名 to timestamp to_timestamp('2013-05-29 15:29:00','yyyy-mm-dd hh24:mi:ss');
注意:如果在执行上面的语句,出现错误。可以尝试执行 alter table 表名 enable row movement; //允许更改时间戳
Oracle中表被修改或者删除后恢复数据的方法:
表被修改或删除后可以按照以下步骤恢复:
1、删除目标表(表被错位修改的情况,如果被删除就没有这步了); 2、删除表后,可以采用如下操作:
在user_recyclebin中找到最近操作过的表名称,然后用闪回(只能用于10G及以上版本)。 FLASHBACK TABLE TABLE_NAME TO BEFORE DROP;
3、如果是删了或修改里面的数据,可以先建立一个快表将删除修改之前状态的数据找回到这个表中:
CREATE TABLE QUICK_TABLE AS
SELECT * FROM TABLE_NAME AS OF TIMESTAMP SYSDATE-1/24 (一小时前的),减去的时间可以自己定 如:select * from TABLE_NAME AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE)
4.恢复后的TABLE_NAME是回收站的表不可以用,最后可以直接把QUICK_TABLE改成需要的TABLE_NAME
注意:这个恢复的QUICK_TABLE表好像不能恢复主键和外键,所有在删除表之前最好把源表的主键、外键和索引的语句拷贝下来
样例(比如表AAA内数据被错位修改): select * from user_recyclebin;
可以查询到所有被删除的记录,从记录中可以找到AAA,找到表名后,作如下操作 FLASHBACK TABLE AAA TO BEFORE DROP; 恢复到5个小时前
CREATE TABLE QUICK_TABLE AS SELECT * FROM AAA AS OF TIMESTAMP SYSDATE-5/24 恢复到10分钟之前
CREATE TABLE QUICK_TABLE AS SELECT * FROM AAA AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE)
因篇幅问题不能全部显示,请点此查看更多更全内容