Oracle事務簡述

news2024/11/14 18:35:43

簡述

本文主要介紹內容有事務的隔離級別,oracle支持的事務隔離級別,事務的提交與回滾,保存點內容

事務的ACID特征

介紹事務繞不過事務的ACID四個特征,這裡簡單回顧以下

  1. 原子性(Atomicity)

事務的執行要麼全部成功要麼全部失敗

  1. 一致性(Constiency)

事務的執行最終結果必須與預期結果完全一致

  1. 隔離性(isolation)

事務提交之前,其他用戶無法獲得該事務的修改的內容

  1. 持久性(durability)

事務執行結果需要持久化保存

事務隔離級別

oracle数据库僅支持READ COMMITTED , SERIALIZABLE和只讀模式这三种事务隔离级别。

  1. read uncommitted:脏读,一个事务可以读到另外一个事务未提交的数据,大多数关系型数据库不支持。

  1. read committed:提交读,一个事务可以读到其他事务已经提交的数据,大多数数据库的缺省模式。

  1. repeatable read:一个事务执行过程中访问的数据是一致的,也就是一个事务中多次读到的数据不会变化。

  1. serializable:序列化,事务串行化执行,避免不一致。代价很大,OLTP系统中很少使用。

Oracle的Undo機制

oracle的undo機制非常重要,undo機制是實現事務的隔離,回滾的保證。

undo機制的原理

事務每次操作數據,在提交前,數據被放到undo段裡面,新的數據放入數據段裡面,事務提交前,其他事務讀取undo段的內容,這樣就可以做到事務的隔離,並且事務執行失敗,需要回滾的時候,可以直接從undo段回滾,這樣就可以實現事務的回滾。

作用如下:

  1. 回退事务

事務回退以undo段數據為依據

  1. 读一致性

事務提交之前,其他事務無法直接讀取被修改後數據段,而是讀取被移動到undo段的數據,依靠此可以實現數據讀取的一致性,即事務隔離級別 讀已提交

  1. 事务恢复

當發生服務器斷電的時候等重啟會依靠undo

4.闪回查询(FlashBack Query)

閃回查詢可以回復指定時間點的數據

--獲取數據快照       時間太靠前,超過表數據的時間會報  [1]: ORA-08180: no snapshot found based on specified time 的錯誤

SELECT * FROM   emp_lin   AS OF TIMESTAMP 
TO_TIMESTAMP('2023-02-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss');

--1、启动表的row movement特性
ALTER TABLE emp_lin    ENABLE ROW MOVEMENT;

--2、闪回指定时间的快照
flashback   table     emp_lin   to TIMESTAMP 
TO_TIMESTAMP('2023-02-01 20:00:00', 'yyyy-mm-dd hh24:mi:ss');

--3、关闭表的row movement功能
ALTER TABLE emp_lin DISABLE ROW MOVEMENT;

MVCC機制

MVCC又稱為多版本機制,是數據庫在解決並發和安全性的一個平衡的策略。實現主要依靠undo機制,通過比較數據的版本號,判斷是否被修改,是否需要讀取undo段數據。

比較好的介紹

如上图所示,Oracle的多版本并发控制是块级(BLOCK LEVEL)的,基于 Oracle UNDO/回滚段机制。在回滚段中保存了某个数据被修改之前的前映像的数据。在每条记录的记录头(kdrh)中,kdrhlock指向前一次修改该数据的事务槽(ITL)的位置,kdrhccnt指出了这个事务中在本块受影响的行的数量。在ITL中记录了该次修改的SCN信息,以及回滚段的地址信息。
当某个事务开始的时候,会在回滚段的段头TRNTBL中分配一个事务表记录,同时分配第一个UNDO记录,记下事务的一些信息。当事务修改某个数据的时候,在该数据的DATA BLOCK的ITL表中分配一个ITL记录,并锁定这个ITL记录,然后将数据行头中的kdrhlock指向这个ITL槽,然后再对数据进行修改。并把修改前的数据存储在回滚段的UNDO RECORD中。
如果有事务要读取相关的数据,首先对数据库的DBCACHE缓冲区进行搜索。在Oracle的DB CACHE中,同一个数据块可能存在多个版本,这些版本被称为CR BLOCKS。如果在DB CACHE中已经找到了符合条件的CRBLOCK(根据SCN来判断CR BLOCK是否符合查询条件),就可以直接使用,如果没有找到可用的CR BLOCK,那么就需要通过该数据块的当前版本(CURRENTBLOCK)来生成所需要的CRBLOCK。
在生成CR BLOCK的时候,可以根据该行数据的kdrhlock找到相关的ITL槽,通过比对SCN来判断要读取的数据是数据块中的数据还是修改前的数据。如果发现当前ITL槽中的SCN高于本事务所需要读取的SCN,那么就会通过ITL槽找到该数据在UNDO中的前映像数据(PRE-IMAGE),通过前映像数据和当前数据生成一个一致性读块(CR BLOCK),然后通过访问这个CRBLOCK来找到所需要读的数据。实际环境中可能更为复杂,因为ITL槽可能会被覆盖,在这种情况下,Oracle会把ITL信息写入UNDO RECORD中,形成一个链状结构,可以一层层的找到所需要的UNDO RECORD,从而完成这种操作。
Oracle的多版本并发控制机制使用了一个独立的UNDO 表空间来存储UNDO数据,数据的前映像通过在DB BUFFER中的CR BLOCK来实现,因此数据无论修改多少次,都不会对存储数据的数据段产生负面的影响。而且一个CR BLOCK生成后,可以在缓冲区中较长时间内存在,供相关的事务使用。这个功能对于大并发的读操作来说,是十分有用的,可以大大提高相关操作的性能。
由于Oracle UNDO的空间容量有限,因此不可能永久保存回滚段的数据,Oracle采用了UNDO RETENTION的机制来保护UNDO数据,可以设定一定的UNDO数据保存周期,当UNDO数据在保护期内,可以保证UNDO记录不被覆盖。这种机制很好的解决了UNDO数据生命周期管理的问题,同时确保了在一个大型查询中确保所需的PRE-IMAGE不会被覆盖失效。

