数据一致性和事务

Oracle中的数据一致性

当从A表取一条数据添加到B表时,需先删除A表数据,再新增B表数据,

如果第二条操作出异常时,就造成了数据不一致。

Oracle中的事务

事务是保证数据一致性的重要手段,试图改变数据库状态的多个动作应该视作一个密不可分的整体。无论其中经过了多么复杂的操作,该整体执行之前和执行之后,数据库均保证一致性。整个逻辑整体即是一个事务。

Oracle中的事务处理

事务的生命周期包括:事务开始、事务执行和事务结束。Oracle中,不会显式声明事务开始,而是由Oracle自行处理,事务结束可以利用commit或者rollback命令

利用commit命令界定事务

在一个会话中,一次事务的结束便意味着新事务的开始。事务的结束可以用commit命令

Update...;
Update...;
Update...;

利用多次Update命令,任意2个步骤间不存在commit和rollback命令,因此他们处于同一事务中。可以利用commit命令来提交修改

事务是指全部提交或者全部回滚,并不代表所有动作都可成功执行,如果某个动作失败,利用commit仍会提交所有成功的修改。

begin
Update...;
Update...;
Update...;
commit;
end

当使用begin end块时,一旦sql语句出现错误,那么不会对数据库做任何修改。

利用rollback命令界定事务

rollback回滚事务内的所有数据修改,并结束事务。

Update...;
Update...;
Update...;
rollback;

数据仍保持原状

Oracle事务的属性和隔离级别

Read only属性

利用Read only 设置只读事务
set transaction Read only ;

一旦设置事务为只读事务,则不能进行任何数据库修改操作、

只读事务除了自身不能修改数据库之外,还冻结了自身所认识到的数据库状态。也就是说,即使有其他事务修改了数据库状态,只读事务是无法识别的。

rollback回滚事务可以解除只读事务。

只读事务的特性,可以提供一种稳定的状态,从而处理大量的数据查询工作。例如,在生成统计报表时,需要查询大量数据。大数据量的查询耗时较多,又需要屏蔽外界干扰。在处理报表的过程中,可以利用只读事务提供稳定的环境,以使生成的报表更符合实际情况。

Read write 属性

Read write属性可以将事务设置为可读、可写状态。也是事务的默认状态。此状态下,事务可以查询、更新数据库内容。

serializable隔离级别

隔离级别是指当前事务对数据库状态变化的屏蔽程度。具有serializable隔离级别的事务是串行化事务。此事务与只读事务有完全相同的隔离级别,对外界其他事务对数据库的修改没有认知度。

设置隔离界别为serializable
set transaction isolation level serializable

与只读事务不同,串行化事务中是可以对数据库进行修改操作的。

Read commited隔离级别

Read commited隔离级别是事务的默认隔离级别。具有该隔离级别的事务只能识别其他事务已经提交的数据修改。

事务处理原则

原子性

原子性是事务的最基本属性。整个事务所有操作是一个逻辑整体。如同院子一样,不可分割,或者全部执行,或者都不执行。

一致性

事务结束后(无论提交还是回滚),数据库中数据的状态必须保持一致性、

隔离性

多个事务可能同时执行。在运行过程中,这些事务之间必须保持互相独立,不能相互影响。

脏读取

一个事务在执行时,有可能读取到外界其他事物对数据库的修改,这些修改是尚未提交,并可能被回滚。如果当前事务受到外界未提交数据的影响,将造成脏读取。

不可重读

同一事务中,前后2次读取表中同一记录,结果不同的。是因为有外界事务修改了该数据。这种修改是其他事务结束之后对数据的影响。

影像读取

同一事务中,前后2次执行相同的查询。第一次结果仍存在第二次结果中,并且没有任何改变。

持久性

持久性是指,事务一旦提交,对数据库的修改记录到永久介质中,例如存为磁盘文件,及时下一刻数据库故障,数据也不会丢失。

当用户提交事务时,Oracle总是先生成redo文件。此文件记录了事务对数据库修改的细节,即使系统崩溃,Oracle同样可以利用redo文件保证所有事务成功提交。

