概述

闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在。在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成)。需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成。

本文描述了Oracle闪回区的特性及其配置闪回区,监控闪回区等。

闪回区

闪回区特性及其配置

就是分配一个特定的目录位置(普通磁盘上的目录或ASM磁盘)来存放一些特定的恢复文件,用于集中和简化管理数据库恢复工作。闪回区单词缩写为FRA。

闪回区可存储文件的类型

  • 完全的数据文件备份
  • 增量备份
  • 数据文件副本
  • 当前的控制文件,备份的控制文件,spfile文件,快照控制文件
  • 联机日志文件,归档日志
  • 块跟踪文件、闪回日志

启用与禁用闪回区

设置下面的初始化参数

  • DB_RECOVERY_FILE_DEST_SIZE:用于设置闪回区的大小,此参数应优先于DB_RECOVERY_FILE_DEST参数修改,否则报ORA-32001错误。

  • DB_RECOVERY_FILE_DEST:用于设置闪回区的目录

  • DB_FLASHBACK_RETENTION_TARGET:指定数据库可以闪回的时间范围,单位为分钟,默认1440分钟,也就是一天。

数据库闪回分为多种情形,其闪回日志存放在FRA,可闪回的时间同时还取决于闪回恢复区的大小。
将DB_RECOVERY_FILE_DEST参数设置为空,可以停用FRA,但是启用flashback database,则不能取消FRA,需要先禁用flashback database

数据库FRA可以为每个数据库配置不同的闪回区,也可以为多个数据库配置相同路径的闪回区。
当为多个数据库配置相同的闪回区位置时,应考虑闪回区所在磁盘挂载点的总大小以及使用不同的DB_NAME
其路径为:FRA_HOME/<db_name>/<file_type>//<file_name> 。

闪回区的保留策略

闪回区中的文件保留与否由RMAN保留策略来决定。通过执行RMAN configure retention policy命令来设置其策略。

  • 对于没有关联保留策略或是永久文件,文件永远不会被删除;
  • 对于关联保留策略的文件,没有过时的情况下不会被删除,一旦过时,在空间压力下会自动被删除。

闪回区与多路日志归档

如果设置了归档日志参数log_archive_dest_n,归档时会使用该位置而不是使用闪回区。
如果未设置参数log_archive_dest_n,而是启用闪回区,则可以不需要再单独设置归档日志参数log_archive_dest_n,归档日志会位于闪回区。
对于启用闪回区后,不可再设置log_archive_dest、log_archive_duplex_dest,也就是说存在排他模式。可参考:Oracle 归档日志
对于既要归档到log_archive_dest_n,又要归档到闪回区的情形,需要设置参数log_archive_dest_10(缺省情况)给闪回区,如下:

alter system set log_archive_dest_10='LOCATION=USE_DB_RECOVERY_FILE_DEST';
alter system set log_archive_dest_1='LOCATION=/u03/database/archdir';

撤销段(UNDO SEGMENT)

在讲闪回技术前,需要先了解Oracle中一个逻辑结构–撤销段。因为大部分闪回技术都需要依赖撤销段中的撤销数据。撤销数据是反转DML语句结果所需的信息,只要某个事务修改了数据,那么更新前的原有数据就会被写入一个撤销段。(事务回滚也会用到撤销段中的数据)。事务启动时,Oracle 会为其分配一个撤销段,事务和撤销段存在多对一的关系,即一个事务只能对应一个撤销段,多个事务可以共享一个撤销段(不过在数据库正常运行时一般不会发生这种情况)。

闪回技术

Oracle提供了四种可供使用的闪回技术(闪回查询,闪回删除,闪回归档,闪回数据库),每种都有不同的底层体系结构支撑,但其实这四种不同的闪回技术部分功能是有重叠的,使用时也需要根据实际场景合理选择最合适的闪回功能。

1.基本闪回查询

功能描述:可以查询过去某个时间段的数据库状态。

工作原理:Oracle 会提取所需要的撤销数据(前提是撤销是可用的,即撤销数据还没被覆盖)进行回滚,但这种回滚是临时的,仅针对当前session可见。

SQL> select * from  dept as of timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

2.闪回表

功能描述:可将某个表回退到过去某个时间点

工作原理:同样,Oracle会先去查询撤销段,提取过去某个时间点之后的所有变更,构造反转这些变更的SQL语句进行回退,闪回操作是一个单独的事务,所以若由于撤销数据过期之类的原因导致无法闪回,整个操作会回滚,不会存在不一致的状态。

