闪回技术可以不需要使用备份文件,依赖于回滚段中的数据前镜像,恢复一定时间内的数据。过久之前的数据,只能通过备份文件恢复了。
查看是否开启闪回:
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
一、闪回分类

前四种闪回技术,依赖于undo表空间,可闪回的极限时间由
undo_retention
决定;
闪回数据库技术,可闪回的极限时间由
db_flashback_retention_target
所决定。
SQL> show parameter undo_retention;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer 900 (单位是秒)
SQL> show parameter db_flashback_retention_target;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440 (单位是分钟)
二、闪回查询
select * from scott.stu as of timestamp to_date('20211111 17:05:39','yyyymmdd hh24:mi:ss');
三、闪回版本查询
select versions_starttime,versions_endtime,versions_xid,versions_operation,sno,sname,sage
from scott.stu
versions between timestamp minvalue and maxvalue;
-- versions_starttime,versions_endtime,versions_xid,versions_operation
-- 这些都是伪列:分别是事务的开始时间、结束时间、SCN号、ID号等
可以进行基于闪回版本查询的恢复——闪回事务查询;
就是从
flashback_transaction_query
中查询引起数据变化的事务,和撤销事务的SQL;查询出的结果中的undo sql可以提取出来执行恢复;
select OPERATION,UNDO_SQL
from flashback_transaction_query
where table_owner='SCOTT' and table_name='STU';
-- 如果查询结果中undo sql没有值,执行命令:alter database add supplemental log data;
四、闪回表(自动回退)
特点:在线操作,自动恢复相关的属性,包括索引、触发器等。
前提:启动行迁移
注意:sys的表不能闪回。
1. 启动行迁移: alter table scott.stu enable row movement;
2. flashback table scott.stu to timestamp to_date('20211018 10:44:39','yyyymmdd hh24:mi:ss');
五、闪回删除
从回收站里捞回来
SQL> drop table stu;
Table dropped
SQL> select * from stu;
ORA-00942: table or view does not exist
SQL> flashback table stu to before drop;
Done
SQL> select * from stu;
SNO SNAME SAGE
-----------------------------------------------------
1 TOM 21
2 LILY 22
3 BOB 23
六、闪回数据库
- 配置数据库为归档模式:alter database archivelog;
- 配置闪回恢复区:show parameter db_recovery_file_dest;
- 配置闪回保留时间:show parameter db_flashback_retention_target;
- 启用数据库闪回:alter database flashback on;
- 进行闪回数据库:flashback database to timestamp;