分布式事务使用方法

简介: 使用 OLE DB、开放式数据库连接 (ODBC)、ActiveX 数据对象 (ADO) 或 DB 库编写的应用程序可以使用 Transact-SQL 分布式事务,方法是发出 Transact-SQL 语句来启动和停止 Transact-SQL 分布式事务。

使用 OLE DB、开放式数据库连接 (ODBC)、ActiveX 数据对象 (ADO) 或 DB 库编写的应用程序可以使用 Transact-SQL 分布式事务,方法是发出 Transact-SQL 语句来启动和停止 Transact-SQL 分布式事务。OLE DB 和 ODBC 还包含在应用程序编程接口 (API) 级别对管理分布式事务的支持。OLE DB 应用程序和 ODBC 应用程序可以使用这些 API 函数管理包括其他组件对象模型 (COM) 资源管理器(支持 Microsoft 分布式事务处理协调器 [MS DTC] 事务但不支持 SQL Server 数据库引擎)的分布式事务。它们也可以使用 API 函数获取对包括多台运行数据库引擎实例的计算机的分布式事务边界的更多控制。

ODBC 分布式事务

通过将连接属性 SQL_ATTR_AUTOCOMMIT 设置为 SQL_AUTOCOMMIT_OFF,然后调用 ODBC SQLEndTran 函数提交或回滚每个事务,可以控制 ODBC API 级别的本地事务。请勿使用这些函数管理 ODBC 应用程序中的分布式事务。而应该使用 MS DTC COM 方法:

  • 调用 DtcGetTransactionManager 连接到 MS DTC。

  • 调用 ITransactionDispenser::BeginTransaction 启动分布式事务并获取事务对象。

  • 对每个参与分布式事务的 ODBC 连接,调用 ODBC 函数 SQLSetConnectAttr,其中 fOption 设置为 SQL_COPT_SS_ENLIST_IN_DTC,vParam 保存通过 ITransactionDispenser::BeginTransaction 获得的事务对象的地址。

  • 当事务完成时,对于通过 ITransactionDispenser::BeginTransaction 获得的事务对象,不要调用 ODBC SQLEndTran 函数,而应调用 ITransaction::Commit 方法或 ITransaction::Rollback 方法。

OLE DB 分布式事务

控制 OLE DB 中的分布式事务的方法与控制本地事务的方法相似。若要控制本地事务,则 OLE DB 的使用者应该:

  • 使用 ITransactionLocal::StartTransaction 方法启动本地事务,并获得事务对象。

  • 对于通过 ITransactionLocal::StartTransaction 获得的事务对象,调用 ITransaction::Commit 方法或 ITransaction::Rollback 方法。

若要控制分布式事务,使用者应该:

  • 调用 DtcGetTransactionManager 连接到 MS DTC。

  • 调用 ITransactionDispenser::BeginTransaction 启动分布式事务,并获取事务对象。

  • 对每个参与分布式事务的连接,调用分布式事务对象的 ITransactionJoin 接口。

  • 对分布式事务对象调用 ITransaction::Commit 方法或 ITransaction::Rollback 方法,完成该事务。
目录
相关文章
|
2月前
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
44 1
|
3月前
|
存储 Java 数据库
事务的四大特性及其实现原理:深入剖析与实战示例
【10月更文挑战第17天】在数据库管理和分布式系统设计中,事务(Transaction)扮演着至关重要的角色。事务的四大特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),通常简称为ACID特性。
106 1
|
8月前
|
NoSQL 算法 Go
Go语言中的分布式事务处理方案
【5月更文挑战第6天】本文探讨了Go语言在分布式事务处理中的应用,包括2PC、3PC和TCC协议。通过示例展示了如何使用Go的`goroutine`和`channel`实现2PC。同时,文章指出了网络延迟、单点故障、死锁和幂等性等常见问题,并提供了相应的解决策略。此外,还以Redis Redlock为例,展示了如何实现分布式锁。理解并实施这些方案对于构建高可用的分布式系统至关重要。
196 0
|
8月前
|
监控 API 数据库
Seata常见问题之Seata AT的设计不支持使用临时表如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
|
8月前
|
存储 关系型数据库 MySQL
Seata常见问题之程序读的nocas的配置如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
116 0
|
存储 JSON 数据可视化
Seata Saga 模式快速入门和最佳实践
Seata Saga 模式快速入门和最佳实践
6716 11
|
SQL JSON 搜索推荐
SEATA相关概念以及实现原理
SEATA相关概念以及实现原理
137 0
|
SQL Cloud Native Java
分布式事务Seata源码解析八:本地事务执行流程(AT模式下)
分布式事务Seata源码解析八:本地事务执行流程(AT模式下)
736 0
分布式事务Seata源码解析八:本地事务执行流程(AT模式下)
|
数据库 微服务
分布式事务和事务的基本概念
分布式事务和事务的基本概念
118 0