步骤:

1)启用表闪回首先要在表上支持行移动(在数据字典中设置标识来标识该操作可能会改变行ID,即同一条数据闪回成功后主键都一样,但行ID其实已经发生变化了)

 SQL> alter table emp enable row movement;

2)闪回表操作

SQL> flashback table dept to timestamp to_timestamp('2016-09-10 11:00:00','yyyy-mm-dd hh24:mi:ss');

闪回表可能会失败,有可能有以下几种情况:

a.违反了数据库约束,比如用户不小心删除了子表中的数据,现在想利用闪回表技术进行回退,恰好在这中间,父表中与该数据对应的那条记录也被删除了,在这种情况下,由于违反了外键约束,导致闪回表操作失败了;

b.撤销数据失效,比如用于支撑闪回操作的撤销数据被覆盖了,这种情况闪回表操作自然会失败;

c.闪回不能跨越DDL,即在闪回点和当前点之间,表结构有过变更,这种情况闪回操作也会失败。

注意:上述闪回功能都是基于撤销数据的,而撤销数据是会被重写的(Expired会被重写,Active不会被重写),所以,在需要使用这几种闪回功能去恢复数据的时候(确切地说,是需要使用基于撤销数据的闪回功能时),最短时间发现错误,第一时间执行闪回操作,才能最大程度地保证闪回功能的成功。

闪回删除(Flashback Drop)

功能描述:闪回删除可以轻松将一个已经被Drop的表还原回来。相应的索引,数据库约束也会被还原(除了外键约束)

原理描述:Drop命令其实是Rename命令,早期的Oracle版本(10g之前),闪回删除意味着从数据字典中删除了该表的所有引用,虽然表中数据可能还存在,但已成了孤魂野鬼,没法进行恢复了,10g版本之后,Drop命令则仅仅是一个Rename操作,所以恢复就很容易了。

闪回删除操作执行命令很简单

SQL> flashback table emp to before

如果要还原的表名在当前系统中已经被占用,也可以在闪回删除的时候对表重命名

SQL> flashback table emp to before drop rename to emp_new

也可以通过回收站查看当前用户那些表被删除了,每个用户都有一个回收站,这个回收站是个逻辑结构,它不是一块独立的存储空间,它存在在当前表空间内,所以如果有别的操作需要空间,比如现在需要创建一张表,没有足够空间可用,回收站中的数据就会被清理,这也是导致闪回删除失败的原因。

SQL> SHOW RECYCLEBIN;

彻底删除表,闪回删除也无能为力

SQL> DROP TABLE EMP PURGE;

清空回收站

SQL> PURGE RECYCLEBIN;

注意:闪回删除只针对Drop命令,注意区分truncate操作和drop操作,truncate称为表截断,会清空表中数据(调节Oracle高水位线实现),表结构不受影响,速度很快,弊端是此过程不会产生任何撤销数据或是重做日志,如果误删,恢复异常麻烦,要慎重使用。而Drop则会删除数据+表结构,闪回删除仅针对Drop操作。

闪回数据归档(Flashback Data Archive )

功能描述:闪回数据归档可使表具有回退到过去任何时间点的能力,前面提到的闪回查询,闪回表都会受限于撤销数据是否失效,如果撤销数据被覆盖重写了,闪回操作自然会失败,闪回删除则受限于表空间是否有足够可用空间,而闪回数据归档,则没有这些限制。

创建闪回归档

1)创建一个用户闪回数据归档的表空间,当然,也可以使用已经存在的表空间。

SQL> create tablespace test_tb datafile 'test.dbf' size 20m;

2)创建一个保留时间为2年的闪回归档

SQL> create flashback archive test_fa tablespace test_tb retention 2 year;

为scott用户下的emp表启用闪回归档

1)赋予用户归档的权限

SQL> grant flashback archive on test_fa to scott;

2)连接用户

SQL> conn scott/tiger;

3)为emp表启用闪回归档

SQL> alter table emp flashback archive test_fa;

至此,emp表就拥有了可以查询或回退到过去2年任意时间点的能力!

闪回数据库(Flashback Database)

功能描述:闪回数据库可将整个数据库回退到过去某个时间点,闪回表是某张表的时空穿梭,闪回数据库则是整个数据库的时空穿梭。当然,闪回点之后的所有工作就丢失了,其实就相当于数据库的不完整恢复,所以只能以resetlogs模式打开数据库。闪回数据库会造成停机时间,当然相比于传统备份恢复机制,恢复过程会快很多。

