在事务中有四个通用的原则是所有数据库都必须遵守的,简称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在下次启动的时候会自动读取重做日志文件,将没有持久化到磁盘的修改,再做一遍,将修改持久化到数据库,从而保证提交的事务,数据的修改是永远的。
相关推荐
Oracle Database 21c 是最新的版本; 21.3 - 企业版(也包括标准版 2) 适用于Linux x86-64位系统。oracle-database-ee-21c-1.0-1.ol8文件分割成 三个 压缩包,必须集齐 三个 文件后才能一起解压一起使用: Oracle ...
linux连接oracle工具,适用于x86及arm架构 oracle-instantclient-basic-21.6.0.0.0-1.x86_64.rpm oracle-instantclient-basic-21.6.0.0.0-1.x86_64.zip oracle-instantclient-devel-21.6.0.0.0-1.x86_64.rpm oracle-...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-basiclite-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-...
Oracle Database 19c 是最新的长期版本,支持期限最长; 19.3 - 企业版(也包括标准版 2) 适用于Linux x86-64系统。oracle-database-ee-19c文件分割成 三个 压缩包,必须集齐 三个 文件后才能一起解压一起使用: ...
Oracle Database 21c 是最新的版本; 21.3 - 企业版(也包括标准版 2) 适用于Linux x86-64位系统。oracle-database-ee-21c-1.0-1.ol8文件分割成 三个 压缩包,必须集齐 三个 文件后才能一起解压一起使用: Oracle ...
oracle笔记二--plsql 编程oracle笔记二--plsql 编程oracle笔记二--plsql 编程oracle笔记二--plsql 编程oracle笔记二--plsql 编程oracle笔记二--plsql 编程
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --基础包,为了运行OCI、OCCI、JDBC-OCI 这几个应用程序; oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm --补充包/文件,是为了运行sql*plus...
oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
oracle-xe-11.2.0-1.0.x86_64.rpm
在Linux上安装oracle数据库,在环境准备方面,例如该安装的RPM包,该调整的内核参数等,不仅较为复杂,有些参数值还会因为人工设置的不合理而对日后的运行带来一定的影响,也是整个安装过程中最耗时的部分。...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --基础包,为了运行OCI、OCCI、JDBC-OCI 这几个应用程序; oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm --补充包/文件,是为了运行sql*plus...
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm --基础包,为了运行OCI、OCCI、JDBC-OCI 这几个应用程序; oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm --补充包/文件,是为了运行sql*plus...
linux服务器上 oracle instantclient 客户端。Oracle Instant client 是oracle提供的简便客户端, 支持多种平台。 内容包含 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-...
linux环境中的oracle客户端远程安装包 oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64....
Oracle-11g-OCP-051培训笔记Oracle-11g-OCP-051培训笔记Oracle-11g-OCP-051培训笔记Oracle-11g-OCP-051培训笔记Oracle-11g-OCP-051培训笔记