分布式事务创建注意事项

指定一个由 Transact-SQL 分布式事务处理协调器 (MS DTC) 管理的 Microsoft 分布式事务的起点。

执行 BEGIN DISTRIBUTED TRANSACTION 语句的 SQL Server 数据库引擎的实例是事务创建者,并控制事务的完成。 当为会话发出后续 COMMIT TRANSACTION 或 ROLLBACK TRANSACTION 语句时,控制实例请求 MS DTC 在所涉及的所有实例间管理分布式事务的完成。

事务级别的快照隔离不支持分布式事务。

数据库引擎的远程实例登记到分布式事务中的主要方法是当已在分布式事务中登记的会话执行引用链接服务器的分布式查询时。

例如,如果在服务器 A 上发出 BEGIN DISTRIBUTED TRANSACTION,则该会话将调用服务器 B 上的一个存储过程和服务器 C 上的另一个存储过程。 服务器 C 上的存储过程执行针对服务器 D 的分布式查询,这样该分布式事务将涉及所有四台计算机。 服务器 A 上的 数据库引擎的实例是该事务的初始控制实例。

Transact-SQL 分布式事务涉及的会话并不获取可以传递给另一个会话的事务对象,从而也不能将其显式登记在分布式事务中。 远程服务器登记到事务中的唯一方法是成为分布式查询或远程存储过程调用的目标。

在本地事务中执行分布式查询时,如果目标 OLE DB 数据源支持 ITransactionLocal,则该事务被自动提升为分布式事务。 如果目标 OLE DB 数据源不支持 ITransactionLocal,则只允许在分布式查询中执行只读操作。

已在分布式事务中登记的会话执行一个引用远程服务器的远程存储过程调用。

sp_configure remote proc trans 选项控制对本地事务中的远程存储过程调用是否自动使本地事务被提升为由 MS DTC 管理的分布式事务。 连接级别 SET 选项 REMOTE_PROC_TRANSACTIONS 可用于覆盖由 sp_configure remote proc trans 建立的实例默认值。启用本选项后,远程存储过程调用会使一个本地事务被提升为分布式事务。 创建 MS DTC 事务的连接成为该事务的创建者。COMMIT TRANSACTION 初始化一个 MS DTC 协调的提交。 如果启用了 sp_configure remote proc trans 选项,本地事务中的远程存储过程调用将被自动保护,成为分布式事务的一部分,而不需要重写应用程序以便专门发出 BEGIN DISTRIBUTED TRANSACTION 而不是 BEGIN TRANSACTION。

要求具有 public 角色的成员身份。

使用T-SQL脚本创建分布式事务

语法:

--声明数据库引用

use 数据库名称;

go

--开启分布式事务

begin distributed { tran | transaction } [ transaction_name | @tran_name_variable ]

beign

数据库事务操作;

end

go

语法解析:

--distributed
--分布式事务关键字标识符

--transaction_name
--用户定义的事务名,用于跟踪 MS DTC 实用工具中的分布式事务。 transaction_name 必须符合标识符规则,字符数必须 <= 32。

--@tran_name_variable
--用户定义的一个变量名,它含有一个事务名,该事务名用于跟踪 MS DTC 实用工具中的分布式事务。 必须使用 char、varchar、nchar 或 nvarchar 数据类型声明该变量。

示例:

--声明数据库引用
use testss;
go

--开启分布式事务
begin distributed transaction distributedtran
begin
declare @rowcounts int =0;

insert into Tests.dbo.test1(name,sex,height,age,classid) values('分布式事务测试','女','178','20','1');
set @rowcounts=@rowcounts+(select @@ROWCOUNT);

insert into testss.dbo.test1(name,sex,height,age,classid) values('分布式事务测试','女','178','20','1');
set @rowcounts=@rowcounts+(select @@ROWCOUNT);

if @rowcounts=2
commit transaction distributedtran;
else
rollback transaction distributedtran;
end
go

示例结果:

SQLServer之创建分布式事务的更多相关文章

  1. sqlserver Distributed Transaction 分布式事务

    在webapi+ef+sqlserver开发项目时,利用transcope实现应用层级的事务时,偶尔会报分布式事务错误,而且很而复现,特别蛋疼.现将自己的解决方法初步整理下. 分析原因:搭建repos ...

  2. sqlserver中创建包含事务的存储过程

    什么是事务     事务时包含1条或多条语句的逻辑单元.事务中的语句是一个整体,要么一起提交,要么一起撤销.事务在提交前可以回滚,一旦提交就不能撤销修改了,是永久性的修改.   为什么使用事务     ...

  3. SQLSERVER分布式事务使用实例

    实例一 尊重原著作:本文参考自http://www.jb51.net/article/43540.htm --BEGIN DISTRIBUTED TRANSACTION [transactionnam ...

  4. 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)

    1,示例解决方案介绍 在上一篇 <消息服务框架(MSF)应用实例之分布式事务三阶段提交协议的实现>中,我们分析了分布式事务的三阶段提交协议的原理,现在我们来看看如何使用消息服务框架(MSF ...

  5. SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC)

    原文:SqlServer & Windows 可更新订阅立即更新启用分布式事务协调器(MSDTC) 在可更新订阅中,在订阅设置更新方法,将 "排队更新" 设置为 " ...

  6. SQLServer之创建显式事务

    显式事务定义 显式事务以 BEGIN TRANSACTION 语句开始,并以 COMMIT 或 ROLLBACK 语句结束. 备注 BEGIN TRANSACTION 使 @@TRANCOUNT 按 ...

  7. SQLServer之创建事务序列化

    创建事务序列化注意事项 语法:set transaction isolation level serialize; 序列化会指定下列内容: 语句不能读取已由其他事务修改但尚未提交的数据. 任何其他事务 ...

  8. JAVA分布式事务原理及应用(转)

      JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据. JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目 ...

  9. SQL SERVER 分布式事务(DTC)

    BEGIN DISTRIBUTED TRANSACTION指定一个由 Microsoft 分布式事务处理协调器 (MS DTC) 管理的 Transact-SQL 分布式事务的起始. 语法BEGIN ...

随机推荐

  1. Python内置函数(52)——range

    英文文档: range(stop) range(start, stop[, step]) Rather than being a function, range is actually an immu ...

  2. ASP.NET Core WebApi AspNetCoreRateLimit 限流中间件学习

    AspNetCoreRateLimit介绍: AspNetCoreRateLimit是ASP.NET核心速率限制框架,能够对WebApi,Mvc中控制限流,AspNetCoreRateLimit包包含 ...

  3. How does the vuejs add the query and walk the object?

    让这个老实返回的页面添加特殊路由,这个页面常常都是登录注册.这次我们根据登录举例. 省略 { path:'/login?url=:url', name:'loginfirst', component: ...

  4. java基础(四)-----抽象类与接口

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们 ...

  5. Jexus~webApi程序的部署几个小坑

    今天上午写了Jexus~Linux环境下的部署,下午去实现了一个,出现了一些问题,下面总结一下. 一 首先要对jexus进行修改/usr/jexus/jws 删除下面的这行,解决csc文件未找到问题 ...

  6. Chapter 4 Invitations——20

    Well, that was fine. I could leave him alone. 行吧,但愿一切都好.我能让他一个人. I would leave him alone. 我也会让他一个人的. ...

  7. Asp.Net SignalR - 持久连接类

    持久连接类 通过SignalR持久连接类可以快速的构建一个即时通讯的应用,上篇博文已经我们创建一个owin Startup类和一个持久连接类来完成我们的工作,然后在Startup类的Configura ...

  8. [MXNet逐梦之旅]练习一·使用MXNet拟合直线手动实现

    [MXNet逐梦之旅]练习一·使用MXNet拟合直线手动实现 code #%% from matplotlib import pyplot as plt from mxnet import autog ...

  9. MySQL使用过程中的报错处理(持续更新)

    一.数据库初始化 1.Percona的MySQL 5.6.20版本数据库初始化 初始化命令(MySQL 5.6版本不适用mysqld命令进行初始化) ./scripts/mysql_install_d ...

  10. Zabbix3.0基础教程之一:系统监控,zabbix安装与基本配置

    一.安装环境: 系统环境: 系统版本:CentOS Linux release 7.4.1708 (Core) 内核版本:3.10.0-693.el7.x86_64 关闭Firewall与SELinu ...