回滾與保存點

事務回滾可以直接回滾到上一次的commit或者上一個保存點(注意:提交之後,將導致保存點丟失)。

begin
        savepoint b;
   --update emp_lin set ename='Smith' where empno=7369;
     update emp_lin set ename='jojo' where empno=7369;
  
 end;
 rollback to  b;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广义霍夫变换和模板匹配的不同

简述说到霍夫变换,做图像的知道经典霍夫变换最常用于检测规则曲线,如直线、圆、椭圆等。而广义霍夫变换是为了检出那些无法写出解析式的不规则形状,虽然在深度学习大行其道的时代,霍夫变换也还是有很多应用场景,另外广…

2023年黑马Java入门到精通教程--面向对象

推荐教程:java零基础入门到精通 面向对象编程的例子 设计类,创建对象并使用 1. 类和对象是什么? 类:是共同特征的描述(设计图);对象:是真实存在的具体实例。 2. 如何设计类? 3. 如何创建对象…

CISP-PTE-Windows2003教程

为方便后续操作,建议和kali在同一网段。 获取到靶机IP后,扫描端口,1433是sqlserver的 测出用户名admin,但是密码爆破失败 扫描目录发现配置文件 配置文件中找到数据库的用户名和密码 使用Microsoft SQL Server Studio连接&#x…

MySQL从入门到精通(第0篇):全程有动画演示,适合入门学习

B站地址 文章目录一、MySQL的系统框架1. 连接池1.1 连接模块1.2 连接池2. SQL接口、SQL解析器、SQL优化器3. 存储引擎二、MySQL数据写入原理三、MySQL存储结构1. 使用InnoDB创建表2. 详述ibd文件中的存储结构2.1 页的数据连续存储2.2 行的结构2.3 区的结构2.4 组的结构2.5 段的…

剑指 Offer 33. 二叉搜索树的后序遍历序列

题目 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&#xff0c;否则返回 false。假设输入的数组的任意两个数字都互不相同。 思路 二叉搜索树的特点是&#xff1a;左子树的值 < 根节点 < 右子树的值后序遍历的顺序是…

【逐步剖C】第三章-数组

一、一维数组 1. 一维数组的定义与使用 &#xff08;1&#xff09;数组的简单概念&#xff1a;一组具有相同类型的元素的集合 &#xff08;2&#xff09;数组的创建&#xff1a; 格式&#xff1a;类型名数组名[数组大小] 需要注意的是&#xff1a;对多数情况而言&#xff0c;…

# Vue中的Mixin混入

Vue中的Mixin混入 将组件的公共逻辑或者配置提取出来&#xff0c;哪个组件需要用到时&#xff0c;直接将提取的这部分混入到组件内部即可。这样既可以减少代码冗余度&#xff0c;也可以让后期维护起来更加容易。 1. 什么是Mixin&#xff1f; 混入 (mixin) 混入 (mixin) 将组…

数据库分类

关系型与非关系型 关系数据库 MySQL、MariaDB&#xff08;MySQL的代替品&#xff09;、 Percona Server&#xff08;MySQL的代替品&#xff09;、PostgreSQL、 Microsoft Access、Google Fusion Tables、SQLite、DB2、FileMaker、Oracle、SQL Server、INFORMIX、Sybase、dBASE…

阿里云中间件2024届校园招聘

