使用程序(ORM或ado.net方式连接数据库)执行带有链接服务器的存储过程时,会报错“在批处理结束时检测到不可提交的事务。该事务将回滚。”。事件查看器中可以看出如下:需要开启服务 MS-DTC,问题就能解决。
事务
就是被绑定在一起作为一个逻辑工作单元的SQL语句组,如果任何一个语句操作失败那么整个操作就被失败,进而
回滚
到操作前状态,或者是上个节点。为了确保要么执行,要么不执行,就可以使用
事务
。要将一组语句作为
事务
考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
1、自动
提交
事务
每条单独的语句都是一个
事务
。
2、显式
事务
每个
事务
均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式
结束
。
3、隐式
事务
前段
时
间对Spring的
事务
配置做了比较深入的研究,在此之间对Spring的
事务
配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的
事务
配置只要把思路理清,还是比较好掌握的。
总结如下:
Spring配置文件中关于
事务
配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变
变更数据捕获(Change Data Capture ,简称 CDC)记录 SQL Server 表的插入、更新和删除活动。使用变更数据捕获可以更有效跟踪表对象DML历史操作,对 ETL 等数据转移也非常有用。
变更数据捕获适用版本:
SQL Server 2008 以上的 Enterprise Edition、Developer Edition 和 Evaluation Editio
事务
的四个特性之一是原子性,其含义是指对于特定操作序列组成的
事务
,要么全部完成,要么就一件也不做。如果在
事务
处理的过程中,发生未知的
不可
预料的错误,如何保证
事务
的原子性呢?当
事务
中止
时
,必须执行
回滚
操作,以便消除已经执行的操作对
数据库
的影响。
一般的情况下,在异常处理中使用
回滚
动作是比较好的想法。前面,我们已经得到了一个更新
数据库
的程序,并且验证了它的正确性,稍微修改一下,可以得到:
分布式
事务
中的XA模式是一种常见的
解决方案
,它可以保证跨多个
数据库
或系统的
事务
的一致性。XA模式基于两阶段
提交
(Two-Phase Commit,2PC)协议来实现。
在XA模式中,
事务
协调器(Transaction Coordinator)协调多个资源管理器(Resource Manager)的操作。在第一阶段,
事务
协调器会向所有资源管理器发送准备
提交
(Prepare)请求,资源管理器会将自己的操作记录到日志中,并返回给
事务
协调器一个准备
提交
的响应。在第二阶段,如果所有资源管理器都成功返回了准备
提交
响应,
事务
协调器会向所有资源管理器发送
提交
(Commit)请求,资源管理器执行真正的
提交
操作,并将结果返回给
事务
协调器。如果其中任何一个资源管理器在第一阶段返回了失败响应或者在第二阶段执行
提交
操作失败,
事务
协调器会向所有资源管理器发送
回滚
(Rollback)请求,资源管理器执行
回滚
操作。
因此,根据XA模式的设计,是可以
回滚
分布式
事务
的。当任何一个参与者出现异常或者
提交
失败
时
,整个
事务
可以
回滚
到之前的状态,保证了分布式
事务
的一致性。然而,XA模式也存在一些问题,例如性能开销较大、单点故障等,因此在实际应用中需要根据具体场景选择适合的分布式
事务
解决方案
。