Oracle - 闪回技术及生产实践

目录

一、无固定时长,由三大因素决定

二、查看时长及关键控制因素

[1. 闪回查询 / 闪回版本查询 / 闪回事务查询](#1. 闪回查询 / 闪回版本查询 / 闪回事务查询)

[2. 闪回表](#2. 闪回表)

[3. 闪回数据库](#3. 闪回数据库)

[4. 闪回删除](#4. 闪回删除)

三、影响查看时长的关键补充因素

四、实用查询:确认当前数据库的闪回查看能力


一、无固定时长,由三大因素决定

Oracle 闪回的历史数据查看能力没有统一默认值,核心受「功能类型」「参数配置」「系统状态」三重约束,不同闪回功能的查看窗口差异显著,且实际时长可能短于理论配置(因资源限制)。

二、查看时长及关键控制因素

Oracle 闪回包含 7 类核心功能(如闪回查询、闪回数据库等),各类功能的查看时长逻辑不同,具体如下:

1. 闪回查询 / 闪回版本查询 / 闪回事务查询
  • 依赖基础:UNDO 表空间(存储数据修改前的历史版本)
  • 控制参数:UNDO_RETENTION(单位:秒)
    • 默认值:900 秒(15 分钟)
    • 可手动调整(如设置为 1 天:ALTER SYSTEM SET UNDO_RETENTION = 86400;)
  • 实际查看时长
    • 最小保障:至少支持UNDO_RETENTION设定的时间(系统空闲时可能更长)
    • 上限限制:若 UNDO 表空间不足,或数据库事务量大,旧数据会被覆盖,实际时长可能短于配置值
  • 适用场景:查询表级历史数据(如误删 / 误改后的数据追溯),支持通过时间戳(AS OF TIMESTAMP)或 SCN(AS OF SCN)查询
2. 闪回表
  • 依赖基础:同闪回查询(UNDO 表空间 +UNDO_RETENTION参数)
  • 默认查看时长:部分文档提及默认 14400 分钟(1 天),本质仍受UNDO_RETENTION和 UNDO 表空间大小约束
  • 特殊限制:若表执行过 DDL 操作(如修改字段、重建索引),无法闪回到 DDL 操作之前的时间点
  • 前提条件:需启用表的行移动功能(ALTER TABLE 表名 ENABLE ROW MOVEMENT;)
3. 闪回数据库
  • 依赖基础:闪回恢复区(FRA)+ 闪回日志(记录数据块变更前镜像)
  • 控制参数:DB_FLASHBACK_RETENTION_TARGET(单位:分钟)
    • 默认值:1440 分钟(1 天)
    • 可手动调整(如设置为 3 天:ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET = 4320;)
  • 实际查看时长
    • 核心约束:闪回恢复区大小(DB_RECOVERY_FILE_DEST_SIZE参数),若空间不足,旧闪回日志会被删除,导致查看时长缩短
    • 前提条件:数据库需处于归档模式,且已配置闪回恢复区(DB_RECOVERY_FILE_DEST参数指定路径)
  • 适用场景:全库逻辑错误恢复(如批量更新错误),支持回退到指定时间点或 SCN
4. 闪回删除
  • 依赖基础:回收站(Recycle Bin)机制(误删表不会立即物理删除,而是逻辑重命名后存入回收站)
  • 查看时长:无固定参数控制,取决于:
    • 回收站未被手动清理(PURGE RECYCLEBIN;会永久删除回收站对象)
    • 表空间剩余空间:若表空间不足,Oracle 可能自动清理回收站中最早的对象
  • 恢复限制:若表被删除后,其所属表空间被删除或重命名,可能无法恢复

三、影响查看时长的关键补充因素

  1. 存储资源大小
    • UNDO 表空间越大,能保留的历史数据版本越多,闪回查询 / 闪回表的查看时长越长
    • 闪回恢复区(FRA)越大,可存储的闪回日志越多,闪回数据库的查看窗口越宽
  1. 数据库负载
    • 事务量越大,UNDO 数据和闪回日志生成越快,旧数据被覆盖的速度也越快,实际查看时长会缩短
    • 系统空闲时,UNDO 数据可能保留超过UNDO_RETENTION设定的时间,查看时长可能延长
  1. 功能兼容性
    • 动态性能视图(如V、X系列)不支持闪回查询,仅对DBA_、ALL_、USER_类视图有效
    • 闪回数据库无法恢复物理损坏(如数据文件丢失),仅适用于逻辑错误

四、实用查询:确认当前数据库的闪回查看能力

  1. 查看闪回查询的可用时长(基于 UNDO 配置):

    SELECT

    NAME, VALUE/60 AS "默认保留分钟", VALUE/3600 AS "默认保留小时"

    FROM V$PARAMETER

    WHERE NAME = 'undo_retention';

  2. 查看闪回数据库的配置时长:

    SELECT

    NAME, VALUE AS "默认保留分钟", VALUE/60 AS "默认保留小时"

    FROM V$PARAMETER

    WHERE NAME = 'db_flashback_retention_target';

  3. 查看闪回数据库的实际可用时间范围:

    SELECT

    OLDEST_FLASHBACK_SCN,

    TO_CHAR(OLDEST_FLASHBACK_TIME, 'YYYY-MM-DD HH24:MI:SS') AS "最早可闪回时间"

    FROM V$FLASHBACK_DATABASE_LOG;

下期的内容更精彩,期待一下吧!!


* Thanks you *

如果觉得文章内容不错,随手帮忙点个赞在看转发一下,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章。


*Spring 系列 - 往期推荐 *

如何快速起 Spring Ai Alibaba 的智能记忆会话的业务项目(零基础学习Ai-第一期)(推荐)****

利用Reids记忆存储(高并发),持久化记忆会话的基础业务功能(零基础学习Ai-第二期)

构建 Tools 达成智能化的会话的基础业务功能(零基础学习Ai-第三期)

Springboot单体架构下如何做 远程调用 (源码)

SpringBoot整合Openfeign接入Kimi Ai!!超简单,居然没多少行代码??(附加兜底教程)

SpringBoot接入Kimi实践记录轻松上手(推荐)

Spring Ai | 极简代码从零带你一起走进AI项目(中英)

Swagger | 手把手带你写自动生成接口文档的爽感(零基础亲测实用)

Mongodb | 基于Springboot开发综合社交网络应用的项目案例(中英)

Open Ai | 从零搭建属于你的Ai项目(中英结合)

MongoDB | 零基础学习与Springboot整合ODM实现增删改查(附源码)(推荐)********

Openfeign | 只传递城市代码,即可获取该地域实时的天气数据(免费的天气API)


*前后端 系列 - 往期推荐 *

彻底解决不同架构前后端分离项目的跨域问题(强烈推荐)

Vue 项目打包部署还存在问题?你知道怎么做吧?

Maven | 站在初学者的角度配置与项目创建(新手必学会)


*其他 系列 - 往期推荐 *

实现如何利用 Kafka 延时删除 用户邮箱的验证码(如何发送邮箱+源码) - 第一期

Docker小白入门教程一篇领你入门(CRUD全命令+无废话版+问题集)

想要高效处理,那不妨看看 Python的 异步 Asyncio 保证效率翻多倍

银河麒麟 | ubuntu 安装国产达梦DM8数据库(安装+外网通+IDEA连接)

国产操作系统-银河麒麟本地化部署Ollama国产开源的AI大模型Qwen3

Linux | 零基础Ubuntu搭建JDK

Redis | 缓存技术对后端的重要性,你知道多少?


感谢阅读 | 更多内容尽在公棕号 WMCode | CSDN**@小Mie不吃饭**

©著作权归作者所有,转载或内容合作请联系作者,谢谢支持与配合

相关推荐
爱丽_2 小时前
MyBatis事务管理与缓存机制详解
数据库·缓存·mybatis
Filotimo_2 小时前
EntityGraph的概念
java·开发语言·数据库·oracle
tianyuanwo2 小时前
RPM debugsource包的底层原理:深入解析rpmbuild 4.14中的调试源码打包机制
数据库·rpmbuild·debugsource
就叫飞六吧3 小时前
mysql表字段反查表名脚本-筛选法-查表技巧
数据库·mysql
1.14(java)3 小时前
MySQL数据库操作全攻略
java·数据库·mysql
jmxwzy3 小时前
MySQL
数据库·mysql
自己的九又四分之三站台4 小时前
PostgreSQL:万物皆可PostgreSQL的力量
数据库·postgresql
一条大祥脚4 小时前
25.12.30
数据库·redis·缓存
雨中飘荡的记忆4 小时前
MyBatis SQL执行模块详解
数据库·sql·mybatis