工作原理:闪回数据库不使用撤销数据,使用另外一种机制来保留回退所需要的恢复数据,当启用闪回数据库,发生变化的数据块会不断从数据库缓冲区缓存中复制到闪回缓冲区,然后,称为恢复写入器(Recovery Writer)的后台进程会将这些数据刷新到磁盘中的闪回日志文件中。闪回的过程,则是一个 提取闪回日志–>将块映像复制回数据文件 的过程。

配置闪回数据库(闪回数据库要求数据库为归档模式)

1)指定闪回恢复区,也就是存放闪回日志的位置,但闪回恢复区不仅仅是为了存放闪回日志,Oracle的很多备份恢复技术都用到这个区域,比如控制文件的自动备份等都会存放到此区域。

SQL> alter system set db_recovery_file_dest ='/flash_recovery_area';

2)指定恢复区大小

SQL> alter system set db_recovery_file_dest_size=4G;

3)指定闪回日志保留时间为2小时,即通过闪回操作,可以将数据库回退到前两小时内的任意时间点

SQL> alter system set db_flashback_retention_target=120;

4)有序关闭数据库–mount模式下启用闪回数据库–打开数据库

SQL> shutdown immediate;SQL> startup mount;SQL> alter database flashback on;SQL> alter database open;

至此,闪回数据库配置完成!

使用闪回数据库功能

SQL> shutdown immediate;SQL> startup mount;SQL> flashback database to timestamp sysdate-60/1440;SQL> alter database open resetlogs;

本节列举了四类闪回技术,其中,闪回查询,包括基本闪回查询,闪回表等技术都依赖于撤销数据(还有一类闪回技术为闪回事务,可以对指定事务进行闪回操作,原理类似,借助于撤销数据来构建用于反转事务的SQL语句),依赖于撤销数据,则自然受限于撤销数据的保留时间,可能会由于撤销数据被覆写而导致闪回失败。闪回删除,则是由于10g版本后对表的删除仅表现为一个rename操作,引入回收站的概念,但此回收站仅是当前表空间的一块逻辑划分,所以会受限于当前表空间的可用空间的限制;闪回归档可提供查询或回退到过去任意时间点的功能,闪回数据库则是一中更极端的数据库恢复功能,相当于不完整恢复,依赖于闪回日志。

闪回区空间分配与监控

对于启用闪回区特性之后,闪回区帮助管理全部的磁盘空间分配。Oracle会自动监控闪回区空间的使用情况。
关于闪回区空间分配大小应根据当前数据库备份的方式,备份是否压缩,每天归档日志大小,是否启用了闪回等多项因素综合来考量。
闪回区中可用空间达到不安全的程度或不够用的情形,可以通过OEM或DBA_OUTSTANDING_ALERTS获得相关信息。
会在Alert日志文件中生成警告:

  • 当可回收空间低于DB_RECOVERY_FILE_DEST_SIZE定义值的15%时,生成警报;
  • 当可回收空间低于DB_RECOVERY_FILE_DEST_SIZE定义值的3%时,生成严重警报;
  • 当整个闪回区被完全填满时,系统不可用,直接报ORA-19815,ORA-19809 :limit exceeded for recovery files (闪回区空间被填满,不表示当前的磁盘挂载点空间不够)

FRA空间不够用或出现严重告警的情形,应考虑从以下方面着手解决:

  • 如果仅仅是参数DB_RECOVERY_FILE_DEST_SIZE大小限制,磁盘空闲空间很多,则直接修改该参数到一个更大的值;
  • 如果磁盘空闲空间不多,应考虑分配更多的磁盘空间给文件系统,然后再修DB_RECOVERY_FILE_DEST_SIZE参数到一个更大的值;
  • 如果无法分配额外的磁盘空间,可以考虑迁移闪回区到有较多可用空间的另外一个文件系统,可以使用backup recovery area命令将整个FRA内容移动到另外的位置。

删除FRA中较早备份集或归档日志,建议使用RMAN命令来删除,若直接从os删除,Oracle认为FRA的空间并没有释放(需要crosscheck再delete)

Oracle除了在alert日志中对有关FRA空间产生警告之外,还提供了一系列相关的视图来监控闪回区。

