为了使数据库能够从任何逻辑错误中迅速恢复,oracle推出了闪回技术。采用该技术,可以对行级和事物级的数据变化进行恢复,减少了数据恢复的时间,而且操作简单。通过SQL语句就可以实现数据的恢复,大大提高了数据库恢复的效率。闪回技术是数据库恢复技术历史上一次重大的进步,从根本上改变了数据恢复。

闪回技术包括以下各项:

闪回查询:(FLASHBACK QUERY):查询过去某个时间点或某个SCN值时表中的数据信息

闪回版本查询(FLASHBACK Version query):查询过去某个时间段或某个SCN段内表中数据变化的情况。

闪回事物查询(FLASHBACK Transaction Query):查看某个事物或所有事物在过去一段时间对数据进行的修改。

闪回数据库(FLASHBACK Database):将数据库恢复到过去某个时间点或某个SCN值时的状态

闪回删除(FLASHBACK drop):将已经删除的表及其关联的对象恢复到删除前的状态。

闪回表(FLASHBACK table):将表恢复到过去的某个时间点或某个SCN值时的状态。

SCN是当oracle数据库更新后,有DBMS自动维护而累积递增的一个数字。可以通过查询数据字典V$DATABASE中的CURRENT_SCN获得当前的SCN号。

闪回恢复区的含义
oracle推荐指定一个闪回恢复区(FLASHRECOVERY AERA)作为存放备份与恢复相关的默认位置,这样ORACLE就可以实现自动的基于磁盘的备份与恢复。闪回恢复区是一块用来存储恢复相关的文件的存储空间,允许用户集中存储所有恢复相关的文件。以下几种文件可以存放在闪回恢复区。

控制文件

归档日志文件

闪回日志

控制文件和SPFILE自动备份

RMAN备份集

数据文件拷贝

闪回恢复区主要通过以下3个初始化参数来设置和管理

db_recovery_file_dest:指定闪回恢复区的位置

db_recovery_file_dest_size:指定闪回恢复区的可用空间

db_flashback_retention_target:该参数用来控制闪回日志中数据保留的时间,或者说,希望闪回数据库能够恢复到的最早的时间点。单位为min,默认是1440min,即一天。当然实际上可回退的时间还取决于闪回恢复区的大小,因为里面保存了回退所需要的闪回日志,所以这个参数要和db_recovery_file_dest_size配合修改。

如果要撤销闪回恢复区,把初始化参数DB_RECOVERY_FILE_DEST的值清空。

db_recovery_file_dest_size只有在DB_RECOVERY_FILE_DEST清空之后才可以清空

设置闪回数据库
设置了闪回恢复区,要启动闪回数据库功能,还需要进一步配置,数据必须处于归档模式,在设置闪回数据库

数据库已经处于归档模式:

Oracle 11g R2 闪回技术

数据库未启用闪回数据库

Oracle 11g R2 闪回技术

建立闪回区域
Oracle 11g R2 闪回技术

设置闪回数据库的数据保留周期为一天以min为单位

Oracle 11g R2 闪回技术

启用闪回日志

Oracle 11g R2 闪回技术

查询是否成功启用闪回恢复区

Oracle 11g R2 闪回技术

查询是否成功启用闪回数据库
Oracle 11g R2 闪回技术

闪回数据库

闪回数据库能够使数据迅速的回滚到以前的某个时间点或者某个SCN上,这对数据库从逻辑错误中恢复特别有用。而且也是大多数发生逻辑损坏时恢复数据库最佳的选择。

使用SCN闪回数据库

查看数据库系统当前SCN

Oracle 11g R2 闪回技术

改变数据库当前状态,模拟创建表TEST10,并插入一条记录

Oracle 11g R2 闪回技术

进行闪回数据库恢复,将数据库恢复到创建表之前的状态,即SCN为1238544
Oracle 11g R2 闪回技术

用RESETLOGS选项打开数据库

Oracle 11g R2 闪回技术
验证数据库的状态,TEST10表不存在。
Oracle 11g R2 闪回技术

查询数据库中当前最早的闪回SCN和时间

Oracle 11g R2 闪回技术

按照指定时间闪回数据库

查询数据库中当前时间和当前SCN

Oracle 11g R2 闪回技术

改变数据库的当前状态,模拟创建表test11,并插入1条记录

Oracle 11g R2 闪回技术

进行闪回数据库恢复,将数据库恢复到创建表之前的状态。

Oracle 11g R2 闪回技术

使用RESETLOGS打开数据库

Oracle 11g R2 闪回技术

验证数据库的状态test11表是否存在。

Oracle 11g R2 闪回技术

闪回数据库操作的限制:

数据文件损坏或丢失等介质故障不能使用闪回数据库进行恢复。闪回数据库只能基于当前正常运行的数据文件

闪回数据库功能启动后,如果发生数据控制文件重建或利用备份恢复控制文件,则不能使用闪回数据库

不能使用闪回数据库进行数据文件收缩操作

不能使用闪回数据库将数据库恢复到在闪回日志中可获得的最早的SCN之前的SCN,因为闪回日志文件在一定的条件下被删除,而不是始终保存在闪回恢复区中

闪回表
闪回表是将表恢复到过去的某个时间点或者指定的SCN而不用恢复数据文件,为DBA提供了一种在线、快速、便捷的恢复方式,可以恢复对表进行的修改、删除、插入等错误的操作。

     利用闪回表技术恢复表中的数据的过程,实际上是对表进行DML操作的过程。oracle自动维护与表相关联的索引、触发器、约束等。

为了使用数据库闪回功能,必须满足下列条件

