【云原生进阶之数据库技术】第二章-Oracle-原理-4.6.3.1-Flashback闪回技术总述

发布于:2024-06-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

1 闪回技术综述

        Oracle数据库作为企业级数据库系统之一,在数据安全和故障恢复方面都拥有优异的表现。其中,闪回技术作为一项备受追捧的恢复能力,能够在不停止数据库的情况下,撤销数据库中的误操作,并快速回滚到先前的状态。

 1.1 数据库闪回概述

        闪回技术(Flashback)是Oracle数据库提供的基于时间点或SCN(System Change Number)回滚数据的技术。它比常规的恢复方式(如备份、日志应用)更快、更方便,也可以回滚到秒级别。

        任何预防措施都无法避免人为失误的发生。Oracle 数据库闪回技术是一组独特而丰富的数据恢复解决方案,能够有选择性地高效撤销一个错误的影响,从人为错误中恢复。在采用闪回技术之前,损坏数据库只需数分钟,而要恢复它则需要数小时。有了闪回技术,纠正错误只需要数分钟的时间。此外,从错误中恢复所需的时间与数据库大小无关,这是 Oracle 数据库独有的功能。闪回技术支持在所有层面上进行恢复,包括行、事务、表和整个数据库。它的优点包括: 

  1. 不需要制作备份:在不修改数据的情况下快速恢复误操作。
  2. 比普通回滚(Rollback)更加快速、灵活:可以回滚到任何时间点、SCN或者特定事务。
  3. 弱化对应用程序的影响:整个恢复过程对应用程序的影响很小,甚至可以不中断正在执行的事务。

        需要注意的是,闪回技术旨在快速恢复逻辑错误,对于物理损坏或是介质丢失的错误,闪回技术就回天乏术了,还是得借助于Oracle一些高级的备份恢复工具如RAMN去完成。

1.2 闪回技术的历史演进

        Oracle数据库在9i首次引入闪回概念,提供了闪回查询功能。

        Oracle 10g版本:优化了闪回的效率,同时简化了闪回的使用方法;引入了更多的扩充闪回技术,包括:闪回数据库(Flashback Database)、闪回表(Flashback Table)、闪回删除(Flashback Drop)、闪回版本查询(Flashback Versions Query)和闪回事务查询(Flashback Transaction Query)。从这个版本开始,闪回功能已经十分完善。

        Oracle 11g版本:引入了一种使用闪回数据存档管理和查询长期历史数据的创新方法,即Total Recall。(Total Recall最初是作为数据库的选件,12c以后包含在企业版中。中间改名为Flashback Data Archive,目前最新的名字为Oracle Flashback Time Travel)此版本还提供了一种简单的一步式事务撤销操作,具有新的闪回事务功能。

        Oracle 12c版本:Flashback Data Archive(即之前的Total Recall)功能的增强;12.2开始支持单个PDB的闪回。

        Oracle 19c版本:DG备库随主库闪回而自动闪回;闪回日志在FRA空间自动清理机制的引入。

1.3 数据库闪回的应用场景范围

        Oracle数据库的闪回技术在应用中,主要可以解决以下问题:

1. 误删除数据:使用delete语句不小心删了重要数据,需要快速恢复。

2. 误修改数据:使用update语句不小心把数据修改掉,需要快速还原。

3. 误执行DDL语句:使用alter、drop等DDL语句不小心对表结构造成影响,需要快速回滚。

4. 网络故障:由于网络故障导致一些插入数据的事务出错,需要断电等方式恢复,此时闪回技术可以避免数据丢失。

1.3.1 误操作恢复

        当用户或管理员误操作导致数据被删除或修改时,可以使用闪回技术将数据库恢复到误操作之前的状态。

-- 闪回表到指定时间点
FLASHBACK TABLE employees TO TIMESTAMP TO_STIMESTAMP('2023-01-01 17:55:00','yyyy-mm-dd hh24:mi:ss');--指定时间
FLASHBACK TABLE employees TO TIMESTAMP SYSTIMESTAMP - interval '5' MINUTE;--5分钟之前
-- 闪回表空间到指定时间点
FLASHBACK TABLESPACE tablespace_name TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
--恢复删除的表
FLASHBACK TABLE employees TO BEFORE DROP;
--恢复删除的表并指定新的名称
FLASHBACK TABLE