在9i中可以用flashback看到表中误删除的数据,但在flashback模式下不能使用DML,如果要把这些找到的数据恢复需要使用存储过程来进行,可能是因为太简单,Oracle的手册中并没有给出这个存储过程的具体写法,下面我们给出这个存储过程的写法,希望对大家能有帮助。
1、 确定数据被删之前的状态:
IXDBA.NET社区论坛
SQL>connect test/test
SQL> select * from exitgogo;
PART_ID ID NAME
---------- ---------- ----------
1 1 exitgogo
1 1 exitgogo
11 1 ding
SQL> select to_char(sysdate,'mm-dd-yy hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'
-----------------
01-21-05 14:48:09
2、删除表中的全部数据:
SQL>delete exitgogo;
SQL>commit;
SQL>select to_char(sysdate,'mm-dd-yy hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'
-----------------
01-21-05 14:49:08
3、启用flashback。
SQL> exec dbms_flashback.enable_at_time(to_date('2005-01-21 14:48:09','yyyy-mm-dd hh24:mi:ss'));
PL/SQL 过程已成功完成。
SQL> select * from exitgogo;
PART_ID ID NAME
---------- ---------- ----------
1 1 exitgogo
1 1 exitgogo
11 1 ding
这说明通过flashback可以找回丢失的数据。
因为在flashback方式下不能使用DML语句,而只能查看数据,因此使用通常的方法并不能恢复数据,我们使用如下方法来恢复数据:
insert into exitgogo
select * from exitgogo as of timestamp to_timestamp('2005-01-21 14:48:0', 'yyyy-mm-dd hh24:mi:ss');
这句语句的意思是,将表exitgogo在2005-01-21 14:48:0这一时间点时的记录插入到当前时刻的exitgogo表中。