当前位置: 首页 > news >正文

71-Oracle Undo与Flashback管理(Guarantee设置)深度解析

小伙伴们有没有在操作undo表空间、Flashback管理,时间保留设置,总有些配置需要提前预置好,否则闪回查询和表的时候出现报错。

需短期恢复(秒级~小时)直接上UNDO_RETENTION同时启用RETENTION GUARANTEE,Undo为Flashback Query/Table提供基础,时间短。

需全天候整库回退直接启用Flashback Database并设定DB_FLASHBACK_RETENTION_TARGET。通过独立存储实现强时间保证,需要大空间。

一、核心机制对比与联系

1. Undo机制
  • 作用​:存储数据修改前镜像(Before Image),支撑事务回滚、读一致性​(MVCC)及闪回查询​
  • 存储位置​:专用Undo表空间,按回滚段组织。
  • 生命周期​:
    • 事务提交后数据保留时长由UNDO_RETENTION控制(默认900秒)
    • 空间不足时未过期数据可能被覆盖(除非启用RETENTION GUARANTEE)
  • 数据覆盖逻辑​:
-- 查看Undo保留策略
SELECT tablespace_name, retention FROM dba_tablespaces WHERE contents = 'UNDO';
2. Flashback机制分类​

​类型​

​依赖组件​

​恢复粒度​

​时间窗口限制​

​Flashback Query​

Undo表空间

行级

UNDO_RETENTION(默认15分钟)

​Flashback Table​

Undo表空间

表级

同上

​Flashback Drop​

回收站(Recycle Bin)

表及关联对象

表空间空间压力决定

​Flashback Database​

Flashback Logs

数据库级

DB_FLASHBACK_RETENTION_TARGET

(默认24小时)

​Flashback Data Archive​

独立归档区

表级(长期)

用户自定义(可达数年)

3. 核心联系
  • Undo是Flashback的基础​:Flashback Query/Table直接读取Undo中的前镜像数据恢复历史状态 
  • 回收站是Flashback Drop的载体​:被删除对象重命名后暂存于回收站,空间不足时自动清理 
  • Flashback Database依赖独立日志​:使用Flashback Logs记录块变化,与Undo分离 

 二、GUARANTEE时间核心区别概览

​特性

​Undo保留时间​

​Flashback保留时间​

​定义​

已提交事务的Undo数据保留最短时间

闪回功能可恢复的历史时间范围

​目的​

保障读一致性和事务回滚

支持数据库/表/查询的闪回操作

​参数​

UNDO_RETENTION(秒)

DB_FLASHBACK_RETENTION_TARGET(分钟)

​存储​

Undo表空间

闪回日志(Flashback Logs)

​依赖​

所有DML操作自动生成

需要显式启用闪回数据库功能

​单位​

分钟

1. ​Undo保留时间机制
  • 数据生命周期​:
    • Active → Unexpired(保留期内)→ Expired(可覆盖)
  • 关键特性​:
    • 最小保证​:非强制保留(除非RETENTION GUARANTEE)
    • 自动调整​:AUM模式下动态计算TUNED_UNDORETENTION
2. ​Flashback保留时间机制
  • 核心组件​:
    • 闪回缓冲区(SGA内存)
    • RVWR进程(Recovery Writer)
    • 闪回恢复区(Flash Recovery Area)
3. ​时间窗口关系
  • 关键约束​:闪回查询最大时间范围 ≤ Undo实际保留时间闪回数据库最大时间范围 ≤ Flashback保留时间

 

三、UNDO记录和flashback日志管理区别与关联

1. ​功能边界

Undo机制是事务级数据安全的基础,闪回技术依赖Undo并扩展为运维级恢复工具,两者协同保障Oracle的高可用性

​维度​

​Undo记录管理​

​闪回日志管理​

​核心目的​

支持事务回滚、读一致性、MVCC

实现整库/表级快速恢复(误操作回滚)

​存储机制​

存于Undo表空间,逻辑记录数据前镜像

存于闪回恢复区,物理记录块变化

​生命周期控制​

UNDO_RETENTION

+ 状态机(ACTIVE/UNEXPIRED/EXPIRED)

DB_FLASHBACK_RETENTION_TARGET

时间阈值

​空间重用​

EXPIRED状态自动覆盖

超时后自动删除

2. ​存储对比 

​特性​

​Undo存储​

​Flashback存储​

数据结构

行级前镜像

数据块级变化

写入频率

