数据库管理-第171期 Oracle是用这种方式确保读一致的(20240418)

数据库管理171期 2024-04-18

  • 数据库管理-第171期 Oracle是用这种方式确保读一致的(20240418)
    • 1 基本概念
    • 2 用处
    • 3 注意事项
    • 总结

数据库管理-第171期 Oracle是用这种方式确保读一致的(20240418)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
国内某科技公司 DBA总监
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家,OCM讲师
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭。

突然发现,正儿八经的继续写系列的上一篇文章已经是8天前了,罪过罪过啊,今天趁着在机场等飞机的时间,写一篇与Oracle相关很基础的技术文章,回头再写写UNDO。

1 基本概念

Oracle数据库创建并管理用于回滚或UNDO对数据库的更改的信息。此类信息包括事务行为的记录,主要是在事务被提交之前。这些记录统称为UNDO。
REDO与UNDO:

  • REDO LOG记录的是事务的前滚信息(即对数据的操作记录),记录在Online Redo Log中,并根据数据库配置转储至归档指定目录的归档日志之中。
  • UNDO则记录与REDO相反的操作信息,这些信息被记录在数据库配置的实例对应的UNDO表空间之中。

REDO和UNDO可以比作为双胞胎,产生REDO的同时会记录UNDO数据。

2 用处

Oracle数据库使用UNDO数据来回滚事务、提供读一致性、用于数据恢复并提供类似于闪回查询的功能。
这里以一个UPDATE操作为例:
A表信息:

create table A (id number primary key,name number);
insert into A values (1,1);
commit;

image.png
这里提交一个UPDATE操作单不提交:

update A set name=name+1 where id=1;
select * from A;

image.png
这时候在内存中,涉及ID为1的这一行数据会被变更,同时产生REDO信息,用于在commit时将数据写入磁盘。同时也会产生UNDO信息,当这个事务还没有commit时,其他会话需要读相同数据时,通过与当前内存中数据与UNDO组合得到事务之前的数据:
image.png
当然如果事务回滚,也是使用UNDO数据来回退内存中的数据。但现在如果还有会话需要操作ID为1的这行数据呢:
image.png
这时候就会因为前一个事务的行锁,导致语句处于挂起的状态,在这种情况下,这个事务是不会产生任何REDO和UNDO信息,直至前一个事务提交或回滚。而如果两个会话提交,而需要通过闪回查询的方式查询第一个事务之前的数据,Oracle数据库就会通过当前内存中的对应数据信息加上两份UNDO信息组合出需要的数据。

3 注意事项

Oracle数据库自动确保活动事务正在使用的撤消数据在提交该事务之前永远不会被覆盖。数据库服务器维护并自动调整UNDO保留期,以确保Oracle Flashback功能的成功,并确保长时间运行的查询的读取一致性。创建数据库时,将启用UNDO保留期的自动调整。

  • UNDO_TABLESPACE
    对于Oracle数据库一个实例有且仅有一个UNDO表空间生效,从12.2开始配置local undo的情况下,每个PDB在每个实例上也有一个对应的UNDO表空间。
ALTER SYSTEM SET UNDO_TABLESPACE='UNDOTBS1' SID='DBAAS1';
  • UNDO_RETENTION
    配置数据库的UNDO保留时长,以秒为单位,这里需要注意,如果UNDO表空间容量不足且对应事务已完成,那么未达到配置保留时长的情况下,UNDO信息依然可能被清理;反之,如果UNDO表空间空间较大,超过UNDO保留时间的UNDO数据仍可能可使用。
ALTER SYSTEM SET UNDO_RETENTION=xxx;
  • UNDO GUARANTEE
    Oracle提供确保UNDO信息保留至设置保留时间的配置方式,但是需要注意,这一配置可能造成UNDO表空间容量不可控,且可能导致多DML操作失败,所以一般不做该项配置。
ALTER TABLESPACE UNDOTBS1 RETENTION GUARANTEE;

关于其他相关配置就建议按照默认即可,无需修改。

总结

本期讲解了UNDO是如何确保Oracle的读一致,同时整理了一下UNDO相关注意事项。
老规矩,知道写了些啥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/556752.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker文档阅读笔记-How to Run GUI Based Applications inside Docker?

以后的文档阅读笔记不在一一介绍。以后只总结干货和重点。 Step 1 使用Systemctl命令启动docker服务: systemctl start docker // to start the docker service. systemctl status docker // to check the status . systemctl restart docke…

mybatis创建入门流程体验

mysql数据库中建表 drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30) );INSERT INTO tb_user VALUES (1, zhangsan, 123, 男, 北京); INSERT INTO tb_user …

四川易点慧电子商务抖音小店:安全先行,购物无忧

