oracle如何保证事务的ACID原则--oracle核心技术读书笔记二

在事务中有四个通用的原则是所有数据库都必须遵守的,简称ACID原则,下面简单概述一下oracle是怎样实现这四个原则的。

一. 原子性(Atomicity):一个事务要么全部执行,要么全部都不执行

在oracle中,当我们做一次变更的时候,系统会自动创建一条undo记录来描述怎样撤销这次变更。也就是说,当执行到一个事务的中间时,如果有其他用户想访问我们更改过的数据,他必须使用undo记录来查看变更前的旧数据,即只有当我们提交这个事务后,所做的更改才能被他人看到。这样就可以确保,其他用户要么能看到我们所做的更改,要么什么更改都看不到。另外一种情况,如果我们这个事务失败,我们也可以根据undo里面的信息将我们所做的修改回退。保证要么全部成功,要么全部失败。

二.  一致性(Consistency):一个事务的运行并不改变数据库中数据的一致性

假设一个事务需要进行3种更新操作,某一时刻执行成功了2种更新操作。这个时候数据库中的数据不是一致性的状态,因为还有第三种更新操作没有执行。假如这个时候,别人看到了我们执行成功的2种更新操作后的结果,那就破坏了数据的一致性。oracle中由于undo的存在,其他用户无法看到事务的增量应用(也就是执行成功的2种更新操作),也就是无法看到这个不合法的临时状态。他们要么看到老状态,要么看到新状态,没有中间态。

 三.  独立性(Isolation): 一个事务不能看到另一个没有提交的事务的执行结果

从第一点就可以看出,oracle通过undo能保证其他用户看不到我们事务所做的修改,在我们提交之前。其他事务只能从undo里面去寻找以前旧版本的数据,而非我们事务改变了的新数据。

四.  持久性(Durability): 一旦事务成功,数据的修改是永久的 

该原则突出了oracle重做日志的优势。在oracle中,事务一旦提交,oracle就会将重做日志顺序地写入到重做日志文件。而不是去磁盘持久化我们这个事务所做的修改。比如,一个事务修改了100条数据,假设这100条数据是随机在磁盘的不同地方,那一旦事务提交,我们就得花费大量时间去磁盘寻找我们需要修改的数据,并将其修改。oracle没有这样做。oracle只是自己生成一系列重做日志(描述数据的修改),然后顺序写入磁盘的重做日志文件,写入成功即代表着这个事务提交成功,即使修改还没有真正持久化到磁盘。假设这个时候突然断电,磁盘的数据还没有修改为正确的数据,但是事务已经成功了,怎么办呢。oracle在下次启动的时候会自动读取重做日志文件,将没有持久化到磁盘的修改,再做一遍,将修改持久化到数据库,从而保证提交的事务,数据的修改是永远的。

时间: 2024-10-22 01:27:55

oracle如何保证事务的ACID原则--oracle核心技术读书笔记二的相关文章

数据库系统中事务的ACID原则

事务的原子性.一致性.独立性及持久性 事务的原子性是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成. 事务的一致性是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变. 事务的独立性是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致. 事务的持久性是指事务运行成

《你必须知道的.NET》读书笔记二:小OO有大原则

此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Facade模式.Proxy模式 (3)基本方法:Extract Interface 抽取接口.Extract Class 抽取类.Extract Method 抽取方法 (4)DEMO:数据库管理系统中根据不同权限进行CRUD操作(这里是使用Proxy模式重构后的代码)   (5)规则建议: ①一个类只有一个引

Oracle事务原理探究1--oracle核心技术读书笔记五

1. 冲突解决 假如有一个系统只有你和我两个用户,并且我们都在持续对系统中一小部分数据做修改和查询操作. 如果你正在数据库中做一批修改操作,而我正在做查询,我一定不能看到你所做的修改,直到你告诉我可以看到你所做的所有更改才行(你提交了事务).因此在oracle内部,必须有一个高效的办法来识别哪些数据我可以看到,哪些数据我不可以看到. 从相反的角度来看,在你提交事务的时候,你需要一种高效的机制让其他所有人能够看到事务已经提交(也就是要告诉别人你所有修改过的数据都是可见的了).更极端一点的情况是,你

Oracle redo 复杂度--oracle核心技术读书笔记三

一. 概述 我们知道,在oracle中,每修改一条数据都会生成一条重做数据(也就是redo,里面记录了修改后的内容).目的就是为了将修改的数据备份,方便今后重做.现在有一个问题.oracle中只要修改数据,都会生成redo,这些redo会存放在一个叫做重做日志缓冲区里面.如果同时多个回话在修改数据,都要往重做日志缓冲区写入内容,就存在为同一片内存区域竞争的问题.存在竞争,就存在开销,这篇文章大概介绍一下,oracle如何尽量降低这种开销. 二.  问题概述 oracle中不断地修改数据,源源不断

Oracle基本数据改变原理浅析(redo与undo)--oracle核心技术读书笔记一

在oracle中我们做一些更新操作,oracle底层是怎么流转的呢,就是这篇文章要讲解的. 一. 原理 假设我们在一个已经更新了很多条分散记录的OLTP系统中,更新了一行数据.那么这个更新的真实步骤如下: 1. 创建一个重做改变向量,描述如何往undo块插入一条undo记录(也就是描述undo块的改变) 2. 创建一个重做改变向量,描述数据块的改变(也就是数据的改变) 3. 合并这两个重做改变向量为一条日志记录,并写到重做日志缓冲区(便于今后重做) 4. 向undo块插入undo记录(便于今后回

oracle undo 复杂度--oracle核心技术读书笔记四

一. 概述 undo 保存的是旧数据.比方.你改动了一条记录将A列abc改动为def.那么undo里面保存的就是abc.目的有两个:1. 假设你的事务没有提交.可是已经将A列改动,那么别人读取这条数据的时候,不应该可以看到你改动后的内容def,应该还仅仅能看到abc,这个时候就须要去读取undo,才干取到abc. 2. 假设你的事务后来失败,须要将A列由改动过的值def回退到之前的值abc.abc也要从undo里面去取. 这篇文章.简要介绍一下读一致性(也就是别人无法读取到你改动的未提交的内容)

Oracle事务的ACID特性

Oracle事务的ACID特性 1.原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的. 例如:A帐户向B帐户划账1000,则先将A减少1000,再将B增加1000,这两个动作要么都提交,要么都回退,不可能发生一个有效.一个无效的情况. 2.一致性(Consistency) 一致性是指数据库在事务操作前和事务处理后,其中的数据必须都满足业务规则约束. 例如:A.B帐户的总金额在转账前和转帐后必须一致,其中的不一致必须是短暂的,在事务提交前才

【Oracle】浅析Oracle中的事务

1. 什么是事务 在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行. 如:网上转帐就是典型的要用事务来处理,用以保证数据的一致性. 2. 事务特性 SQL92标准定义了数据库事务的四个特点: 原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做. 一致性(Consistency):事务开始时,数据库中的数

数据库ACID原则和事务隔离级别

数据库ACID原则 A:原子性,Atomicity C:一致性,Consistency I:隔离性,Isolation D:持久性,Durability 在mysql中的innodb引擎,原子性,一致性,隔离性通过redo和undo实现,redo就是ib_logfile物理文件,而undo默认在共享表空间ibdata里面,通过设置参数可以独立出来. 事务隔离级别 Read Uncommitted(读未提交)    缺点是允许脏读,不允许同时进行写操作,但允许其他事务读没有提交的数据 Read C