图文深入理解Oracle Total Recall
- List item
题记:本文图文深入理解Oracle Total Recall技术。
1. Oracle Total Recall 概述
Oracle Total Recall(也称为 Flashback Data Archive - 闪回数据归档)提供了一种用于跟踪数据库更改的机制,可自动跟踪数据库历史更改:
• 在表级别启用设置 UNDO 数据保留期限,不会出现快照太旧的错误。
• 启用后,所有数据更改的存储都是对应用程序透明的、并能够防止篡改。在表的整个生命期内跟踪并存储对该表的所有事务处理更改,无需将此功能内置到应用程序中。
• 超出归档保留期限的记录会被自动删除。
• 可使用闪回查询检索数据表的历史记录
SELECT … AS OF TIMESTAMP…
SELECT … VERSIONS BETWEEN TIMESTAMP and TIMESTAMP…

2. Oracle Total Recall 工作原理
以下图片是来自官方文档的解释:

- 工作原理
Oracle Total Recall是Oracle数据库中一种强大的数据历史记录功能。,Oracle Total Recall利用数据库中的undo日志和历史表功能,实现对数据历史记录的跟踪和存储。当数据库中的数据发生变化时,Total Recall会捕获这些变化,并将它们存储在指定的历史表空间中,以便后续进行闪回查询。 - 核心组件
Undo日志:Oracle数据库中的undo日志用于记录数据的更改历史。当数据发生变化时,undo日志会记录更改前的数据状态,以便在需要时进行回滚。
历史表空间:用于存储Total Recall捕获的数据更改历史。这些表空间可以包含一个或多个闪回数据归档(Flashback Data Archive),每个归档都有其特定的保留时间和空间配额。
闪回数据归档(FDA):是Oracle Total Recall的核心组件,用于跟踪和存储数据库表的更改历史。通过为表启用闪回归档,可以自动捕获并存储对该表的所有事务处理更改。
3. Oracle Total Recall的工作流程

默认情况下,闪回归档对任何表都处于关闭状态。
- 启用闪回归档:首先,需要为数据库表启用闪回归档。这可以通过ALTER TABLE语句指定FLASHBACK ARCHIVE子句来完成。启用后,该表的所有后续更改都会被自动捕获并存储在指定的闪回数据归档中。
- 捕获数据更改:当表中的数据发生变化时,Oracle Total Recall会利用undo日志捕获这些更改。捕获的更改包括插入、更新和删除操作。
- 存储历史记录:捕获的数据更改会被存储在启用了闪回归档的表的历史表空间中。这些更改以事务为单位进行存储,并保留了更改的时间戳和SCN(System Change Number)信息。
- 闪回查询:用户可以通过闪回查询来检索数据库表在过去某个时间点的状态。这可以通过SELECT语句的AS OF TIMESTAMP子句或VERSIONS BETWEEN TIMESTAMP AND TIMESTAMP子句来完成。查询结果将显示指定时间点或时间段内的数据状态。
4. Oracle Total Recall 的使用场合:
1. Oracle Total Recall 常用于以下场合:
• 审计支持:查找自去年以来重复的保险索赔。
• 合规性支持:监视平静期的股票交易情况。
• 信息生命周期管理 (ILM - Information Lifecycle Management):确保能对病人病历的连续跟踪访问。
• 执行保留策略:自动清除五年以前的记录。
• 历史报告:检索客户的信用及付款历史记录。
• 错误恢复:还原被错误地删除或更新的记录。
2. racle Total Recall 设置:
- 默认情况下,系统没有闪回数据归档。可以使用以下两种方式之一设置默认的数据归档:
-- create the Flashback Data Archive
CREATE FLASHBACK ARCHIVE DEFAULT fla1
TABLESPACE tbs1 QUOTA 10G RETENTION 5 YEAR;
-- Specify the default Flashback Data Archive
ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT;
- 数据表启用闪回数据归档。如果自动还原管理处于禁用状态,则在修改表时会出现ORA-55614 错误。
-- Enable/Disable Flashback Data Archive(使用默认归档)
ALTER TABLE inventory FLASHBACK ARCHIVE;
ALTER TABLE inventory NO FLASHBACK ARCHIVE;
- 使用闪回查询访问已归档的历史数据
SELECT product_number, product_name, count FROM inventory
AS OF TIMESTAMP TO_TIMESTAMP ('2007-01-01 00:00:00','YYYYMM-DD HH24:MI:SS');
- 增加归档的空间:
ALTER FLASHBACK ARCHIVE fla1 ADD TABLESPACE tbs3 QUOTA 5G;
- 更改保留时间:
ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR;
- 清除数据:
ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' day);
- 删除闪回数据归档(直接删除闪回数据归档的全部表空间会引发错误)
DROP FLASHBACK ARCHIVE fla1;
5. 调整Oracle Total Recall
使用 DBMS_FLASHBACK_ARCHIVE 程序包中的取消关联或关联过程,可执行不被自动支持的所有 DDL 更改。
• 可以使用 DISASSOCIATE_FBA 和 REASSOCIATE_FBA 过程从闪回数据归档取消关联和重新关联给定的表。
• 取消关联是对指定的表禁用数据归档,以执行更复杂的 DDL 操作(如:升级、拆分表,等等)。
• 重新关联时将执行方案完整性检查,验证基表和历史记录表必须在相同的Schema 中。
注:应谨慎使用此项功能,因为在取消关联期间,历史记录也可能会更改。

