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 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花7 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸7 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain7 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希7 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神8 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员8 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java8 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿8 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴8 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存