第十四章闪回技术
Oracle 9i之前:当数据丢失或者发生错误时,解决的主要方法是利用逻辑备份和物理备份进行恢复
能够解决各种故障,,耗时复杂
Oracle 9i:闪回查询技术,基于回滚段恢复错误的DML操作
Oracle 10g:提高了闪回查询功能实现闪回版本、闪回事务查询,还实现闪回
、闪回删除、闪回数据库
1、 闪回查询
(1) 功能:查看过去某个时间点的数据信息,进一步可把数据恢复到过去某个时刻
(2) 条件:启动数据库的撤销表空间来管理回滚信息
Undo_managemen:指定回滚段的管理方式,如果设置为undo,则采用撤销表空间自动管理回滚信息
Undo_retention: 指定回滚信息的最长保留时间,初始是900秒,即15分钟
Undo_tablespace:指定用于保存回滚信息自动管理的撤销表空间名
(3) 基本语法:
SELECT 列 FROM 表名 AS OF TIMESTAMP 时间表达式 WHERE 查询条件
(4) 举例
SQL>set time on
14:59:10 SQL>select ename, sal from scott.emp where ename=’ALLEN’;
15:01:11 SQL>update scott.emp set sal=2000 where ename=’ALLEN’;
15:01:58 SQL>commit;
16:05:30 SQL> update scott.emp set sal=3000 where ename=’ALLEN’;
16:06:01 SQL> commit;
17:04:38 SQL> update scott.emp set sal=3500 where ename=’ALLEN’;
1) 17:05:07 SQL> commit;
2) 查询一个小时前ALLEN的工资
select ename,sal from scott.emp AS OF TIMESTAMP SYSDATE-1/24 where ename='ALLEN';
3) ALLEN的工资恢复到15:00:00之前
update scott.emp set sal=
(select sal from scott.emp AS OF TIMESTAMP TO_TIMESTAMP('2012-4-24 15:00:00','YYYY-MM-DD HH24:MI:SS') where ename='ALLEN')
where ename='ALLEN';
查看数据ALLEN的工资,发现又变为1600
2、 闪回版本查询
(1) 功能:查看一行数据在某段时间内数据的变化
(2) 条件:启动数据库的撤销表空间来管理回滚信息
(3) 基本语法:
SELECT 列 FROM 表名
VERSIONS BETWEEN TIMESTAMP 时间表达式1 AND 时间表达式2
WHERE 查询条件;
(4) 举例:查询15:00:00-18:00:00之间ALLEN的
版本信息
SELECT ename,sal FROM scott.emp VERSIONS BETWEEN TIMESTAMP
TO_TIMESTAMP('2012-4-24 15:00:00','YYYY-MM-DD HH24:MI:SS') AND
TO_TIMESTAMP('2012-4-24 18:00:00','YYYY-MM-DD HH24:MI:SS')
WHERE ename='ALLEN';
3、 闪回事务查询
4、 闪回表
(1) 功能:将表恢复到过去的某个时间点的状态,便捷快速的恢复对表进行的修改、删除、插入等错误的操作。
与闪回查询的不同:闪回查询只是得到表在过去某个时间点上的快照,并不改变表当前的状态;而闪回表是将表及其附属对象(索引、约束、触发器等)一起恢复到以前的某个时间点
(2) 条件:四条,
第一条:用户具有FLASHBACK ANY TABLE系统权限,或者具有所操作表的FLASHBACK对象权限。
第二条:用户具有所操作表的SELECT、INSERT、DELETE、ALTER对象权限
第三条:数据库采用撤销表空间进行回滚信息的自动管理,合理设置UNDO_RETENTION参数值。
第四条:启动被操作表的 ROW MOVEMENT特性
ALTER TABLE 表名 ENABLE ROW MOVEMENT;
(3) 基本语法:
FLASHBACK TABLE 表名 TO TIMESTAMP 时间表达式
(4) 举例:
18:01:11 SQL>delete from scott.emp where ename=’ALLEN’;
18:01:38 SQL>commit;
闪回表操作
18:03:18 SQL>ALTER TABLE scott.emp ENABLE ROW MOVEMENT;
18:04:20 SQL> FLASHBACK TABLE scott.emp TO TIMESTAMP TO_TIMESTAMP('2012-4-24 18:00:00','YYYY-MM-DD HH24:MI:SS');
5、 闪回删除
(1) 功能:可恢复使用DROP TABLE 语句进行删除的表
(2) 条件:通过Oracle 10g 的“回收站”技术实现的,为实现闪回删除功能必须开启数据库的回收站功能,默认情况下是开启的。在Oracle 10g数据库中,当执行DROP TABLE操作时,并不立即回收表及其关联对象的空间,而是将它们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定永久删除它们或存储该表的表空间存储空间不足时,表才真正被删除。
SQL>SHOW PARAMETER RECYCLE
SQL>ALTER SYSTEM SET RECYCLEBIN=ON
查看回收站
SQL>DROP TABLE emp;
SQL>SELECT OBJECT_NAME,ORIGINAL_NAME,TYPE FROM USER_RECYCLEBIN;
(3) 基本语法:可以取新名字,也可以不取新名字
SQL>FLASHBACK TABLE [schema.]table TO BEFORE DROP [RENAME TO table]
(4) 举例
19:05:20SQL>Drop table emp;
19:06:08SQL>FLASHBACK TABLE emp TO BEFORE DROP RENAME TO new_emp;
19:07:10SQL>select * from new_emp;
6、 闪回数据库
(1) 功能
利用数据库的闪回恢复区中存储的闪回日志信息,以及归档日志文件信息,将数据库恢复到过去某个时间点的状态
(2) 条件
数据库必须处于归档模式(ARCHIVELOG); (前面讲过)
数据库设置了闪回恢复区; (默认情况下已经设置了数据库的闪回恢复区)
数据库启用了FLASHBACK DATABASE特性。
(在默认情况下,数据库的FLASHBACK特性是关闭的。
在数据库处于MOUNT状态时执行ALTER DATABAE FLASHBACK ON命令,启动数据库的FLASHBACK特性;
需要通过参数DB_FLASHBACK_RETENTION_TARGET设置闪回日志保留时间,该参数默认值为1 440分钟,即一天。)
(3) 基本语句:
FLASHBACK DATABASE TO TIMESTAMP expression
(4) 举例
SQL>FLASHBACK DATABASE TO TIMESTAMP
TO_TIMESTAMP('2012-4-24 18:00:00','YYYY-MM-DD HH24:MI:SS');
举例的SQL
SQL>set time on
14:59:10 SQL>select ename, sal from scott.emp where ename=’ALLEN’;
15:01:11 SQL>update scott.emp set sal=2000 where ename=’ALLEN’;
15:01:58 SQL>commit;
16:05:30 SQL> update scott.emp set sal=3000 where ename=’ALLEN’;
16:06:01 SQL> commit;
17:04:38 SQL> update scott.emp set sal=3500 where ename=’ALLEN’;
17:05:07 SQL> commit;
18:01:11 SQL>delete from scott.emp where ename=’ALLEN’;
18:01:38 SQL>commit;
19:05:20 SQL>Drop table emp;