在启用了闪回数据归档的表中使用某些 DDL 语句会导致 ORA-55610 错误。例如:
–ALTER TABLE 语句,其中包含 UPGRADE TABLE 子句;
–ALTER TABLE 语句,用于移动或交换分区或子分区操作;
–DROP TABLE 语句;
• 如果基表使用 Hybrid Columnar 压缩,则对基表不能启用 Total Recall。
• 如果使用取消关联,则不能保证历史记录的固定不变(但可以清除之前的历史记录)。
• 历史记录表没有可移植性。
6. 使用Oracle Total Recall的准则
•使用 SCN 进行精确时间查询。如果使用时间戳,查询的实际时间可能会比指定的时间提前 3 秒钟。Oracle DB 在内部使用 SCN,并以 3 秒钟的粒度级别将它们映射到时间戳。
• 获取 SCN:可以使用函数DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER
• 获取时间戳:可将 SYSTIMESTAMP 函数的值加上或减去一个 INTERVAL 值。
• 所有闪回处理过程都使用当前会话设置(如国家/地区语言和字符集),而不是在所查询的时间有效的设置。
• 在查询过去的数据之前,先执行 COMMIT 或 ROLLBACK 操作,确保数据库的一致性。
• 不能从动态性能(V$) 视图检索过去的数据,此类视图只返回当前的数据。
• 但是,可以在静态数据字典视图(如*_TABLES)中执行对过去数据的查询。
7. 查看闪回数据归档

