-、闪回技术概念 1、定义:闪回并不是某个固定的操作,而是基本闪回技术获取之前的原数据操作;通过 DDL或DML语句误操作,导致数据改变,可以通过闪问技术恢复数据; DDL语句:truncate/drop DML语句:updata/insert/delete 2、应用场景 --依赖对像和对像级别的不同,采用不同的闪回技术; 截断表--闪回日志--闪回库,闪回表 --影响数据 删除表--回收站 --影响数据 updata--闪回查询--重新做插入 --影响数据 版本比对--闪回版本查询 --不影响数据 3、误删除三种操作 delete误删除 -->未提交-->rollbakc进行事务回滚--> 需要undo功能 -->已提交-->闪回查询 --> 需要undo 功能 drop误删除 -->重命名-->闪回表操作 --> 回收站 -->不会回收高水位线-->数据还在数据块里 truncate误删除 1、DDL操作 --> 不记录undo --> 不需要undo功能 2、会回收高水位线 --> 释放数据段点用的数据块; 注:高水位线是用于标记数据块的使用位置,数据增加时高水位线会上升,删除数据时它不会下降,因此不能释放空间 3、开启闪回功能--闪回数据库必须要回闪回功能 1)查询闪回状态 SQL>SELECT FLASHBACK_ON FROM V$DATABASE; 2)开启/关闭闪回 SQL>ATER DATABASE FLASHBACK_ON 二、实验 1、闪回数据库 使用前提条件--建立闪回区并开始归档 1)开启归档功能 查看归档状态 archive log list 设置归档路径 alter system set log_archive_dest_1='location=/home/oracle/orcl_arch' scope=spfile; ! mkdir location=/home/oracle/orcl_arch shutdown immediate; startup mount alter database archivelog; -->必须在mount状态才能开启 alter database open; archive log list 2)设置闪回区大小和闪回日志存放路径 a) 闪回日志必须保存在闪回区中; b) 闪回区除了可以保存闪回日志,还可以保存:控制文件 归档文件 备份文件 当闪回功能开启时 一份控制文件和数据文件在一起 一份控制文件在闪回区中 查看闪回设置 show parameter recover db_recovery_file_dest_size --> 设置闪回区大小 db_recovery_file_dest --> 设置闪回区文件路径 先设置闪回区大小 再设置闪回区路径 (有先后顺序) 流程: select FLASHBACK_ON from v$database; --查看FLASHBACK_ON状态 alter database set db_recovery_file_dest_size = 大小; alter database set db_recovery_file_dest =’路径’; alter database FLASHBACK ON; 开启闪回功能; 建好闪回区会自动生产SID/flashback目录,并生成闪回日志文件 /u01/app/oracle/fast_recovery_area/ORCL1/flashback 建好闪回,其中一个控制文件会存放在闪回区 /u01/app/oracle/fast_recovery_area/orcl1/control02.ctl 模拟闪回数据库操作 1、建表test1 create table test1 as select * from hr.EMPLOYEES; 2、记录时间点--闪回到的时间 SQL>! date +"%F %T"; 3、建表test2 create table test2 as select * from hr.EMPLOYEES; 4、truncate删除test1 truncate table test1; 5、闪回数据 flashback database to timestamp to_timestamp('2020-09-26 09:36:15','yyyy-mm-dd hh24:mi:ss'); 报错 --数据不一致,因此必须关库,回到mount状态 ERROR at line 1: ORA-38757: Database must be mounted and not open to FLASHBACK. SQL> shutdown immediate; 关库 SQL> startup mount 开库到mount状态 flashback database to timestamp to_timestamp('2020-09-26 09:36:15','yyyy-mm-dd hh24:mi:ss'); --再次执行闪回 SQL> alter database open;检查数据文件和控制文件一致性; ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open --必须要加上选项才可以执行 SQL> alter database open RSSETLOGS; 6、查询结果 SELECT COUNT(*) FROM TEST1; --数据回来了; SELECT COUNT(*) FROM TEST2; --数据消失了; 注: 使用resetlogs选择,相当于初始化了,当前准备变成UNUSED SQL> select GROUP#,SEQUENCE#,STATUS from v$log; GROUP# SEQUENCE# STATUS ---------- ---------- ---------------- 1 1 CURRENT 2 0 UNUSED 3 0 UNUSED
|