Oracle在9i版本的时候引入了闪回技术,在Oracle 10g已经全面提供了闪回功能,主要提供了快速简单恢复数据库误操作的数据的恢复方法,而不用从逻辑备份或物理备份中恢复过来。
主要的闪回技术(Flashback)支持以下几种恢复级别:
事务闪回:对表进行了insert, update, delete 操作,已经commit 了,发现弄错了,需要恢复到某个commit操作之前的数据,则需要撤销刚才的某个操作。
行级闪回:对表进行了insert, update, delete 操作,需要恢复到某个时间点。
表级闪回:错误的drop table操作,需要表和表中的数据。
数据库级闪回:错误地对整个数据库导入很多表数据,需要将整个数据库恢复到过去的时间点。
闪回查询:闪回查询主要是根据Undo表空间数据进行多版本查询,允许用户查询过去某个时间点的数据,用以重构由于意外删除或更改的数据,数据不会变化。
oracle闪回功能的前提是在开启了归档日志,而且设置了合理的闪回区拥有存储相关执行操作,最后数据库要开启闪回功能,步骤如下:
1、开启归档日志,这个步骤就不一一再细说了,自行查询相关操作,主要是在
mount状态:alter database archivelog;
2、设置闪回区:
--指定闪回恢复区的位置 alter system set db_recovery_file_dest='C:AppAdministratorflash_recovery_area' scope=both; --指定闪回恢复区的可用空间大小 alter system set db_recovery_file_dest_size=4G scope=both; --指定数据库可以回退的时间,单位为分钟,默认是一天时间,实际取决于闪回区大小 alter system set db_flashback_retention_target=4320 scope=both;
3、在mount状态下,开启Flashback,如下:
alter database flashback on;
例子:简单利用闪回查询恢复刚刚误删除的学生信息表(STUINFO)中的学生张三(学号:SC201801001)。模拟步骤如下:
1、删除学生张三 :
delete from student.stuinfo t where t.stuname='张三'; commit;
2、通过查询stuinfo执行删除之前的时间点的记录,如下:
select * from student.stuinfo as of timestamp sysdate-10/1440;