Oracle Flashback技术简介与快速入门
以下文章均来自MOS中的 Primary Note For Oracle Flashback Technologies (Doc ID 1138253.1)
Flashback技术的发展史
MOS 1138253.1 介绍了Flashback技术发展历史。
- Oracle9i,1个特性,Flashback Query
- Oracle 10g,5个特性,Flashback Database, Flashback Table, Flashback Drop, Flashback Versions Query, and Flashback Transaction Query.
- Oracle 11g,2个特性,Flashback Data Archive, Flashback Transaction (Backout)
这个网页也谈到了Flashback发展史。
11g以后,没有新的Flashback技术,只有针对这几个技术的增强。详见Oracle Database Features。比较重要的包括:
- Flashback Database Support for Datafile Shrink
- PDB的支持
- 新增对一些DDL的支持
- Temporal Validity Flashback Queries
可以和Flashback配合使用的技术包括:
- ADG
- OGG
- RMAN
- Temporal Validity
Flashback技术:一个特性一句话
Flashback技术总共包括8个特性。
MOS 1138253.1中关于各特性的简要描述也不错,尽管在官网页面上也有。
Oracle Flashback Database lets you quickly bring your database to a prior point in time by undoing all the changes that have taken place since that time. This operation is fast, because you do not need to restore the backups. This in turn results in much less downtime following data corruption or human error.
Oracle 闪回数据库可让您通过撤消自该时间点以来发生的所有更改,快速将数据库恢复到之前的时间点。 此操作很快,因为您不需要恢复备份。 这反过来又会大大减少数据损坏或人为错误后的停机时间。
Oracle Flashback Table lets you quickly recover a table to a point in time in the past without restoring a backup.
Oracle 闪回表使您可以快速将表恢复到过去的某个时间点,而无需恢复备份。
Oracle Flashback Drop provides a way to restore accidentally dropped tables.
Oracle Flashback Drop 提供了一种恢复意外删除表的方法。
Oracle Flashback Query lets you view data at a point-in-time in the past. This can be used to view and reconstruct lost data that was deleted or changed by accident. Developers can use this feature to build self-service error correction into their applications, empowering end-users to undo and correct their errors.
Oracle 闪回查询让您可以查看过去某个时间点的数据。 这可用于查看和重建意外删除或更改的丢失数据。 开发人员可以使用此功能在他们的应用程序中构建自助纠错功能,使最终用户能够撤消和更正他们的错误。
Oracle Flashback Version Query uses undo data stored in the database to view the changes to one or more rows along with all the metadata of the changes.
Oracle 闪回版本查询使用存储在数据库中的撤消数据来查看对一行或多行的更改以及更改的所有元数据。
Oracle Flashback Transaction Query lets you examine changes to the database at the transaction level. As a result, you can diagnose problems, perform analysis, and audit transactions.
Oracle 闪回事务查询让您可以在事务级别检查对数据库的更改。 因此,您可以诊断问题、执行分析和审计事务。
以上介绍了5种Flashback技术,实际还缺2种,补充如下:
Flashback Transaction undo the effects of a single transaction, and optionally, all of its dependent transactions. via a single PL/SQL operation or by using an Enterprise Manager wizard.
闪回事务撤消单个事务的影响,并可选择撤消其所有相关事务的影响。 通过单个 PL/SQL 操作或使用企业管理器向导。
Total Recall efficiently manage and query long-term historical data. Total Recall automatically tracks every single change made to the data stored inside the database and maintains a secure, efficient and easily accessible archive of historical data.
Total Recall高效管理和查询长期历史数据。 Total Recall 自动跟踪对存储在数据库中的数据所做的每一次更改,并维护一个安全、高效且易于访问的历史数据存档。
Total Recall最初是作为数据库选件,12c以后包含在企业版中。中间改名为Oracle Flashback Data Archive,目前最新的名字为Oracle Flashback Time Travel
许可
所有的Flashback特性都包含在Oracle数据库企业版中,只有一个例外:
Flashback Time Travel如果需要历史数据优化功能,则需要Oracle Advanced Compression选件。
Flashback技术的分类
类型 | 特性 | 面向 | 目的 | 粒度 | 依赖 | 示例场景 | 物理/逻辑 | 语法 | 后台进程 |
---|---|---|---|---|---|---|---|---|---|
Investigation / Correction | FLASHBACK QUERY | 开发者 | 在表中查询前一个时间点的值 | 行级 | UNDO | - 批量更新后验证值 -用上午 10 点的值替换列的最新值 | 逻辑 | AS OF SCN/TS | |
Investigation | FLASHBACK VERSION QUERY | 开发者 | 查询一个表在两个时间点之间发生的变化 | 行级 | UNDO | - 监控过去一天的现货库存数量变化 - 获取改变值的交易ID | 逻辑 | VERSIONS BETWEEN… | |
Investigation | FLASHBACK TRANSACTION QUERY | 开发者 | 查询交易明细 | 行级 | UNDO, REDO | - 查看谁进行了交易以及它影响了哪些价值 | 逻辑 | XID | |
Correction | FLASHBACK TABLE | DBA | 将表内容倒回到某个时间点 | 表级 | UNDO | - 一些更新语句错误地更新了表中的多行,需要回退这些修改。 | 逻辑 | TO SCN/TS/RP | |
Correction | FLASHBACK DROP | DBA | 恢复已删除的对象 | 表级 | RECYCLE BIN | - 用户不小心删除了需要恢复的表 | 逻辑 | TO BEFORE DROP | |
Correction | FLASHBACK TRANSACTION | DBA | 撤销交易 | 行级 | UNDO REDO | - 反转更新了几个表的事务 | 逻辑 | DBMS_FLASHBACK.TRANSACTION_BACKOUT | |
Investigation / Correction | FLASHBACK TIME TRAVEL | 开发者 | 查询长期的历史数据 | 行级 | UNDO | - Digital Shredding - 访问历史数据 - 报告与审计 - 恢复数据 | 逻辑 | AS OF SCN/TS | FBDA |
CDP | FLASHBACK DATABASE | DBA | 将整个数据库倒回到以前的时间点 | 数据库级 | FLASHBACK LOGS ARCHIVED REDO LOGS | -用户truncate了几个重要的表,需要恢复。 | 物理 | TO SCN/RP/GRP | RVWR |
有个问题需要确认,FLASHBACK TRANSACTION QUERY需要开归档吗?依赖REDO吗。
目前的答案是依赖REDO,可以不开归档。这里清楚了一个概念,就是不开归档也会有REDO,但REDO满了会覆盖,开启归档后REDO满后会归档。
快速入门
参考What Do All 10g Flashback Features Rely on and what are their Limitations ? (Doc ID 435998.1) To BottomTo Bottom,这篇文章介绍了各种Flashback特性依赖的底层技术,先决条件和限制。
Flashback特性 | 先决条件 | 初始化参数 | 监控 | 主要限制 |
---|---|---|---|---|
Flashback Database | - 开启归档 - 配置FRA - 显式(ALTER DATABASE)/隐式(GRP)启用Flashback模式 - 干净的shutdown - 数据库处于mounted但未open状态 | DB_FLASHBACK_RETENTION_TARGET(默认1440分钟) | V$FLASHBACK_DATABASE_LOG | - 只能撤消 Oracle 数据库对数据文件所做的更改 - 不能用于修复介质故障,或从数据文件的意外删除中恢复 |
Flashback Drop | - 表位于你的Schema中,或者你具有DROP ANY TABLE权限 - 先前有不带PURGE的DROP TABLE操作 | RECYCLEBIN(默认ON) | - SHOW RECYCLEBIN - *_RECYCLEBIN | - 不能恢复TRUNCATE的表 |
Flashback Table | - AUM(自动Undo管理) - 读写表的对象权限和FLASHBACK TABLE系统权限 - 启用ROW MOVEMENT | UNDO_*(默认AUM,保留900秒) | DBA_TABLESPACES.RETENTION | - 系统表等对象不支持 - 部分DDL不支持,如增加约束,TRUNCATE表 |
Flashback [Versions] Query | - 对象的SELECT权限,FLASHBACK TABLE系统权限 | UNDO_*(默认AUM,保留900秒) | VERSIONS_*隐藏列 | - 无法跨越修改列、删除或截断表的 DDL 操作 |
Flashback Transaction Query | - 对象的SELECT权限,FLASHBACK TABLE系统权限 - 开启supplemental logging | UNDO_*(默认AUM,保留900秒) | - FLASHBACK_TRANSACTION_QUERY - VERSIONS_XID隐藏列 | - 无法跨越部分DDL操作 - CDB中不支持 |
Flashback Transaction | - 开启归档 - 开启supplemental logging | UNDO_*(默认AUM,保留900秒) | FLASHBACK_TRANSACTION_QUERY *_FLASHBACK_TXN_REPORT | - 不支持LOB数据类型 - CDB中不支持 |
Flashback Time Travel | - 创建FDA - 表开启了FLASHBACK ARCHIVE | UNDO_*(默认AUM,保留900秒) | FLASHBACK_TRANSACTION_QUERY **_FLASHBACK_ARCHIVE* | - 不支持LONG数据类型 - 不支持部分表类型,如嵌套表 - 不支持部分DDL操作,如合并分区 |
Flashback Database
推荐看Flashback Database Best Practices & Performance (Doc ID 565535.1),其中最有价值的是给出了其主要应用场景和配置最佳建议(含Sizing)。
主要应用场景包括:
- 时间点恢复 – 可用于快速恢复 1) 批处理程序错误的修改了数据库的重要部分 2) 数据库崩溃,同时online redo log损坏 3) 应用升级错误的修改了数据库。
- Data Guard Fast-start failover - 快速将主数据库恢复(实例化)为备用数据库。
- 手工主数据库重新实例化- 如果Data Guard没有启用fast-start failover特性,然后Data Guard又必须failover, 此时可以使用闪回数据库手动恢复(实例化)发生故障的主数据库。与通过网络执行数据库恢复所需的大量工作和时间相比,无论数据库大小如何,通过闪回恢复发生故障的主数据库都可以在几分钟内完成。
- Data Guard Snapshot Standby - 快照备用数据库是一个完全可更新的备用数据库。 它从主数据库接收并归档重做数据,但不应用它。 当物理备用数据库转换为快照备用数据库时,会创建隐式保证还原点(GRP),并且当快照备用数据库转换回物理备用数据库时,此还原点用于将快照备用数据库闪回到其原始状态。
- 闪回失败的数据库升级 - 除了备份数据库之外,建议创建闪回保证还原点 (GRP)。 只要在创建 GRP 后不更改数据库 COMPATIBLE 参数,就可以在(失败的)升级后轻松闪回数据库。 自动升级工具还将提供在继续升级之前创建 GRP 的选项。 闪回 GRP 将撤消创建 GRP 后数据库中所做的所有更改。
- 使用Transient Logical Standby或 DBMS_ROLLING 的物理备库滚动数据库升级 - 当物理备用数据库临时转换为逻辑备用数据库时,作为数据库滚动升级的一部分,在升级过程之前会在主数据库上建立一个有保证的还原点。 这是为了在升级后可以闪回数据库并将其转换回物理备用数据库。
- RMAN - 闪回数据库与 Oracle Recovery Manager 集成,在恢复(recovery)过程中隐式使用,如果需要则显式使用。 RMAN 隐式使用闪回数据库的一个示例是在执行块介质恢复时。
- 恢复测试和培训数据库 - 闪回数据库的另一个常见用途是在每次测试运行或培训会话后将测试或训练数据库闪回到之前相同的起点。
- Flashback PDB - 从 Oracle 12.2 及更高版本开始,闪回可插拔数据库 (PDB) 可以在不影响其他 PDB 的情况下倒回 PDB。 您还可以创建 PDB 还原点。当然,整个CDB的还原也是支持的。
关于配置,可参看Configure flashback database (Doc ID 249319.1),其中有用的信息为:
- Flashback Database和DBPITR的目的类似,都是In-Complete recovery,但通常会更快,更有效率。
- 此功能不适用于在介质发生故障时恢复数据库。
- 将数据库闪回到过去特定时间所需的时间与所做更改的数量成正比,而不是与数据库的大小成正比。
Flashback Drop
10g Recyclebin Features and How to Disable it (Doc ID 265253.1)讲了如何禁用Flashback Drop。
而Purge, Flashback Before Drop While Multiple Tables in the Recyclebin With Same Name (Doc ID 266477.1) To BottomTo Bottom则讲了当某表反复创建和DROP,并且名字相同时,如何恢复。
Flashback Table
How to recover Table data Using the Flashback Table Feature (Doc ID 246421.1)详细解释了特性并给出了配置示例。其中要点包括:
- 必须配置AUM,即自动Undo管理,但我记得是最佳建议。
- 自动恢复所有表属性,例如索引、触发器等
- 满足约束指定的数据完整性
- 指定undo表空间的RETENTION GUARANTEE子句,保证未过期的undo数据不被丢弃。
Flashback Query
Oracle9i: Recovering lost data through Flashback Query (Doc ID 174425.1)给出了配置过程和两个示例,分别是查看和恢复之前的数据。
Parameters FLASHBACK_SCN And FLASHBACK_TIME: Point In Time Export (Doc ID 204334.1)说明了Data Pump的时间点导出特性,对应的参数为FLASHBACK_SCN和FLASHBACK_TIME。
Flashback Versions
此特性是SQL的扩展,也就是SELECT语句增加了VERSIONS BETWEEN子句。
Flashback Version Query & Flashback Transaction Query - Oracle 10G Enhancement (Doc ID 270270.1)给出了Flashback Version Query 和 Flashback Transaction Query两个特性的示例,他们是10g的特性,是9i Flashback Query的增强。
Flashback Transaction
闪回交易是DBMS_FLASHBACK包的一部分。
此特性通常和Flashback Versions Query联合使用,也就是由后者提供感兴趣的XID。
Flashback Data Archive
简称FDA,现在叫Flashback Time Travel。
Flashback Data Archive Guide. (Doc ID 470199.1)讲述了FDA的配置过程。
Are Flashback Archive History Tables Exportable? (Doc ID 566593.1)过时了,现在可以用FLASHBACK_ARCHIVE_MIGRATE 包和 Oracle Transportable Tablespaces 功能将闪回存档基表连同它们的历史导出和导入到另一个数据库。