实例一

尊重原著作:本文参考自http://www.jb51.net/article/43540.htm

--BEGIN DISTRIBUTED TRANSACTION [transactionname]
--标志一个由分布式事务处理协调器MSDTC管理的TSQL分布式事务开始
--SERVER A服务器为主控服务器。当连接发出后续COMMIT TRANSACTION或
--ROLLBACK TRANSACTION语句时,主控服务器请求MSDTC在所涉及的服务器间管理
--分布式事务的完成

--SQLSERVER使用链接服务器或者远程服务器作为分布式事务处理的平台,提供
--远程存储过程调用和分布式查询

--当使用分布式事务进行一个远程存储过程调用和一个分布式查询时,在SERVER A
--上发出BEGIN DISTRIBUTED TRANSACTION ,该连接调用SERVER B上的存储过程
--和SERVER C上的另一个存储过程,并且SERVER C上的存储过程对SERVER D执行一个
--分布式查询,则四个SQLSERVER服务器进入分布式事务中,SERVER A是该事务的创建者
--和控制服务器

--创建分布式事务,在本地和远程数据库同时删除一条记录,其中,远程SQLSERVER
--的实例名称为RemoteServer。本地和远程数据库同时提交或同时回滚该事务。
--注意,执行分布式查询或调用存储过程时,使用4部分名称限定规则

--前提:本机的MSDTC和远程机器的MSDTC服务要打开
--本机和远程机器能互相ping通
--数据库端口能互相telnet通
--创建一个链接服务器到远程机器ITSV

if exists(select * from sys.servers where name='DBSever\MSSQL2008')
  EXEC sp_dropserver  'DBSever\MSSQL2008', 'droplogins'
EXEC sp_addserver  'DBSever\MSSQL2008'
EXEC sp_addlinkedsrvlogin  'DBSever\MSSQL2008', 'false',null, 'sa', '123321'
EXEC sp_serveroption 'DBSever\MSSQL2008', 'data access', 'on'  --未将服务器 'DBSever\MSSQL2008' 配置为用于 DATA ACCESS。添加此句。

SET xact_abort on --对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。

USE [SVTCCData]
GO
SELECT * FROM [VJ17A69HHC4ZMAS\MSSQLSERVER1].[SVTCCData].[dbo].[2014TestRemote] WHERE [Name]='lt3'
SELECT * FROM [DBSever\MSSQL2008].[SCJZData].[dbo].[2014TestRemote] WHERE [Name]='lt3'

USE [SVTCCData]
GO
BEGIN DISTRIBUTED TRANSACTION
--从本地数据库删除一条记录
DELETE FROM [VJ17A69HHC4ZMAS\MSSQLSERVER1].[SVTCCData].[DBO].[2014TestRemote]
WHERE [Name]='lt3'

--从远程数据库中删除一条记录
DELETE FROM [DBSever\MSSQL2008].[SCJZData].[dbo].[2014TestRemote]
WHERE [Name]='lt3'

COMMIT TRAN
GO

--个人尝试了下是由于在双向的sql server访问中采用了链式方式访问(LinkedServer方式),
--遇到这种情况只需要将原来访问对方数据库的语句:
--select  *  from  linkedServerA.dbo.table1
--修改为:
--select  *  from  dbo.table1即可。

实例二

/*
 主控机:Win XP,SQL Server 2008 R2
 资源机:Win Server 2008 R2,SQL Server 2008 R2
 表结构:无Identity列
 调用方式:SQL语句
 测试回滚:测试
*/

If Exists(select * from sys.servers where name='ITSV')
  EXEC sp_dropserver  'ITSV', 'droplogins' 
EXEC sp_addlinkedserver  'ITSV', '', 'SQLOLEDB', 'DBSever\MSSQL2008'
EXEC sp_addlinkedsrvlogin  'ITSV', 'false',null, 'sa', '123321'
SET xact_abort on

BEGIN DISTRIBUTED TRANSACTION

  Insert Into [2014TestRemote](ID,name,phone)Values(101,'101','101')

  Delete ITSV.SCJZData.dbo.[2014TestRemote]

  Insert Into ITSV.SCJZData.dbo.[2014TestRemote]
    Select * From [2014TestRemote]

  Update ITSV.SCJZData.dbo.[2014TestRemote] Set ID='Test2'