每次DML操作

每3秒或块变化时

存储位置

Undo表空间

闪回恢复区

空间回收

事务级自动回收

基于保留策略自动清理

四、配置与监控实战

1. 配置命令对比,Undo保留时间验证
-- Undo保留配置(动态)-- 1小时
ALTER SYSTEM SET UNDO_RETENTION = 3600;
System altered.
-- Flashback保留配置(需重启)1440=24小时
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=1440 SCOPE=SPFILE;
ALTER DATABASE FLASHBACK ON;-- 查看Undo配置及使用情况
SELECT tablespace_name, status, retention FROM dba_tablespaces WHERE contents = 'UNDO';
SELECT begin_time, end_time, tuned_undoretention FROM v$undostat;
--举例
SYS@CDB$ROOT> SELECT tablespace_name, status, retention FROM dba_tablespaces WHERE contents = 'UNDO';TABLESPACE_NAME    STATUS    RETENTION
__________________ _________ ______________
UNDOTBS1           ONLINE    NOGUARANTEESYS@CDB$ROOT> SELECT begin_time, end_time, tuned_undoretention FROM v$undostat;BEGIN_TIME    END_TIME        TUNED_UNDORETENTION
_____________ ____________ ______________________
23-JUN-25     23-JUN-25                      3600
23-JUN-25     23-JUN-25                      1207
22-JUN-25     22-JUN-25                       900
22-JUN-25     22-JUN-25                       900
139 rows selected.
 2. 监控脚本
-- Undo实际保留时间监测
SELECT TO_CHAR(BEGIN_TIME, 'YYYY-MM-DD HH24:MI') AS SNAPSHOT_TIME,TUNED_UNDORETENTION AS ACTUAL_RETENTION_SEC
FROM V$UNDOSTAT
ORDER BY BEGIN_TIME DESC
FETCH FIRST 24 ROWS ONLY;
--23ai
SNAPSHOT_TIME          ACTUAL_RETENTION_SEC
___________________ _______________________2025-06-23 06:27                        900
24 rows selected.
-- Flashback时间窗口检测
SELECT OLDEST_FLASHBACK_SCN,OLDEST_FLASHBACK_TIME,(SYSDATE - OLDEST_FLASHBACK_TIME)*24 * 60 AS ACTUAL_RETENTION_MIN
FROM V$FLASHBACK_DATABASE_LOG;
--23aiOLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TIME                            ACTUAL_RETENTION_MIN
_______________________ ________________________ ____________________________________________5420833 21-JUN-25                   2158.716666666666666666666666666666666672
 3. 关联性验证实验
-- 步骤1:设置不同保留时间
ALTER SYSTEM SET UNDO_RETENTION = 600;          -- 10分钟
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=30; -- 30分钟
--System altered.
-- 步骤2:创建测试表
CREATE TABLE flash_test AS SELECT * FROM all_objects;-- 步骤3:记录时间点
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
SELECT SYSDATE AS START_TIME FROM DUAL;
--
START_TIME
______________________
2025-06-23 14:15:17
-- 步骤4:执行数据变更(延迟15分钟)
BEGINDBMS_LOCK.SLEEP(900);  -- 等待15分钟DELETE FROM flash_test;COMMIT;
END;
/-- 步骤5:测试闪回能力
-- 尝试10分钟前闪回查询(应成功)
SELECT COUNT(*) FROM flash_test AS OF TIMESTAMP SYSDATE - INTERVAL '10' MINUTE;
--COUNT(*)
___________0
-- 尝试20分钟前闪回查询(可能失败)
SELECT COUNT(*) FROM flash_test AS OF TIMESTAMP SYSDATE - INTERVAL '20' MINUTE;
-- 预期错误: ORA-01555
-- 尝试闪回数据库到15分钟前(应成功)
SHUTDOWN IMMEDIATE
STARTUP MOUNT
FLASHBACK DATABASE TO TIMESTAMP SYSDATE - INTERVAL '15' MINUTE;
ALTER DATABASE OPEN RESETLOGS;
4. 技术验证脚本​
​4.1. Flashback Query恢复误删数据
-- 场景:恢复10分钟前误删除的数据
CREATE TABLE fbtest_emp (id NUMBER, name VARCHAR2(50));
INSERT INTO fbtest_emp VALUES (1, 'flashback_USER');
COMMIT;-- 模拟误删除(10分钟后)
DELETE FROM fbtest_emp;
COMMIT;
--或者模拟删除后等待900s也就是15分钟
BEGINDBMS_LOCK.SLEEP(900);DELETE FROM fbtest_emp;COMMIT;
END;
/
-- 闪回查询恢复
INSERT INTO fbtest_emp 
SELECT * FROM fbtest_emp 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' MINUTE);
 4.2. Flashback Table恢复误更新表​
