分布式事务
出自 MBA智库百科(https://wiki.mbalib.com/)
目录 |
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
为了实现分布式事务,需要使用下面将介绍的两阶段提交协议:
阶段一:开始向事务涉及到的全部资源发送提交前信息。此时,事务涉及到的资源还有最后一次机会来异常结束事务。如果任意一个资源决定异常结束事务,则整个事务取消,不会进行资源的更新。否则,事务将正常执行,除非发生灾难性的失败。为了防止会发生灾难性的失败,所有资源的更新都会写入到日志中。
阶段二:只在阶段一没有异常结束的时候才会发生。此时,所有能被定位和单独控制的资源管理器都将开始执行真正的数据更新。在分布式事务两阶段提交协议中,有一个主事务管理器负责充当分布式事务协调器的角色。事务协调器负责整个事务并使之与网络中的其他事务管理器协同工作。为了实现分布式事务,必须使用一种协议在分布式事务的各个参与者之间传递事务上下文信息。
分布式事务处理 (TP) 系统旨在协助在分布式环境中跨异类的事务识别资源的事务。在分布式 TP 系统的支持下,应用程序可以将不同的活动合并为一个事务性单元,这些活动包括从“消息队列”队列检索消息、将消息存储在 Microsoft SQL Server 数据库中、将所有现有的消息引用从 Oracle Server 数据库中移除,等等。因为分布式事务跨多个数据库资源,故强制 ACID 属性维护所有资源上的数据一致性是很重要的。
在 Transact-SQL 中启动的分布式事务的结构相对比较简单:
1、Transact-SQL脚本或应用程序连接执行启动分布式事务的 Transact-SQL 语句。
2、执行该语句的 Microsoft® SQL Server™ 成为事务中的主控服务器。
3、然后脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。
4、当执行了分布式查询或远程过程调用后,主控服务器将自动调用MS DTC以便登记分布式事务中链接的服务器和远程服务器。
5、当脚本或应用程序发出COMMIT或ROLLBACK语句时,主控SQL Server将调用MS DTC管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。
控制分布式事务的Transact-SQL语句很少,因为多数工作都由 Microsoft® SQL Server™和 MS DTC 在内部完成。Transact-SQL 脚本或应用程序中所需的 Transact-SQL 语句只须:启动分布式事务。对链接的服务器执行分布式查询,或对远程服务器执行远程过程调用。
调用标准 Transact-SQL COMMIT TRANSACTION、COMMIT WORK、ROLLBACK TRANSACTION 或 ROLLBACK WORK 语句完成事务。
对于任意一个 Transact-SQL 分布式事务,处理 Transact-SQL脚本或连接的 SQL Server 将自动调用 MS DTC 以协调事务的提交或回滚。
REMOTE_PROC_TRANSACTIONS 选项是一个兼容性选项,只影响对使用sp_addserver定义的远程服务器所进行的远程存储过程调用。有关远程存储过程的更多信息,请参见远程存储过程构架。该选项不适用于在使用sp_addlinkedserver定义的链接服务器上执行存储过程的分布式查询。有关分布式查询的更多信息,请参见分布式查询。