COMMIT TRAN
GO

EXEC sp_dropserver  'ITSV', 'droplogins'

SQLSERVER分布式事务使用实例的更多相关文章

  1. springcloud分布式事务Atomikos实例

    0.JTA(Java Transaction Manager)的介绍 (1)jta与jdbc 简单的说 jta是多库的事务 jdbc是单库的事务 (2)XA与JTA XA : XA是一个规范或是一个事 ...

  2. sqlserver分布式事务

    启动服务中的Distributed Transaction Coodinator后 创建链接服务器ender-pc\subx 设定连接服务器RPC OUT 以及RPC属性为True 实验一下代码 创建 ...

  3. 消息服务框架(MSF)应用实例之分布式事务三阶段提交协议的实现

    一,分布式事务简介 在当前互联网,大数据和人工智能的热潮中,传统企业也受到这一潮流的冲击,纷纷响应国家“互联网+”的战略号召,企业开始将越来越多的应用从公司内网迁移到云端和移动端,或者将之前孤立的IT ...

  4. 即时消息服务框架(iMSF)应用实例之分布式事务三阶段提交协议的实现

    一,分布式事务简介 在当前互联网,大数据和人工智能的热潮中,传统企业也受到这一潮流的冲击,纷纷响应国家“互联网+”的战略号召,企业开始将越来越多的应用从公司内网迁移到云端和移动端,或者将之前孤立的IT ...

  5. SQLServer之创建分布式事务

    分布式事务创建注意事项 指定一个由 Transact-SQL 分布式事务处理协调器 (MS DTC) 管理的 Microsoft 分布式事务的起点. 执行 BEGIN DISTRIBUTED TRAN ...

  6. sqlserver Distributed Transaction 分布式事务

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

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

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

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

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

  9. ADO.NET中的TransactionScope何时需要启用MSTDC(分布式事务管理)

    我们知道在ADO.NET中可以用TransactionScope来将多个SqlConnection(多个数据库连接)执行的Sql语句放入一个事物中提交或取消,但是使用TransactionScope的 ...

随机推荐

  1. aliCloud基于RAMService实现跨账户资源访问

    1,aliCloud基于RAM service实现跨账户ECS资源访问Example 主要的资源为Instance,Image,Snapshot,disk,SecurityGroup Action太多 ...

  2. yum cannot retrieve metalink for repository

    Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

  3. python安装完毕后,提示找不到ssl模块的解决方示

    python安装完毕后,提示找不到ssl模块: [root@localhost ~]# python2.7.5 Python 2.7.5 (default, Jun 3 2013, 11:08:43) ...

  4. 在CSDN上看到的一个过滤方法,感觉还不错

    /// <summary> /// 把字符串中包含的敏感词替换成别的关键字 /// </summary> /// <param name="s"> ...

  5. iOS开发之设置界面的抽取

    几乎每款app都会有一个设置的界面!!! 那么我们的设置界面到底要怎么写才能最方便使用呢?下面我就来说说我的想法. 1.观察原型图 2.找出相同的东西,目的是抽出一个基类模块,只要我写好了这个控制器, ...

  6. zookeeper_04:curator

    定义 Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量. <d ...

  7. Docker终极指南:为什么Docker能做这么多事

    Docker终极指南:为什么Docker能做这么多事 http://www.aboutyun.com/thread-11499-1-1.html

  8. Search in Sorted Array,Search in Rotated Sorted Array,Search in Rotated Sorted ArrayII

    一:Search in Sorted Array 二分查找,可有重复元素,返回target所在的位置,只需返回其中一个位置,代码中的查找范围为[low,high),左闭右开,否则容易照成死循环. 代码 ...

  9. juce中的timer

    juce中timer总体说还是比较好用的,使用时只需继承timer类, 重写callback然后调用start就可以了,juce的timer比较特别,自己通过线程实现,starttimer的时候会创建 ...

  10. Lucene学习之CURD

    创建索引 Lucene在进行创建索引时,根据前面一篇博客,已经讲完了大体的流程,这里再简单说下: Directory directory = FSDirectory.open("/tmp/t ...