-- 启用行移动
ALTER TABLE fbtest_emp ENABLE ROW MOVEMENT;-- 闪回至5分钟前状态
FLASHBACK TABLE fbtest_emp TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE);
 4.3 Flashback Drop恢复误删表​
-- 删除表并恢复
DROP TABLE fbtest_emp;
SHOW RECYCLEBIN; -- 查看回收站对象
FLASHBACK TABLE fbtest_emp TO BEFORE DROP;
 4.4. Flashback Database全库回滚​
-- 需提前启用Flashback Database
ALTER DATABASE FLASHBACK ON;-- 回退至1小时前
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
FLASHBACK DATABASE TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
ALTER DATABASE OPEN RESETLOGS;

​场景​

​推荐技术​

​原因​

单行数据误改/误删

Flashback Query

无需停机,基于Undo快速恢复

整表误操作(Update/Delete)

Flashback Table

依赖Undo,恢复表至指定时间点

表误删除

Flashback Drop

通过回收站直接还原,无需备份

全库逻辑错误(如批量误删)

Flashback Database

分钟级回退,比RMAN PITR更快

长期审计追溯(>7天)

Flashback Data Archive

独立存储突破Undo时间限制

​关键限制​:
  • - Flashback Query/Table受限于UNDO_RETENTION,超时后失效 。
  • - Flashback Database不支持介质故障恢复(需RMAN)。
  • - 回收站对象在表空间空间不足时自动清除​
 5. 故障处理矩阵

​现象​

​相关保留时间​

​解决方案​

ORA-01555

Undo保留不足

增加UNDO_RETENTION或表空间

ORA-00600 [3020]

Flashback保留不足

增大DB_FLASHBACK_RETENTION_TARGET

闪回查询范围不足

Undo保留

延长Undo保留期+保证模式

闪回数据库失败

FB保留

增加保留时间或缩短恢复点

六、使用体验

  • Undo是基石​:支撑事务回滚、读一致性和短期闪回,但受限于空间和保留策略。
  • Flashback是扩展​:
    • 短期恢复(Query/Table)依赖Undo;
    • 对象级恢复(Drop)依赖回收站;
    • 长期追溯(FDA)需独立归档区 
Undo保留是Flashback功能的基础支撑,而Flashback保留是高级恢复能力扩展。在启用闪回数据库的场景下,
建议始终满足UNDO_RETENTION >= DB_FLASHBACK_RETENTION_TARGET*60,以保障全时点恢复能力。

 

相关文章:

  • 艾立泰数字化方案重塑汽车包装载具管理
  • oracle 表空间与实例妙用,解决业务存储与权限处理难题
  • C++11 static_assert(基于Boost库)从入门到精通
  • Halcon ——— OCR字符提取与多类型识别技术详解
  • STM32学习笔记
  • 全链接神经网络,CNN,RNN各自擅长解决什么问题
  • DataWhale-零基础络网爬虫技术(三、爬虫进阶技术)
  • 使用 catthehacker/ubuntu Docker 镜像部署 GitHub Actions 本地运行环境
  • SpringSecurity6(认证-前后端分离)
  • MATLAB GUI界面设计 第四章——图像的绘制与显示
  • 电路图识图基础知识-塔式起重机控制电路识图与操作要点(三十五)
  • 深入解析 Windows 文件查找命令(dir、gci)
  • 窗口函数的概念
  • 为什么android要使用Binder机制
  • 顶级思维方式——认知篇九(经典语录)《约翰·克利斯朵夫》
  • LangChain4j从入门到实战(一)
  • DeepSeek今天喝什么随机奶茶推荐器
  • [C#] Task
  • 飞算 JavaAI:重构 Java 开发范式的工程化实践
  • Prim(普里姆)算法
  • 网站制作wap页面/seo排名点击报价
  • 网站 利润/查销售数据的网站
  • 如何做自己的公司网站/盐酸达泊西汀片是治疗什么的药物
  • 做企业福利网站起名/免费域名解析
  • wordpress 不能查看站点/免费推广网站2023mmm
  • 做风控的网站/cba最新排名