一、Flashback Database
1、 架构及实现原理
Flashback Database由RVWR进程和Flashback Database日志组成。当Flashback Database被启用时,RVWR进程会将数据库的修改写入Flashback Database log中,恢复时读取Flashback Database logs中信息进行恢复。
Flashback Database使用RMAN CONFIGURE RETENTION POLICY命令设置Flashback Database logs的保存策略。当flash recovery area空间使用了90%到95%时数据库会向alter.log文件中写入warning。到使用90%的空间时,Oracle会自动删除flash recovery area中的文件。
2、 限制条件
n Media failure不能使用Flashback Database
n 当datafile被大小改变或这被shrink后,不能使用Flashback Database进行还原
n 当control file被重建或restore后,不能进行flashback database
n 删除一个表空间后,不能使用restlogs
3、 启用方法
把数据库置为ARCHIVE LOG模式
SQL> connect / as sysdba
SQL> startup mount
SQL> alter db_flashback_retention_target=4320;----设置可以进行多久的闪回(分钟)
SQL> alter database flashback on;
SQL> alter database open;
4、 配置闪回区域
SQL> alter system set db_recovery_file_dest_size=10M scope=both;
SQL> alter system set db_recovery_file_dest=’ C:\oracle\flash_recovery_area\ora101t’;
5、 备份Flashback Recovery Area
RMAN> backup recovery area;
RMAN> backup recovery files;
6、 相关视图
V$FLASHBACK_DATABASE_LOG:可以用来查询OLDEST_FLASHBACK_SCN
V$FLASHBACK_DATABASE_STAT:查询每次闪回操作的信息
二、其他闪回功能
包括Flashback Drop, Flashback Versions Query, Flashback Transaction Query,
Flashback Table,这些都是利用Undo data进行闪回的
a) Flashback Drop
在Oracle 10g中,删除一个table后,会将数据放在Recycle Bin中,而不是直接删除。
n 语法
FLASHBACK TABLE table_name TO BEFORE DROP
b) Recycle Bin
n show recyclebin:显示回收站中的内容
n 内容查询
SQL> select object_name as recycle_name, original_name, object_name from recyclebin;
n 对闪回表进行重命名
SQL> flashback table "BIN$0ZVR8eDEQbK4s8G2Csf2kg==$0" to before drop
rename to t2;
n 彻底删除
PURGE TABLE original_table_name;
PURGE TABLE recycle_bin_object_name;
n 彻底删除回收站中特定表空间中的特定用户创建的对象
PURGE TABLESPACE tablespace USER user
SQL> purge tablespace users user test;
n 清空回收站
PURGE RECYCLEBIN;
PURGE DBA_RECYCLEBIN;
c) Flashback Versions Query
n 只能查询已经提交的数据
SQL> select salary from t1
2 versions between
3 scn minvalue and maxvalue
4 where employee = 'JONES';
或
SQL> select salary from t1
2 versions between timestamp
3 to_timestamp('2004-10-26 11:37:01','YYYY-MM-DD HH:MI:SS') and
4 to_timestamp('2004-10-26 11:43:01','YYYY-MM-DD HH:MI:SS')
5 where employee = 'JONES';
n 伪列
VERSIONS_STARTTIME
VERSIONS_STARTSCN
VERSIONS_ENDTIME
VERSIONS_ENDSCN
VERSIONS_XID
VERSIONS_OPERATION
select to_char(versions_starttime,'DD-MON HH:MI') "START DATE",
to_char (versions_endtime, 'DD-MON HH:MI') "END DATE",
versions_xid,
versions_operation,
employee,
salary
from test.t1
versions between scn
minvalue and maxvalue
where employee = 'JONES'
d) Flashback Transaction Query
可以查询已提交和未提交的数据
SQL> select table_name, operation, undo_sql
2 from flashback_transaction_query
3 where start_timestamp >= to_timestamp ('2004-10-26 06:45:00',
➥'YYYY-MM-DDHH:MI:SS')
4 and table_owner = 'TEST';
e) Flashback Table
SQL> alter table t1 enable row movement;
SQL> flashback table t1 to scn 771511;
闪回的同时,启用被删除的trigger
SQL> flashback table table_name to scn 771551 enable triggers;