本篇完结
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,后续不定期分享DB核心知识和排障案例及经验、性能调优等。
相关文章:
图文深入理解Oracle Total Recall
List item 题记:本文图文深入理解Oracle Total Recall技术。 1. Oracle Total Recall 概述 Oracle Total Recall(也称为 Flashback Data Archive - 闪回数据归档)提供了一种用于跟踪数据库更改的机制,可自动跟踪数据库历史更改…...
腾讯云控制台URL刷新URL预热 使用接口刷新
如图所示的俩个控制台功能,调用腾讯云的接口执行这俩个动作 (代码可以优化)nodejs框架是express, 这里粘贴调用成功的代码示例,做个记录。 app.get(/PurgeUrlsCache, async function (req, res, next) {// Depends on tencentclo…...
构建后端为etcd的CoreDNS的容器集群(二)、下载最新的etcd容器镜像
在尝试获取etcd的容器的最新版本镜像时,使用latest作为tag取到的并非最新版本,本文尝试用实际最新版本的版本号进行pull,从而取到想的最新版etcd容器镜像。 一、用latest作为tag尝试下载最新etcd的镜像 1、下载镜像 [rootlocalhost opt]# …...
libaom-all-intra参数说明
part_sf.less_rectangular_check_level 1; 这个设置可能控制编码器在分割画面时使用非矩形分区的检查级别。part_sf.ml_prune_partition 1; 这个设置可能用于基于机器学习(ML)的分区修剪,以减少不必要的计算。part_sf.prune_ext_partition_…...
应用假死?
有个客户10月18日应用接口都访问慢,nginx层面error显示连接拒绝,当时实施同学重启了java应用运行正常,但今天又卡死了,后台登录也登录不上去,看日志没异常,最终找到了数据库层面。 查看数据库相关日志&…...
SAP MM+FI - 物料管理模块与财务会计模块的集成配置
01 采购费用过账配置表 为了方便项目实施过程中采购费用过账配置,迪森资深专家根据丰富经验总结得出采购费用过账配置表,以供大家参考: 02 材料采购订单入库及结算 2.1采购订单入库 假设:入库数量1000PC,价格 10 元…...
初阶数据结构【3】--单链表(比顺序表还好的一种数据结构!!!)
本章概述 前情回顾单链表实现单链表彩蛋时刻!!! 前情回顾 咱们在上一章博客点击:《顺序表》的末尾,提出了一个问题,讲出了顺序表的缺点——有点浪费空间。所以,为了解决这个问题,我…...
mysql迁移到达梦的修改点
字段是达梦关键字的,达梦会给转成大写,如果不要转则需要使用双引号引起来。关键字参考:D:\dmdbms\doc\DM8_SQL语言使用手册.pdf 例如:RowCount Level Content Password Locked 中文乱码问题,需要在应用程序所在服务器的…...
Go小技巧易错点100例(十八)
正文: 使用下划线增加数字可读性 有时候我们代码里会定义很长的数字,虽然计算机程序能支持很大的数据的计算,但是对我们来说,可读性是一个需要考虑的点,特别是1后面全是0的时候。 但是这个问题在Go语言中是可以通过…...
【python】极简教程8-字符串
第八章:字符串 8.1 字符串即序列 字符串是一系列字符的有序集合,可以使用索引访问字符串中的各个字符,索引从 0 开始。 示例代码: fruit = banana letter = fruit[1] print(letter) # 输出: a8.2 len 函数 len 函数返回字符串的长度(字符数)。...
UEFI EDK2框架学习 (四)——UEFI图形化
一、修改protocol.c #include <Uefi.h> #include <Library/UefiLib.h> #include <Library/UefiBootServicesTableLib.h> #include <stdio.h>EFI_STATUS EFIAPI UefiMain(IN EFI_HANDLE ImageHandle,IN EFI_SYSTEM_TABLE *SystemTable ) {EFI_STATUS S…...
【C++】— 一篇文章让你认识STL
文章目录 🌵1.什么是STL?🌵2.STL的版本🌵3.STL的六大组件🌵4.STL的重要性🌵5. 如何学习STL🌵6. 学习STL的三种境界 🌵1.什么是STL? STL是Standard Template Library的简称…...
mysql--索引
目录 1、长什么样 2、硬件理解 3、软件理解 4、进一步认识 5、索引的理解 6、为什么不选择其他数据结果? 7、聚簇索引和非聚簇索引 8、索引操作 (1)主键索引创建 第一种方式 第二种方式 第三种方式 主键索引的特点 (…...
【linux】线程 (三)
13. 常见锁概念 (一)了解死锁 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程占有的,且不释放的资源,而处于的一种永久等待状态 (二)死锁四个必要条件 互斥条件…...
c++日常积累
在 C 中,可以直接将 int 类型的值赋值给 bool 类型。C 会自动进行类型转换,任何非零的 int 值都会被转换为 true,而 0 会被转换为 false。 QDialog 有一个 finished(int) 信号,该信号在对话框关闭时发出,并传递一个整…...
字节流写入文件
一、创建输出流对象表示的文件三种方式 方法一: FileOutputStream fos new FileOutputStream("fos.txt",true);//最简便方法二: FileOutputStream fos new FileOutputStream(new File("fos.txt"));方法三; File f ne…...
Torch模型导入
冻结param的3种方式 for param in net.lstm.parameters():param.requires_grad Truenet.lstm.requires_grad True # 无效net.lstm.state_dict()[weight_ih_l0].requires_gradFalsenet.lstm.weight_ih_l0.requires_grad False# dir(net.lstm) to validate attributes …...
博弈论:博弈类型空间集合;三层博弈拓展式;
目录 博弈论:博弈类型空间集合 θ(Dss-1=1 )就是博弈类型空间集合; 一、博弈的基本要素 二、博弈的主要类型 三、博弈类型空间集合的构建 三层博弈拓展式: 博弈论:博弈类型空间集合 这的博弈类型空间集合:指一方选择的策略,用符号进行表达:SDss-2(θDss-1=1) = …...
数据库表的关联、集合操作
数据库表的关联、集合操作 join、MySQL、Oracle什么left right的老是忘,归根到底还是不熟练,记录下来,以后就不用再搜了。 设表A、表B分别包含员工信息和部门信息。 表A包含员工的ID、姓名和部门ID, 表B包含部门ID和部门名称。 …...
word怎么清除格式,Word一键清除所有格式教程
你是否曾在编辑Word文档时遇到过复制内容时格式混乱的情况?别担心,这只需要清除一下格式就可以了,很多朋友还不知道word怎么清除格式,下面小编就来给大家讲一讲word一键清除所有格式的方法教程,操作非常简单,有需要的…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
