SQLSERVER分布式事务使用实例
--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通
--创建一个链接服务器到远程机器WIN7U-20130414Z
USE [GPOSDB]
GO
SELECT * FROM [SystemPara] WHERE [Name]='HDTPort'
SELECT * FROM [WIN7U-20130414Z].[GPOSDB].dbo.[SystemPara] WHERE [Name]='HDTPort'
USE [GPOSDB]
GO
BEGIN DISTRIBUTED TRANSACTION
--从本地数据库删除一条记录
DELETE FROM [JOE].[GPOSDB].[DBO].[SystemPara]
WHERE [Name]='HDTPort'
--从远程数据库中删除一条记录
DELETE FROM [GPOSDB].[dbo].[SystemPara]
WHERE [Name]='HDTPort'
COMMIT TRAN
GO
--个人尝试了下是由于在双向的sql server访问中采用了链式方式访问(LinkedServer方式),
--遇到这种情况只需要将原来访问对方数据库的语句:
--select * from linkedServerA.dbo.table1
--修改为:
--select * from dbo.table1即可。
--标记下,以便以后解决。
相关推荐
-
sqlserver2008锁表语句详解(锁定数据库一个表)
锁定数据库的一个表 复制代码 代码如下: SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 复制代码 代码如下: SELECT * FROM table WITH (HOLDLOCK) 其他事务可以读取表,但不能更新删除 复制代码 代码如下: SELECT * FROM table WITH (TABLOCKX) 其他事务不能读取表,更新和删除 SELECT 语句中"加锁选项"的功能说明 SQL Server提供了强大而完备的锁机
-
查找sqlserver查询死锁源头的方法 sqlserver死锁监控
查找出SQLServer的死锁和阻塞的源头 --查找出SQLServer死锁和阻塞的源头 复制代码 代码如下: use mastergodeclare @spid int,@bl intDECLARE s_cur CURSOR FORselect 0 ,blockedfrom (select * from sysprocesses where blocked>0 ) awhere not exists(select * from (select * from sysprocesses whe
-
Sqlserver 存储过程中结合事务的代码
复制代码 代码如下: --方式一 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USP_ProcedureWithTransaction_Demo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[USP_ProcedureWithTransaction_Demo] GO -- ===================
-
sqlserver进程死锁关闭的方法
1.首先我们需要判断是哪个用户锁住了哪张表. --查询被锁表 select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 查询后会返回一个包含spid和tableName列的表. 其中spid是进程名,tableName是表名. 2.了解到了究竟是哪个进程锁了哪张表后,需要通过进程找到锁
-
SqlServer查询和Kill进程死锁的语句
查询死锁进程语句 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type='OBJECT' 杀死死锁进程语句 kill spid 下面再给大家分享一段关于sqlserver检测死锁;杀死锁和进程;查看锁信息 --检测死锁 --如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?
-
SQL Server触发器及触发器中的事务学习
如果你有对触发器和事务的概念,有些了解,这篇文章,对你来说会是很简单,或能让你更进一步的了解触发器里面的一些故事,和触发器中事务个故事.在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器 & DDL触发器)和After触发器 & Instead Of 触发器的应用不同,开始说起它们,然后是说与事务有关的故事.如果,你有什么建议和意见,都可以通过文章后面的回复与我沟通,或者通过E-Mail方式,与 我交流:我的Email地址是:glal@163.co
-
sql server 2000阻塞和死锁问题的查看与解决方法
数据库发生阻塞和死锁的现象: 一.数据库阻塞的现象:第一个连接占有资源没有释放,而第二个连接需要获取这个资源.如果第一个连接没有提交或者回滚,第二个连接会一直等待下去,直到第一个连接释放该资源为止.对于阻塞,数据库无法处理,所以对数据库操作要及时地提交或者回滚.二.数据库死锁的现象:第一个连接占有资源没有释放,准备获取第二个连接所占用的资源,而第二个连接占有资源没有释放,准备获取第一个连接所占用的资源.这种互相占有对方需要获取的资源的现象叫做死锁.对于死锁,数据库处理方法:牺牲一个连接,保证另外
-
SqlServer表死锁的解决方法分享
其实不光是上面描述的情况会锁住表,还有很多种场景会使表放生死锁,解锁其实很简单,下面用一个示例来讲解: 1 首先创建一个测试用的表: 复制代码 代码如下: CREATE TABLE Test ( TID INT IDENTITY(1,1) ) 2 执行下面的SQL语句将此表锁住: 复制代码 代码如下: SELECT * FROM Test WITH (TABLOCKX) 3 通过下面的语句可以查看当前库中有哪些表是发生死锁的: 复制代码 代码如下: SELECT request_session_
-
SQL Server学习笔记之事务、锁定、阻塞、死锁用法详解
本文实例讲述了SQL Server学习笔记之事务.锁定.阻塞.死锁用法.分享给大家供大家参考,具体如下: 1.事务 隐式事务 /*================================================================== 当以create,drop, fetch,open, revoke,grand, alter table,select,insert,delete,update,truncate table 语句首先执行的时候,SQL Server会话
-
利用sys.sysprocesses检查SqlServer的阻塞和死锁
MSDN:包含正在 SQL Server 实例上运行的进程的相关信息.这些进程可以是客户端进程或系统进程. 视图中主要的字段: 1. Spid:Sql Servr 会话ID 2. Kpid:Windows 线程ID 3. Blocked:正在阻塞求情的会话 ID.如果此列为 Null,则标识请求未被阻塞 4. Waittype:当前连接的等待资源编号,标示是否等待资源,0 或 Null表示不需要等待任何资源 5. Waittime:当前等待时间,单位为毫秒,0 表示没有等待 6. DBID:当前
随机推荐
- 常用VBS代码 值得一看
- 简单学习vue指令directive
- 设计模式之模版方法模式_动力节点Java学院整理
- iOS中实现图片自适应拉伸效果的方法
- 详解Java中的封装、继承、多态
- 利用委托把用户控件的值显示于网页案例应用
- python 队列详解及实例代码
- Struts1之url截取_动力节点Java学院整理
- SWT(JFace)体验之StackLayout布局
- Shell日志分析常用命令和例子
- VBScript开发自动化测试脚本的方法分析
- 在shell或者perl中改变字体或背景的颜色
- VC++植物大战僵尸中文版修改器实现代码
- dos批量替换当前目录后缀名的实现代码
- JavaScript操作cookie类实例
- 基于Java并发容器ConcurrentHashMap#put方法解析
- java编写简单的E-mail发送端程序
- Android 1.5 1.6 2.0 2.1 2.2 的区别详解
- 微信小程序模板和模块化用法实例分析
- python实现感知器
其他
- 如何修改vant输入框的颜色
- python 找波峰
- pyton 读取lmdb utf-8 解析失败
- mybatis collection 嵌套resultmap
- vue请求后端数据非异步
- vue中用v-for循环出来的数据列表,如何单独控制隐藏显示
- scipy 四元数转欧拉角函数
- springcloud安全认证框架的原理
- ssm vue前后端分离时mvc视图解析器怎么写
- 无表头csv文件如何转为dataframe
- 数组里边有没有一个元素并返回下标
- 克隆接口 实现深拷贝
- vue3 el-table自适应高度
- springboot 2.3.4 对应 freemarker
- python动态显示 程序还剩多少时间运行
- java实现redis计数器
- vue cors跨域下载插件
- idea 注释模板的插件
- mac 安装cnpm 配置全局路径
- ubuntu设置shell脚本开机自启动