oracle如何保证事务的ACID原则--oracle核心技术读书笔记二
2014-09-21 11:15
405 查看
在事务中有四个通用的原则是所有数据库都必须遵守的,简称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在下次启动的时候会自动读取重做日志文件,将没有持久化到磁盘的修改,再做一遍,将修改持久化到数据库,从而保证提交的事务,数据的修改是永远的。
一. 原子性(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在下次启动的时候会自动读取重做日志文件,将没有持久化到磁盘的修改,再做一遍,将修改持久化到数据库,从而保证提交的事务,数据的修改是永远的。
相关文章推荐
- 什么是ACID特性,数据库如何保证ACID特性的? 事务的传播特性与隔离级别?
- 什么是ACID特性,数据库如何保证ACID特性的
- 如何保证数据库读写事务
- 数据库系统中事务的ACID原则
- oracle如何保证读一致性 第一弹
- 在Android如何在保证满足面向对象的单一原则(SRP)和开闭原则(OCP)的条件下,完成线程池的使用
- oracle 的一个事务中调用 sequence 对象 的函数,则该函数不参与该事务,即oracle不保证该函数的串行化
- 数据库的事务处理必须满足ACID原则,ACID分别是指什么
- oracle全攻略——ACID事务
- oracle 事务处理要遵循的一些原则建议
- 保证事务ACID性质中的持久性
- 数据库系统中事务的ACID原则
- oracle中的sys用户(修改密码)/////Oracle删除表空间的同时删除数据文件 ///// Oracle中如何保证用户只有一个session登录
- oracle 根据事务号 xid 如何找到对应的那个语句
- Oracle事务的ACID特性
- Oracle 中如何手工提交Cluster Table的事务
- 数据库同步程序如何保证事务装载高效又完整
- Oracle事务的ACID特性
- 来,复习一哈Oracle事务的ACID特性
- Spring事务之如何保证同一个Connection对象