【团队介绍】 阿里云云原生中间件团队负责分布式软件基础设施&#xff0c;为阿里云上万家企业提供如微服务引擎、服务网格、消息服务、分布式事务等分布式基础服务&#xff0c;加速企业上云的进程和创新速度。同时&#xff0c;云原生中间件团队也服务着阿里集团众多核心业务和…

智能指针(三)—— shared_ptr 循环引用问题

shared_ptr 作为智能指针&#xff0c;可以满足大多数场景&#xff0c;对于一些特殊情况&#xff0c;可能会引发循环引用问题。 目录 1、循环引用案例分析 (1) 案例介绍 (2) 原因分析 2、weak_ptr 解决循环引用 1、循环引用案例分析 (1) 案例介绍 我们通过实际案例来了解…

网络编程 1 相关基础概念 及 请求、响应类 定义

目录 一、HTTP基本概念 1、HTTP是什么 2、HTTP客户端是什么 3、HTTP消息结构 4、服务器响应信息 二、相关概念 1、网址 URL 2、IP地址 3、域名 4、域名与IP关系 5、域名解析 6、DNS 三、设计请求、响应类基本数据结构 1、请求类定义 2、响应类定义 一、HTTP基本概…

AD引脚交换

19年写过一篇AD交换引脚的文章&#xff0c;原文请查阅AD18调PIN方法及注意事项&#xff0c;该方法是手动更改焊盘的网络&#xff0c;如果是对于少量的或者零散的引脚交换还好&#xff0c;但遇到像FPGA、CPLD或者端子这种大量引脚需要调PIN的情况还是一个一个手动更改就很费时了…

java 微服务 RabbitMQ高级 消息可靠性问题 死信交换机 延迟队列 惰性队列

消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1.消息可靠性问题&#xff08;面试很会问&#xff09; 针对这些问题&#xff0c;RabbitMQ分别给出了解决方案&#xff1a; 生产者确认机制 mq持久化 消费者确认机制 失败重试机制 下面我们就通过案…

基于Android的办公用品管理平台的设计与实现

需求信息&#xff1a; 教师端&#xff1a; &#xff08;1&#xff09;注册登录&#xff1a;教师通过输入自己的工号和密码登录系统&#xff1b; &#xff08;2&#xff09;信息修改&#xff1a;教师可以完善个人信息&#xff08;院系、职务等&#xff09;&#xff1b; &#xf…

DMS感知方案前装赛道「排位」,2025年750万辆市场争夺

对舱内驾驶员、乘客的关怀&#xff0c;正在成为车企新一轮体验升级的关键突破口。在2023年CES展上&#xff0c;类似的产品方案也成为汽车行业的焦点。 比如&#xff0c;一家名为Myant的创新材料技术公司&#xff0c;在今年CES期间推出了一款将传感器和执行器&#xff08;与编织…

深度解刨性能测试工具Locust

An open source load testing tool. 一个开源性能测试工具。 define user behaviour with python code, and swarm your system with millions of simultaneous users. 使用Python代码来定义用户行为。用它可以模拟百万计的并发用户访问你的系统。 如果你常关注我的博客&…

2022尚硅谷SSM框架跟学(十)SSM整合

2022尚硅谷SSM框架跟学 十 SSM整合四、SSM整合4.1ContextLoaderListener(1).创建Maven Module(2).导入依赖(3).配置web.xml(4).创建SpringMVC的配置文件并配置(5).创建Spring的配置文件并配置(6).创建组件(7).创建页面(8).访问测试功能4.2准备工作(1).创建Maven Module(2).导入…

【2023亲测可用】JS 获取电脑本地IP 和 电脑网络IP(外网IP|公网IP)

1、了解&#xff1a;电脑本地的IP地址&#xff08;内网IP&#xff09;和电脑本机在网络上的IP地址&#xff08;外网IP|公网IP&#xff09; 在运行窗口输入“cmd”&#xff0c;在弹出的界面里输入“ipconfig/all”。弹出的数据中&#xff0c;IPv4地址&#xff0c;就是电脑本地的…

使用Hadoop分析气象数据(附代码)

刚学了Hadoop&#xff0c;在网上找完整的分析使用过程进行练手观看。本文数据和方法均来自于大佬的使用Hadoop分析气象数据完整版&#xff08;附带完整代码&#xff09;&#xff08;侵删&#xff09; 文章目录1.获取数据1.1下载数据1.2 数据格式1.3 合并数据2.MapReduce处理数据…

01sklearn-机器学习的几种算法(附代码)

说明: 本篇文章主要写了机器学习的流程及一些常用的算法如: 贝叶斯,朴素贝叶斯,线性回归,决策树,随机森林,逻辑斯蒂回归,模型调优和特征工程等(都是使用python的sklearn库实现) 一、概述 二、 一、特征工程 在看下面的算法之前,我们要先对机器学习流程进行一下熟悉! 主要有…