随着互联网的飞速发展,电子商务已成为人们日常购物的重要渠道。抖音小店作为新兴的电商平台,凭借其独特的社交属性和庞大的用户基础,迅速崛起并吸引了众多商家的入驻。在这个背景下,四川易点慧电子商务有限公司(以下简…

Android11应用安装未知来源的权限改动

最近开发的App需要下载安装另一个App。这就涉及到了app的安装代码。关于App的安装代码,写了不少,所以这一块觉得不是问题: 判断版本,Android8.0判断是否有未知来源安装全选,没有则打开未知来源安装权限设置界面去开启…

Linux并发程序设计(1):进程的创建和回收

目录 1、基本概念概念 1.1 程序 1.2 进程 1.3 进程的内容 1.4 进程类型 1.5 进程状态 2、常用命令 2.1 查看进程信息 2.2 改变进程优先级 2.2.1 按用户指定的优先级运行进程 2.2.2 改变正在运行进程的优先级 2.3 其他相关指令 3、进程的创建和结束 3.1 子进程创建 3.1.1 …

Odoo讨论+聊天模块:一体化内部协作平台,赋能高效沟通与业务流程协作

Odoo讨论聊天模块:一体化内部协作平台,赋能高效沟通与业务流程协作 Odoo 讨论模块是一个集成了即时通讯、文件共享、业务关联、权限控制等功能于一体的内部协作工具,允许用户通过跨模块的聊天窗口或通过专用的“讨论”面板互相发送消息、分享…

Golang(一):基础、数组、map、struct

目录 hello world 变量 常量,iota 函数 init函数和导包过程 指针 defer 数组和动态数组 固定长度数组 遍历数组 动态数组 len 和 cap 截取 切片的追加 map 四种声明方式 遍历map 删除 查看键是否存在 结构体 声明 作为形参 方法 封装 继承…

笔记软件功能多样的是哪款?做笔记的软件哪个好用

在快节奏的现代生活中,笔记软件已成为我们提高工作效率、记录生活点滴的重要工具。想象一下,在繁忙的工作中,你能够快速记录下关键信息,或在灵感迸发时及时捕捉,这是多么方便高效。 一款功能多样的笔记软件&#xff0…

Syncovery for Mac:高效文件备份和同步工具

Syncovery for Mac是一款专为Mac用户设计的文件备份和同步工具,凭借其高效、安全和易用的特点,深受用户好评。 Syncovery for Mac v10.14.2激活版下载 该软件具备强大的备份功能,支持多种备份方案和数据格式,用户可以根据需求轻松…

Python教学入门:函数

在 Python 中,def 关键字用于定义函数。函数是一段可重用的代码块,用于执行特定的任务或操作。通过定义函数,可以将一段代码封装起来,使其可以在程序中被多次调用,提高代码的复用性和可维护性。 下面是 def 函数定义的…

pandas/python 一个实战小案例

上次写坦克游戏的时候,接触了一点pandas,当时只是简单了解了一下如何遍历行和列并获取值来替换图片,想更多了解pandas。正好有一些数据需要筛选,试试能不能用通过代码实现。虽然总的来说不复杂,但由于原始数据在命名、…

如何训练猫出门不害怕:耐心做好这些训练,轻松get能溜的小猫

一般我们外出见到的都是遛狗的,溜猫的相对少见,一方面是因为猫咪是喜欢安静独处的小动物,另一方面是糟乱的环境也容易引起猫咪的应激。对于是否应该“溜猫”,有两个极端的阵营。一些铲屎官认为应尊重猫的天性,胆小不爱…

如何使用AI写作扩写文章?看完这篇学会扩写

如何使用AI写作扩写文章?在数字化时代的浪潮下,人工智能(AI)已经深入渗透到我们生活的各个领域,其中,AI写作扩写技术更是以其高效、便捷的特点受到了广大用户的青睐。它不仅极大提升了写作效率,…

Leetcode算法训练日记 | day29

一、递增子序列 1.题目 Leetcode:第 491 题 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等&…

硬件?、嘉立创EDA画PCB规则设计

1、打开规则设计 设置单位为mil 点击全部 将安全距离设置为8mil,这个8mil是目前很多生产PCB的工厂可以做的,如果距离设置的更小也就是性能要求更高,相应的生产成本也高元件到元件的距离设置为20mil 2、设置导线的宽度规则,可以对v…

第G6周:CycleGAN实践

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、CycleGAN原理 (一)CycleGAN的原理结构: CycleGAN(循环生成对抗网络)是一种生成对抗网络&…

思维导图软件Xmind for Mac 中文激活版 支持M

XMind是一款非常受欢迎的思维导图软件,它应用了Eclipse RCP软件架构,注重易用性、高效性和稳定性,致力于帮助用户提高生产率。 Xmind for Mac 中文激活版下载 XMind的程序主体由一组插件构成,包括一个核心主程序插件、一组Eclipse…

文件后缀变成.halo? 如何恢复重要数据

.halo 勒索病毒是什么? .halo勒索病毒是一种恶意软件,属于勒索软件(Ransomware)的一种。这种病毒会加密用户计算机上的文件,并要求受害者支付赎金才能获取解密密钥,从而恢复被加密的文件。勒索软件通常会通…

力扣(leetcode) 42. 接雨水 (带你逐步思考)

力扣(leetcode) 42. 接雨水 (带你逐步思考) 链接:https://leetcode.cn/problems/trapping-rain-water/ 难度:hard 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多…

【方便 | 重要】#LLM入门 | Agent | langchain | RAG # 3.7_代理Agent,使用langchain自带agent完成任务

大型语言模型(LLMs)虽强大,但在逻辑推理、计算和外部信息检索方面能力有限,不如基础计算机程序。例如,LLMs处理简单计算或最新事件查询时可能不准确,因为它们仅基于预训练数据。LangChain框架通过“代理”(…