事务-原理
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
redo和undo日志
在数据库系统中,既有存放数据的文件,也有存放日志的文件。日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件。 MySQL中的日志文件,有这么两类常常讨论到:undo日志与redo日志。1 undo1.1 undo是啥undo日志用于存放数据修改被修改前的值,假设修改 tba 表中 id=2的行数据,把Name=’B’ 修改为Name = ‘B2’ ,那么undo日志就会用来存放Name=’B’的记录,如果这个修改出现异常,可以使用undo日转载 2020-06-09 12:42:10 · 785 阅读 · 0 评论 -
redo和undo区别讨论及何时写入,InnoDB undo, redo,binlog,data什么时候写?
undo:相当于数据修改前的备份redo: 相当于数据修改后的备份,为了保证事务的持久化,redo会一直写Undo + Redo事务的简化过程 假设有A、B两个数据,值分别为1,2. A.事务开始. B.记录A=1到undo log. C.修改A=3. D.记录A=3到redo log. E.记录B=2到undo log. F.修改B=4. G.记录B=4到redo log. H.将redo log写入磁盘 I.事务提交完成-Undo + Redo事务的...转载 2020-06-09 12:16:54 · 4592 阅读 · 0 评论 -
什么是WAL?Write-ahead logging
什么是WAL"In computer science, write-ahead logging (WAL) is a family of techniques for providing atomicity and durability (two of the ACID properties) in database systems."——维基百科在计算机领域,WAL(Write-ahead logging,预写式日志)是数据库系统提供原子性和持久化的一系列技术。在使用WAL的系统中,所有的修改转载 2020-06-09 11:15:46 · 1054 阅读 · 0 评论 -
什么是 WAL?Write-ahead logging
什么是 WALWAL(Write Ahead Log)预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。在计算机科学中,「预写式日志」(Write-ahead logging,缩写 WAL)是关系数据库系统中用于提供原子性和持久性(ACID 属性中的两个)的一系列技术。在使用 WAL 的系统中,所有的修改在提交之前都要先写入 log 文件中。log 文件中通常包括 redo 和 undo 信息。这样做的目的可以通过一个例子来说明。假设一个程序在执行某些操作的过程中机器掉电转载 2020-06-09 11:02:59 · 2105 阅读 · 0 评论 -
HibernateTemplate 自动事务
使用HibernateTemplate时,不显示的声明事务管理,照样能对数据库做CURD。 这是因为在没有声明事务时,HibernateTemplate是默认自动提交事务的。 因此如果在业务代码中,只涉及到一次数据库操作时默认自动事务提交已经足够,如果多次数据库操作则需要做事务声明。转载 2013-12-05 10:54:10 · 4130 阅读 · 1 评论 -
Spring的事务 之 9.3 编程式事务 ——跟我学spring3
9.3 编程式事务9.3.1 编程式事务概述 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理。 Spring框架提供一致的事务抽象,因此对于JDBC还是JTA事务都是采用相同的API进行编程。 java代码:查看复制到剪贴板打印Connection conn = null转载 2013-12-05 15:50:46 · 2014 阅读 · 0 评论 -
Spring中的编程式事务与声明式事务
编程式事务:使用PlatformTransactionManager及TransactionTemplate ,其中PlatformTransactionManager可在xml文件中配置1.声明数据源2.声明一个事务管理类,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等原创 2012-12-19 15:35:57 · 2847 阅读 · 0 评论 -
Spring配置事务中的 transactionAttributes 各属性含义及XML配置
transactionAttributes 属性:PROPAGATION事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS原创 2013-12-06 09:50:22 · 20871 阅读 · 2 评论 -
SPRING 事务控制 (PROPAGATION_NESTED)
在 SPRING 中一共定义了六种事务传播属性PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQ转载 2017-07-27 16:56:13 · 14715 阅读 · 2 评论 -
spring 嵌套事务(Nested Transaction) 和新建事务测试
查询Nested Transaction细节时,经典例子 serviceA 调用 serviceB,当SeviceB事务传播属性为NESTED时,serviceA只要catch住了Exception就能保证调用serviceB之前的操作提交而不受ServiceB异常的影响,但是如果REQUIRES_NEW时,serviceA和serviceB相对独立,serviceB有异常会不影响转载 2017-07-27 17:34:34 · 12163 阅读 · 0 评论 -
解惑 spring 嵌套事务
解惑 spring 嵌套事务 /** * @author 王政 * @date 2006-11-24 * @note 转载请注明出处 */ 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看, 绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 Trans转载 2017-07-27 17:48:36 · 928 阅读 · 0 评论 -
使用 @Lock 注解实现Spring JAP锁
http://blog.csdn.net/terry_long/article/details/54291455JPA 2.0增加了6种新的锁模式,其中两个是乐观锁。JPA 2.0也允许悲观锁,并增加了3种悲观锁,第6种锁模式是无锁。 下面是新增的两个乐观锁模式: 1、OPTIMISTIC:它和READ锁模式相同,JPA 2.0仍然支持R转载 2018-02-21 19:29:54 · 11126 阅读 · 0 评论 -
Java与持久相关的锁总结
本文总结Java中有关数据库保存持久数据的锁机制,不只是纯粹数据库自身的锁,本文主要就Java持久层三个技术数据库、JPA和Hibernate的锁应用进行了总结。 在并发理论中,锁是用于保护可变的共享数据,以保证数据的完整性,大多数应用程序都是依赖于数据库本身提供的隐藏在数据库机制内的锁技术,很多初学者可能都没有意识到。 将整个系统的锁职责委托给数据库系统,虽然可以简化应用程序转载 2018-02-21 20:04:05 · 808 阅读 · 0 评论 -
Spring 声明事务中transactionAttributes属性 + - Exception 实现逻辑
下面是一段典型的Spring 声明事务的配置:查看文本打印?bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> property name="transactionManager">转载 2013-12-06 09:30:30 · 3606 阅读 · 0 评论 -
Spring事务属性详解
Spring,是一个Java开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用转载 2014-02-24 16:38:20 · 6008 阅读 · 0 评论 -
Spring的事务管理难点剖析(5):联合军种作战的混乱
Spring事务管理器的应对 Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋。像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便;而iBatis则通过模板化技术让你方便地控制SQL,但没有Hibernate那样高的开发效率;自由度最高的当然是直接使用Spring JDBC了,但它也是底层的,灵活的代价是代码的繁复。很难说哪种数据转载 2015-01-04 16:26:17 · 1857 阅读 · 0 评论 -
死锁及oracle死锁
所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。关于数据库死锁的检查方法一转载 2015-03-10 10:39:43 · 2465 阅读 · 0 评论 -
数据库事务隔离级别
并发问题可归纳为以下几类: A.丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖(A和B事务并发执行,A事务执行更新后,提交;B事务在A事务更新后,B事务结束前也做了对该行数据的更新操作,然后回滚,则两次更新操作都丢失了)。B.脏读:一个事务读到另一个事务未提交的更新数据(A和B事务并发执行,B事务执行更新后,A事务查询B事务没有提交的数据,B事务回滚,则A事务得到的数据不转载 2015-03-10 10:26:30 · 1302 阅读 · 0 评论 -
关于AOP无法切入同类调用方法的问题
最近在开发中遇到一个问题,当在Service中定义了一个方法并且切入之后,从Controller里面调用该方法可以实现切入,但是当在同一个Service中实现另一方法并调用改方法时却无法切入。代码类似于:/** * Controller 你懂的*/public class Ctrl { public void ctrl() {......service.callMethodA()转载 2015-05-10 17:44:53 · 12838 阅读 · 5 评论 -
Hibernate乐观锁实现之Version
通过在表中及POJO中增加一个version字段来表示记录的版本,来达到多用户同时更改一条数据的冲突数据库脚本: create table studentVersion (id varchar(32),name varchar(32),ver int);POJO package Version;public class Student {转载 2014-04-02 19:46:21 · 3527 阅读 · 0 评论 -
context:component-scan扫描使用上的容易忽略的use-default-filters
问题如下方式可以成功扫描到@Controller注解的Bean,不会扫描@Service/@Repository的Bean。正确 Java代码 package="org.bdp.system.test.controller"> "annotation" expression="org.springframework.stereoty转载 2014-07-15 16:41:27 · 5623 阅读 · 0 评论 -
两种丢失更新的区别
第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆盖了。这种错误可能造成很严重的问题,通过下面的账户取款转账就可以看出来:时间取款事务A转账事务BT1开始事务 T2 开始事务转载 2016-08-15 18:34:34 · 7851 阅读 · 6 评论 -
数据库(Hibernate)事务与并发问题处理(乐观锁与悲观锁)
目录一、数据库事务的定义二、数据库事务并发可能带来的问题三、数据库事务隔离级别四、使用Hibernate设置数据库隔离级别五、使用悲观锁解决事务并发问题六、使用乐观锁解决事务并发问题 Hibernate事务与并发问题处理(乐观锁与悲观锁)一、数据库事务的定义 数据库事务(Database Transaction)转载 2016-08-16 14:20:37 · 2363 阅读 · 0 评论 -
Spring+iBatis+Atomikos实现JTA事务
Spring+iBatis+Atomikos实现JTA事务 Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品。 产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions。 TransactionEssentials的主要特征:JTA/XA 事务管转载 2016-09-13 18:11:25 · 1285 阅读 · 0 评论 -
Spring分布式事务- 三种实现方式(Spring+JTA)
分布式事务是指事务的参与者、支持事务的服务器、资源管理器以及事务管理器分别位于分布系统的不同节点之上,在两个或多个网络计算机资源上访问并且更新数据,将两个或多个网络计算机的数据进行的多次操作作为一个整体进行处理。如不同银行账户之间的转账。对于在项目中接触到JTA,大部分的原因是因为在项目中需要操作多个数据库,同时,可以保证操作的原子性,保证对多个数据库的操作一致性。 项目结构图 1转载 2016-09-13 18:14:45 · 15487 阅读 · 3 评论 -
Spring的事务 之 9.4 声明式事务 ——跟我学spring3
9.4 声明式事务9.4.1 声明式事务概述 从上节编程式实现事务管理可以深刻体会到编程式事务的痛苦,即使通过代理配置方式也是不小的工作量。 本节将介绍声明式事务支持,使用该方式后最大的获益是简单,事务管理不再是令人痛苦的,而且此方式属于无侵入式,对业务逻辑实现无影响。 接下来先来看看声明式事务如何实现吧。9.4.2转载 2013-12-05 15:51:24 · 2388 阅读 · 0 评论 -
关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
http://blog.csdn.net/bluishglc/article/details/7612811 本文原文连接: http://blog.csdn.net/bluishglc/article/details/7612811 ,转载请注明出处! 1.XA XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transacti...转载 2017-07-24 11:51:05 · 1553 阅读 · 0 评论 -
Spring MVC @Transactional注解方式事务失效的解决办法
前文提到,最新换了框架,新项目用SpringMVC + Spring JdbcTemplate。搭框架时,发现了一个事务无法正常回滚的问题,记录如下:首先展示问题:Spring applicationContext.xml配置:[html] view plaincopy bean id="dataSourc转载 2014-07-15 17:14:10 · 69501 阅读 · 19 评论