DBA_OUTSTANDING_ALERTS:可以查询闪回区空间相关的问题(空间问题记录到该视图中存在一定程度的延迟)。
V$RECOVERY_FILE_DEST:该视图中描述了与闪回区有关的定义信息,包括闪回区的位置、大小、所使用的空间数量、可回收空间等等。

V$FLASH_RECOVERY_AREA_USAGE:该视图提供了关于占用闪回区空间的文件类型的详细信息。按文件类型进行分组,分别列出该类文件已使用的,可回收的百分比以及文件数量。

启动闪回功能

查看是否开启闪回功能:

SQL> select flashback_on from V$database;FLASHBACK_ON
------------------
NO

执行如下操作启动闪回功能

$ cd /oracle--生成闪回目录
$ mkdir flashbackSQL> alter system set db_recovery_file_dest_size=30G scope=both;SQL> alter system set db_recovery_file_dest='/oracle/flashback'  scope=both;SQL> shutdown immediateSQL> startup mountSQL> alter database archivelog;SQL> alter database flashback on;SQL> alter database open;

再次查看是否开启闪回功能

SQL> select flashback_on from V$database;FLASHBACK_ON
------------------
YES

参考:
本文整理自文章:Oracle闪回区(FRA)和Oracle 闪回技术详解
更多内容可参考:https://docs.oracle.com/en/database/oracle/oracle-database/19/haovw/ha-features.html#GUID-5E4FDB4B-465B-441E-8AE1-6BB0CF274A28

Oracle 闪回技术详解相关推荐

  1. Oracle闪回技术详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  2. 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  3. oracle flash_back oracle闪回技术详解,oracle flashback 闪回技术实例

    oracle flashback 闪回技术实例 相关操作 1.DBA必须设定undo保持力足够大以能够重构需要闪回的数据 ALTER SYSTEM SET UNDO_RETENTION=; secon ...

  4. oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  5. Oracle 闪回技术详解(flashback)

    文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...

  6. oracle闪回数据库详解

    --- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...

  7. oracle 闪回表定义,oracle闪回表详解

    --- 说明闪回数据库 --- 使用闪回表将表内容还原到过去的特定时间点 --- 从删除表中进行恢复 --- 使用闪回查询查看截止到任一时间点的数据库内容 --- 使用闪回版本查询查看某一行在一段时间 ...

  8. Oracle 闪回特性 详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  9. oracle 闪回功能详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,可以查询以前的 ...

最新文章

  1. php 使用 go函数指针,golang 什么时候使用指针
  2. 鸿蒙系统的变化,鸿蒙系统没变化的背后
  3. 字符串includes_字符串操作大全:面试准备和日常编码所需一文打尽
  4. 组织文化运营_组织可以从开放文化和技术中学到什么
  5. 网络知识和交换机的基本配置知识培训
  6. linux的FTP服务器搭建及FTP服务器的入侵和防御
  7. 夏普打印机提示需要维护请联系服务器,夏普打印机错误代码fk3的解决办法
  8. 美团外卖uml流程图_以美团外卖为例,区别业务流程图和页面流程图 | 人人都是产品经理...
  9. php怎么弄面包屑,php实现面包屑导航例子分享
  10. Fabric CA 用户指南
  11. mysql mtq_mysql实现远程登录
  12. 《计算机网络》从零单排上王者之——坚韧黑铁篇
  13. 学校网页设计成品 基于HTML+CSS+JavaScript仿山东财经大学官网 学校班级网页制作模板 校园网页设计成品
  14. Python语法——列表、元组、集合、字典
  15. 【python 爬虫】百度手机助手爬虫
  16. 二进制拆弹(炸弹炸掉了我的头发 T.T)
  17. 3.摄像模组之Golden模组
  18. 词袋模型和词向量模型
  19. 十万 百万 级数据处理 以及可视化 画图
  20. java作业题exercise1

热门文章

  1. unity 手写板功能 HandwritingBoard
  2. 【云计算与虚拟化】第二章 实验一 VMware Workstation的使用
  3. 虚拟机当服务器的设置,虚拟机当作设置服务器
  4. 实时数仓Hologres 新一代弹性计算组实例技术揭秘
  5. .NET Framework 入门
  6. Hive启动报错java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
  7. 学堂在线疾风计划程序设计基础第1-4章
  8. Android RxJava操作符的学习---功能性操作符
  9. Clustering and Exploring Search Results using Timeline Constructions (paper2)
  10. mysql mha 安装_MySQL高可用方案 MHA之一MHA安装