图文深入理解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一键清除所有格式的方法教程,操作非常简单,有需要的…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...