闪回
闪回技术可以不需要使用备份文件,依赖于回滚段中的数据前镜像,恢复一定时间内的数据。过久之前的数据,只能通过备份文件恢复了。
查看是否开启闪回:
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;