利用UNDO闪回,前提是被删除的数据在UNDO中没有被覆盖。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 1080
undo_tablespace string UNDOTBS1
10:29:08 SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN from dual;
TO_CHAR(SYSDATE,'YY SCN
-----------------------------------------------------------
2011-03-29 10:29:28 11029032818473
10:29:28 SQL> select count(*) from JR_CARD;
COUNT(*)
----------
0
10:31:04 SQL> SELECTcount(*) FROM JR_CARD AS OF TIMESTAMP TO_TIMESTAMP('2011-03-2910:26:59','YYYY-MM-DD HH:MI:SS');
COUNT(*)
----------
6758
10:31:43 SQL> insertinto JR_CARD SELECT * FROM JR_CARD AS OF TIMESTAMP TO_TIMESTAMP('2011-03-2910:26:59','YYYY-MM-DD HH:MI:SS');
已创建6758行。
10:32:17 SQL> select count(*) from JR_CARD;
COUNT(*)
----------
6758
10:32:25 SQL> commit;
提交完成。
10:32:27 SQL> select count(*) from JR_CARD;
COUNT(*)
----------
6758
10:32:34 SQL>
此方法恢复只需1分钟即可。
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'), to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN from dual;
SELECT count(*) FROM T6 AS OF TIMESTAMP TO_TIMESTAMP('2014-12-24 12:34:19','YYYY-MM-DD HH:MI:SS');
create table T6_bak as SELECT * FROM T6 AS OF TIMESTAMP TO_TIMESTAMP('2014-12-24 12:33:25','YYYY-MM-DD HH:MI:SS');