Oracle Flashback技术

叁叁肆2018-10-18 14:51

此文已由作者温正湖授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。


InnoSQL 5.5.30 v3在制定开发计划时,DBA建议修改合入淘宝实现的MySQL Flashback功能,当前该功能还比较简单,放出来的patch支持数据库级别的DDL和DML闪回,表级别的DML闪回,不支持表级别的DDL闪回。不过我们自己已经实现了表级别的DDL闪回功能。

MySQL的Flashback是参考Oracle来做的,为了更好得理解Flashback并着眼 今后对Flashback的优化和增强,对Oracle的Flasahback做了简单的调研。从Oracle 9i开始,Oracle引入了Flashback特性,在9i中率先支持了Flashback Query,以便能在需要的时候查询过去某个时候的一致性数据。到了Oracle10g,增强了Flashback Query的功能,并且提供了将整个数据库回退到过去某个时刻的能力,即Flashback Database,通过引入一种新的Flashback log实现。此外还实现了Flashback Drop和Flashback Table功能。在Oracle 11g中,又为Flashback加入了一个新的子特性,Flashback Data Archive。至此形成了一个覆盖数据库各层面,提供查询和闪回双重功能的Flashback特性集,该特性集还在不断的优化和完善中。


上面介绍了Flashback不断完善的过程,那么为什么要加入Flashback呢?Flashback特性 加入之前,数据库用户或者管理员可能因为误操作等在几分钟甚至几秒钟的时间破坏了数据库,虽然可以通过备份以及增量日志等方法来恢复数据到某个一致性状 态,但往往需要花费数小时的时间。加入了Flashback特性之后,修复数据库的时间被大幅度缩短,就有可能做到恢复的时间跟破坏数据库的时间类似,这 样就减少了可能的数据库下线时间,提高了数据库在线服务的能力。

使用Flashback来恢复错误的时间不再依赖于数据库的大小,且支持各个级别的数据恢 复,包括 行、事务、表到整个数据库,功能强大。简单介绍下Flashback特性集中包含的特性:

闪回上:数据库级别的Flashback Database,表级别的Flashback Table,Flashback Drop,事务级别的Flashback Transaction;

查询上:Flashback Query查询某个时间点的任何数据,Flashback Versions Query查询一段时间内某行的所有版本信息,Flashback Transaction Query查询某个事务对数据的改变;还有一个更全能的特性Flashback Data Archive自动追踪数据库中所有数据的每次变化。 


Flashback Database还原整个数据库到特定时间点, 通过Flashback log,而不是备份和前向恢复,Flashback log保存在Flash Recovery Area。

Flashback Table将特定表恢复到特定时间点,使用破坏只集中在少数几个表的场景,通过UNDO Tablespace;

Flashback Drop恢复被错误删除(dropped)的表; 同时恢复其所有的索引、约束和触发器等,通过Recycle Bin Tablespace。

Flashback Query查询在过去某个时间点的任何数据,查看和逻辑重构因为疏忽导致删除或改变数据引起的数据破坏;Flashback Versions Query检索在特定时间间隔内的某个行的所有版本,查看某个时间段行数据的动态变化,而不是某个时间点行数据静态现状;Flashback Transaction Query查看某个特定事务引起的改变,适用在错误的事务引起多行或表数据改变的场景。

Flashback Query三个特性均基于UNDO Tablespace。

Flashback Transaction撤销单个事务带来的所有改变,可选撤销所有与之有依赖关系的事务集的改变,通过一个PL/SQL操作或者Enterprise Manager wizard。

Flashback Data Archive (Total Recall)有效管理和查询长时间段的历史数据,自动追踪数据库中所存储的数据的每次改变,维护一个安全、高效和易访问的历史数据备份,该特性基于全新 的Flashback Archive Area,有后台进程FBDA。

 

在这些技术当中Flashback Database是我们最关注的,它与RMAN类似,是一种不完全恢复技术,也就是说它是需要一个数据基线的,不能将数据从无到有生成。Flashback Database用于将整个数据库回退到过去的某个时间点的状态,它比RMAN来得更快速和高效,可作为RMAN的替代品。在开始介绍前,先说说其局限性,前面提到,它是不完全的恢复技术,所以能够恢复的最早SCN(system change number)取决于Flashback log中记录的最早SCN,是无法解决Media Failure和无法处理数据文件已被删除的场景。此外,在某些场景下,虽然数据存在,但是如果元数据不完善,也无法完成闪回,比如当控制文件是从备份中 恢复或是重建的,无法使用该功能。

Flashback Database的框架由以下三部分组成:后台线程Recover Writer(RVWR)用于监控数据库中每次的数据改变,通过保存被修改数据的“前镜像(before image)”来记录对数据库中每个数据块的改变,RVWR将数据镜像保存在Flashback log日志文件中,而该日志文件位于Flash Recovery Area闪回恢复区内,闪回恢复区能够高效管理保存其中的数据和文件。

在Oracle 10g中,Flashback Database特性默认是不开启的,可以通过SQL> select flashback_on from v$database查看当前状态。通过SQL> alter database flashback on

开启,只有开启后才会生成Flashback log,若要开启该特性,用户需事先规划好闪回恢复区的空间。


使用Flashback Database的方法有以下:

SQL> flashback database to timestamp to_timestamp(‘13-8-28 14:37:05','yy-mm-dd hh24:mi:ss')

SQL> flashback database to scn 947921

Flash Recovery Area是Oracle 10g 的一项新特性用以存储恢复相关的文件的存储空间,Oracle建议使用与数据库物理上隔离的存储设备,预 留足够的磁盘空间,建议大于整个数据库。Flash Recovery Area允许用户集中存储所有恢复相关的文件,包括用于Flashback Database的闪回日志 Flashback log;还有数据文件副本、增量备份;控制文件副本、联机重做日志文件副本;归档日志文件、控制文件自动备份等等。Flash Recovery Area是 Oracle 10g新功能-自动的基于磁盘的备份与恢复功能(Automatic Disk-Based Backup and Recovery) 的实现基础。


Flash Recovery Area主要优点有:

集中存储区的作用

允许自动管理与恢复有关的磁盘空间

允许更快(相对于磁带)地实现备份和恢复操作

增加了备份的可靠性(相对于磁带)


Flash Recovery Area主要通过3个初始化参数来设置和管理:

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

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

db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟(1天)实际上可回退的时间还决定于db_recovery_file_dest_size的大小,flashback log文件受db_recovery_file_dest_size。 


本文简单得介绍了Flashback Database,更为详细的说明和使用方法可参考Oracle相关技术文档和网上博文:

http://www.oracle.com/technetwork/database/features/availability/flashback-overview-082751.htmlhttp://blog.csdn.net/tianlesoftware/article/details/4677378



网易云免费体验馆,0成本体验20+款云产品! 

更多网易技术、产品、运营经验分享请点击


相关文章:
【推荐】 Spring Boot + Mybatis 多数据源配置实现读写分离