Innodb的事务与日志 & JTA事务

InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的

通过   行多版本控制



MyISAM                  Innodb

事物支持 :   不支持                     支持

锁的粒度:     table                      Row

存储容量:    没有上限               64TB

哈希索引 :   不支持                       支持

全文索引:   支持                         不支持

外键:            不支持                    支持


(1)有多少种日志

错误日志:记录出错信息,也记录一些警告信息或者正确的信息

慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。

二进制日志:记录对数据库执行更改的所有操作

查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。

(2)日志的存放形式

(3)事务是如何通过日志来实现的,说得越深入越好。

隔离性: 通过锁实现

原子性、一致性和持久性是通过 redo和undo来完成的。


mysql binlog的几种日志录入格式以及区别

(1)各种日志格式的涵义

(2)适用场景

(3)结合第一个问题,每一种日志格式在复制中的优劣。

JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式:自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法:

public void setAutoCommit(boolean)

public boolean getAutoCommit()

public void commit()

public void rollback()

使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。

JTA(Java Transaction API)事务

JTA是一种高层的,与实现无关的,与协议无关的API,应用程序和应用服务器可以使用JTA来访问事务。

JTA允许应用程序执行分布式事务处理–在两个或多个网络计算机资源上访问并且更新数据,这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。

如果计划用 JTA 界定事务,那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。

您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。

J2EE 应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象,它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。

XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时,应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反,应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。

时间: 2024-10-10 13:36:56

Innodb的事务与日志 & JTA事务的相关文章

EJB事务控制(CMT和BMT两种方式以及JTA事务)

一.EJB的事务管理分如下两个方面: 1.CMT(容器管理事务) 2.BMT(Bean管理事务) 二.CMT介绍: 容器管理事务主要是通过容器自动控制事务的开启,提交和回滚,开发人员不需要手工编写代码,由容器来控制事务的边界,一般来说是业务方法的开始 是事务的开启,业务方法的结束是事务的提交部分,当程序遇到运行时异常,事务会自动回滚.如果遇到非运行时异常想要回滚事务的话可以用SessionCon Text的setRollBackOnly()方法来达到目的.下面的例子是一个使用CMT的例子:(事务

Innodb日志与事务

1.Innodb日志: 错误日志:记录出错信息,也记录一些警告信息或者正确的信息. 查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行. 慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中. 二进制日志:记录对数据库执行更改的所有操作. 中继日志:事务日志: 2.Innodb事务: 1.读未提交(RU) 2.读已提交(RC) 3.可重复读(RR) 4.串行 3.innodb引擎的4大特性: 插入缓冲(insert buffer) 二次写(d

spring+mybatis+Atomikos JTA事务配置说明

一.概览 Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品.产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions. TransactionEssentials的主要特征: JTA/XA 事务管理 -- 提供事务管理和连接池 不需要应用服务器 -- TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器 开源 -- TransactionE

Spring+iBatis+Atomikos实现JTA事务

Atomikos是一个公司名字,旗下最著名的莫过于其Atomikos的事务管理器产品. 产品分两个:一个是开源的TransactionEssentials,一个是商业的ExtremeTransactions. TransactionEssentials的主要特征: JTA/XA 事务管理 —— 提供事务管理和连接池 不需要应用服务器 —— TransactionEssentials可以在任何Java EE应用服务器中运行,也就是不依赖于任何应用服务器 开源 —— TransactionEssen

mysql事务表和非事务表在binlog日志的不同处理

mysql的binlog日志是维系mysql主从同步的重要媒介.binlog日志对SQL记录策略,直接影响到主从之间的数据一致性.接下来我们来实验下,看看mysql对事务表和非事务表的DML操作,binlog是如何记录的. 实验环境:mysql官方社区版5.7.18, 操作系统centos7.3,binlog日志格式采用row格式. 1.创建Myisam表b和Innodb表a. CREATE TABLE `a` (   `id` int(11) NOT NULL,   `name` varcha

Spring JTA事务配置JOTM

JTA可以在多个数据库上使用一个事务,weblogic等应用服务器提供了jta数据源的支持,可以直接被使用.但是tomcat本身并不支持这种特性.如果想在tomcat上使用jta就必须使用其它的工具.jotm就是一个独立的可以提供JTA功能的组件. <?xml version="1.0" encoding="UTF-8"?>      <beans xmlns="http://www.springframework.org/schema/

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 本篇文章是系列文章中的第二篇,以防你还没有看过第一篇.上一篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 每一个SQL Server的数据库都会按照其修改数据(insert,update,delete)的顺序将对应的日志记录到日志文件.SQL Server使用了Write-Ahead logging技术来保证了事务日志的原子性和持久性.而这项技术不仅仅保证了ACID

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点.当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要.但是,一旦SQL SERVER发生崩

在Hibernate中分别使用JDBC和JTA事务的方法

在Hibernate中使用JDBC事务 Hibernate对JDBC进行了轻量级的封装,它本身在设计时并不具备事务处理功能.Hibernate将底层的JDBCTransaction或JTATransaction进行了封装,再在外面套上Transaction和Session的外壳,其实是通过委托底层的JDBC或JTA来实现事务的处理功能的. 要在Hibernate中使用事务,可以在它的配置文件中指定使用JDBCTransaction或者JTATransaction.在hibernate.prope