Flashback table演示:
闪回表要用到UNDO表空间信息,是一个删除新数据,重新插入老数据的过程,因此row movement的属性要打开。
SQL> select * from lihm.t;
ID MSG
--------------------
1 aaa
2 bbb
3 ccc
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
2235951
SQL> delete lihm.t;
已删除3 行。
SQL>commit;
提交完成。
SQL> select * from lihm.t;
未选定行
SQL> flashback table lihm.t to scn 2235951;
flashbacktable lihm.t to scn 2235951
*
第1 行出现错误:
ORA-08189:因为未启用行移动功能,不能闪回表
SQL> alter table lihm.t enable row movement;
表已更改。
SQL> flashback table lihm.t to scn 2235951;
闪回完成。
SQL> select * fromlihm.t;
ID MSG
--------------------
1 aaa
2 bbb
3 ccc
或者
FLASHBACK TABLE lihm.t
TO TIMESTAMP TO_TIMESTAMP('2013-10-17 09:30:00', 'YYYY-MM-DD HH:MI:SS');
Flash backdrop演示:
当一个表删除的时候,与之相关的空间并没有被删除,他只是被重命名并放在回收站中了,flash backdrop就是基于回收站找回数据的。
SQL> show parameter recyclebin;
NAME TYPE VALUE
----------------------------- --------
recyclebin string on
SQL> select owner,object_name,original_name,type from dba_recyclebin;
未选定行
SQL>select * from lihm.t;
ID MSG
--------------------
1 aaa
2 bbb
3 ccc
SQL> drop table lihm.t;
表已删除。
SQL> select owner,object_name,original_name,type from dba_recyclebin;
OWNER OBJECT_NAME ORIGINAL_N TYPE
---------------------------------------- ---------- --------
LIHM BIN$4+Tzos//X1LgQycCqMBD7A==$0 T TABLE
SQL> select * from lihm.t;
select* from lihm.t
*
第1 行出现错误:
ORA-00942:表或视图不存在
SQL> flashback table lihm.t to before drop;
闪回完成。
SQL> select * from lihm.t;
ID MSG
--------------------
1 aaa
2 bbb
3 ccc
Flashback Database演示:
闪回数据库是通过撤销对数据修改的方法来完成的,完成闪回要达到以下条件
1) 没有数据文件丢失或损坏
2) 不能闪回到控制文件重建之前
查看闪回特性是否启用:
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------------------------
NO
启用闪回特性:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL> startup mount
ORACLE例程已经启动。
TotalSystem Global Area 1636814848 bytes
FixedSize 2288968 bytes
VariableSize 1006633656 bytes
DatabaseBuffers 620756992 bytes
RedoBuffers 7135232 bytes
数据库装载完毕。
SQL> alter database flashback on;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> selectflashback_on from v$database;
FLASHBACK_ON
------------------------------------
YES
查看闪回窗口时间:
SQL> SELECT OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME FROM
V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCNOLDEST_FLASHBACK_TI
---------------------------------------
2258659 2013-08-14 16:28:44
创建还原点:
Normalrestore point:
SQL> create restore point test1;
还原点已创建。
Guaranteerestore point
SQL> create restore point test2guarantee flashback database;
还原点已创建。
查看还原点类型:
SQL>l
1 SELECT NAME, SCN, TIME,
2 DATABASE_INCARNATION#,
3 GUARANTEE_FLASHBACK_DATABASE
4* FROM V$RESTORE_POINT
SQL>/
NAME SCN TIME DATABASE_INCARNATION# GUARAN
------------------------------------------------------------ ----------
TEST2 2260674 14-8月 -1304.49.20.000000000 下午 2 YES
TEST1 2259852 14-8月 -1304.36.32.000000000 下午 2 NO
RMAN也可以查看还原点:
RMAN>list restore point all;
SCN RSP 时间 类型 时间 名称
-------------------------- ---------- ---------- ----
2259852 14-8月-13 TEST1
2260674 GUARANTEED 14-8月-13 TEST2
下面我们还原到最早的时间:
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
SQL> startup mount
ORACLE例程已经启动。
TotalSystem Global Area 1636814848 bytes
FixedSize 2288968 bytes
VariableSize 1006633656 bytes
DatabaseBuffers 620756992 bytes
RedoBuffers 7135232 bytes
数据库装载完毕。
SQL> SELECTOLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME FROM
2 V$FLASHBACK_DATABASE_LOG;
OLDEST_FLASHBACK_SCNOLDEST_FLASHBA
----------------------------------
2258659 14-8月 -13
SQL> flashback databaseto scn 2258659;
闪回完成。
SQL> select * fromlihm.t;
select* from lihm.t
*
第1 行出现错误:
ORA-01219:数据库或可插入数据库未打开:仅允许在固定表或视图中查询
SQL> alter database open read only;
数据库已更改。
SQL> select * fromlihm.t;
ID MSG
--------------------
1 aaa
2 bbb
3 ccc
至此数据库已经闪回并打开,我们可以把丢失数据找回来,或openresetlogs打开,如果想flashback到更早的时间,只要日志支持就可以执行flashback database to scn xxx命令来实现,如果想恢复到闪回前的状态,可以使用recover database命令.
查看闪回日志可以用:
SQL> select name,bytes,type from V$FLASHBACK_DATABASE_LOGFILE;
NAME BYTES TYPE
-------------------------------------------------- ------------------
/u01/oracle/fast_recovery_area/ORCL/flas 52428800 NORMAL
hback/o1_mf_90phxvgz_.flb
/u01/oracle/fast_recovery_area/ORCL/flas 52428800 RESERVED
hback/o1_mf_90phxyvp_.flb
关闭闪回数据库特性前,最好删除相应还原点,再删除flashback log,不然下次启动时会检测闪回日志。