用户具有FALSHBACKANY TABLE系统权限,或者具有所操作表的FLASHBACK对象权限

用户具有所操作表的SELECT/INSERT/DELETE/ALTER对象权限

启动被操作表的ROW MOVEMENT特性,可以采用下列方式进行:

SQL> ALTER TABLE 表名 ENABLE ROWMOVEMENT;

闪回表语法格式:

FLASHBACK TABLE [schema].table TO SCN |TIMESTAMP expression [ENABLE|DISABLE TRIGGERS]

参数说明:

SCN:将表恢复到指定的SCN时的状态

TIMESTAMP:将表恢复到指定额时间点

ENABLE|DISABLETRIGGERS:在恢复表中数据的过程中,表上的触发器时禁用还是激活(默认是引用)

举例说明:

使用SCOTT用户登录

Oracle 11g R2 闪回技术

创建表,插入记录,提交事物

Oracle 11g R2 闪回技术

查询当前SCN号,如果当前用户没有权限查询v$database,则以sys用户登录,授予当前用户访问数据字典的权限。

Oracle 11g R2 闪回技术

更新记录,并提交事物

Oracle 11g R2 闪回技术

查看表中的记录

Oracle 11g R2 闪回技术

删除ID=3的记录

Oracle 11g R2 闪回技术

启动test01表的ROW MOVEMENT特性

Oracle 11g R2 闪回技术

将test01表恢复到2015-11-22 05:44:48时刻的状态
Oracle 11g R2 闪回技术

将test01表恢复到SCN为1240503的状态。

Oracle 11g R2 闪回技术

闪回删除
闪回删除可以恢复使用DROP table语句删除的表,是一种对意外删除的表恢复机制。闪回删除的功能的实现主要是通过oracle数据库中的“回收站”技术实现的。在oracle数据库中,当执行DROP table操作时,并不立即收回表及其关联对象的空间,而是将他们重命名后放入一个称为“回收站”的逻辑容器中保存,直到用户决定永久删除他们或存储该表的表空间或存储空间不足时,表才真正被删除,为了使用数据库的闪回删除技术,必须开启数据库的“回收站”

启动“回收站”将参数RECYCLEBIN设置为ON,在默认情况下“回收站”已经启动
Oracle 11g R2 闪回技术

如果没有启动可以使用:

Oracle 11g R2 闪回技术

查看回收站。当执行DROP table 时,表及关联的对象被命名后保存在“回收站”中,可以通过查询USER_RECYCLEBIN DBA_RECYCLEBIN视图获得被删除的表及其关联对象。
Oracle 11g R2 闪回技术

通过USER_RECYCLEBIN查看被删除的表
Oracle 11g R2 闪回技术

不支持sys用户和system用户,这两个用户下的表被删除之后,无法从回收站里拿到,查询时为“空”

Oracle 11g R2 闪回技术

如果删除表的时候使用了PURGE短语,则表及其关联对象呗直接释放,空间被回收,相关信息不会进入“回收站”中

Oracle 11g R2 闪回技术

清空回收站,由于被删除的表级其关联对象信息保存在“回收站”中,其存储空间并没有释放,因此需要定期清空“回收站”。或清除“回收站”中没有用的对象(表,索引,表空间)释放其所占用的磁盘空间

语法如下:

PURGE [TABLE 表名 | INDEX index]

[RECYCLEBIN | DBA_RECYCLEBIN] | [TABLESPACEtablespace [USER user]]

参数说明:

TABLE:从回收站中清除指定的表

INDEX:从回收站中清除指定的索引,并回收其磁盘空间

RECYCLEBIN:清空用户“回收站”,并回收所有对象的磁盘空间

DBA_RECYCLEBIN:清空整个数据库系统的“回收站”,只有具有SYSDBA权限的用户才可以使用

TABLESPACE :清除“回收站”中指定额表空间,并回收磁盘空间

USER:清除回收站中指定表空间中特定用户的对象,并回收磁盘空间

Oracle 11g R2 闪回技术

闪回删除操作,闪回删除的基本语法

FLASHBACK TABLE [schema.]table to BEFOREDROP [RENAME TO table]

Oracle 11g R2 闪回技术

闪回删除

闪回删除举例说明:

Oracle 11g R2 闪回技术
Oracle 11g R2 闪回技术
Oracle 11g R2 闪回技术

需要注意:只有本地管理的,非系统表空间中的表可以使用闪回删除操作。

闪回查询
允许根据时间点timestamp或SCN查看就的数据,除了可以查看旧数据,需要时可以通过检索旧数据来撤销错误的更改。

使用SCOTT用户登录,对EMP表基于AS of TIMESTAMP的闪回查询

SQL> show user;

USER is "SCOTT"

Oracle 11g R2 闪回技术

更新员工号为7900的工资,更新为2000,并提交事物

Oracle 11g R2 闪回技术

更新员工号为7900的工资,更新两次,提交事物。

Oracle 11g R2 闪回技术

更新员工号为7900的工资,更新为3500,并提交事物
Oracle 11g R2 闪回技术

查看7900号员工的更新后工资。

Oracle 11g R2 闪回技术

查询7900号员工前一个小时的工资是多少

Oracle 11g R2 闪回技术

查询第一个事物提交,第二个事物还没有提交时7900员工的工资

Oracle 11g R2 闪回技术

查询第二个事物提交,第三个事物还没有提交时的7900号员工的工资

Oracle 11g R2 闪回技术

如果需要,可以将数据恢复到过去某个时刻的状态。

Oracle 11g R2 闪回技术

如果对此有兴趣,请扫下面二维码免费获取更多详情
Oracle 11g R2 闪回技术