Oracle数据一致性与事务管理的更多相关文章

  1. Oracle并发控制、事务管理学习笔记

    (a)基本概念 锁的2种最基本.最简单的类型:排他锁(eXclusive lock,即X锁).共享锁(Share lock,即S锁). 不同级别的锁定协议及其作用: 申请的锁 及其作用 锁定协议 修改 ...

  2. spring+springmvc+mybatis+oracle+atomikos+jta实现多数据源事务管理

    ---恢复内容开始---   在做项目过程中,遇到了需要一个项目中访问两个数据库的情况,发现使用常规的spring管理事务,导致事务不能正常回滚,因此,采用了jta+atomikos的分布式数据源方式 ...

  3. Oracle的表创建和事务管理

    Oracle的表创建和事务管理 - CURD,根据查询结果创建新表 - 事务管理 - 什么是事务 ,为什么要用事务 - SQL99事务隔离级别 - Oracle事务隔离级别 - 事务回滚 - 隐式回滚 ...

  4. Java数据库连接——JDBC调用存储过程,事务管理和高级应用

    一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...

  5. 事务基础知识-->Spring事务管理

    Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 “ ...

  6. 【Spring】Spring的事务管理 - 1、Spring事务管理概述(数据库事务、Spring事务管理的核心接口)

    Spring事务管理概述 文章目录 Spring事务管理概述 数据库事务 什么是Spring的事务管理? Spring对事务管理的支持 Spring事务管理的核心接口 Platform Transac ...

  7. Spring的事务管理

    事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 ...

  8. JDBC、JTA、Spring的事务管理

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么 ...

  9. spring事物配置,声明式事务管理和基于@Transactional注解的使用

    http://blog.csdn.net/bao19901210/article/details/41724355 http://www.cnblogs.com/leiOOlei/p/3725911. ...

  10. Oracle数据库——数据库安全性管理

    一.涉及内容 1.验证系统权限管理. 2.验证角色管理. 3.验证概要文件管理. 二.具体操作 (一) 1.根据以下要求进行系统权限的授予与回收操作. (1)创建用户user1,并为它授予create ...

随机推荐

  1. idhttp的socket error # 10054 错误的处理办法

    在通过http实现restful数据通讯时,死活出现: socket error # 10054 导致这种情况的原因很复杂. 同样的程序,在不同的环境中出现不同结果. 通过观察,发现登录后获取toke ...

  2. 枚举与string之间查找与转换

    利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型 其实上面程序运行会有err,为什么?因为没有理解和掌握JSON Objects Framework[感到简 ...

  3. 活动中台系统慢 SQL 治理实践

    作者:vivo 互联网服务器团队- Zhang Mengtao 活动中台系统作为中台项目非常注重系统性能和用户体验,数据库系统性能问题会对应用程序的性能和用户体验产生负面影响.慢查询可能导致应用程序响 ...

  4. exe4j工具使用-jar包转exe可执行文件

    exe4j介绍 exe4j可以将java打包的jar包转为exe可执行文件,实现在没有jdk环境下运行jar包. 下载链接 https://pan.baidu.com/s/1sfEJyxPABmhsl ...

  5. vue获取浏览器地址栏参数

    this.accountId = this.$route.query.id

  6. 82.7K star!大气炫酷UI开源项目,超级火!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 shadcn/ui 是一款基于 Radix UI 和 Tailwind CSS 构建的现代化 ...

  7. kubernetes部署1.15.0版本

    部署环境 centos7.4 master01: 192.168.85.110 node01: 192.168.85.120 node02: 192.168.85.130 所有节点都要写入hosts ...

  8. 网络编程:反应堆reactor框架设计

    https://app.yinxiang.com/fx/7e601cad-6501-4fe7-8e4e-f0fbd9d02c4b TCP 高性能网络框架需要满足的需求有以下三点: 1)采用 react ...

  9. SuperSocket 2.0 的发布标志着.NET Socket 服务器框架迈入了一个全新的时代

    2025 年 4 月 20 日 - SuperSocket 团队自豪地宣布正式发布 SuperSocket 2.0,这是这款适用于 .NET 的高性能.可扩展套接字服务器应用程序框架的一个重要里程碑. ...

  10. Spring异常处理 bug !!!同一份代码,结果却不一样?

    1. 背景 在上周遇到一个spring bug的问题,将其记录一下.简化的代码如下: public void insert() { try { Person person = new Person() ...