MyException - 我的异常网
当前位置:我的异常网» Sql Server » 不知道这个有关问题该不该再发一次 还是触发器的

不知道这个有关问题该不该再发一次 还是触发器的有关问题

www.MyException.Cn  网友分享于:2015-08-26  浏览:12次
不知道这个问题该不该再发一次 还是触发器的问题
连接服务器的名称:TESTSrv
exec sp_addlinkedserver TESTSrv,'ms','SQLOLEDB','192.168.1.38'
exec sp_addlinkedsrvlogin TESTSrv,'false',NULL,'sa','123'


然后,我通过查询分析器,在数据库A上增加一条记录,但出现以下错误:
--------------------
服务器: 消息 7391,级别 16,状态 1,过程 InRole,行 16
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

------------------------
触发器脚本:
CREATE TRIGGER [InData] ON [dbo].[myHIT]  
AFTER INSERT
AS

BEGIN
--set xact_abort on
---BEGIN DISTRIBUTED TRANSACTION
--以上两句,加不加,一样的现象

DECLARE @rid INT  
DECLARE @rname VARCHAR(50)

SET @rid=-1
SET @rname=''

BEGIN TRAN
SELECT @rid = inserted.tID , @rname = inserted.tName FROM inserted  

INSERT INTO TESTSrv.myDB.dbo.t1(id,name) SELECT inserted.tID , inserted.tName FROM inserted  
COMMIT TRAN
END


//***********************************************************//

//**************************************************************//

重点说明下,这个问题有出多一年了

至今没看到实际能解决的办法

网上的办法 都被搜腻味了

不是你转我转

全是一个样

但方法,根本就不能实际的解决问题


//**************************************//
另外,在这里把网上抄来炒去的,却没有解决问题的所谓的方案在这里 晒下

如下:



SQL Server之分布式事务

(一)概念:

分布式事务是涉及来自两个或多个源的资源的事务。Microsoft® SQL Server™ 2000支持分布式事务,使用户得以创建事务来更新多个SQL Server数据库和其它数据源。

分布式事务包括: 

·资源管理器 

控制分布式事务所涉及的每个资源的软件称为资源管理器。分布式事务由各个资源管理器内的本地事务组成。每个资源管理器必须能够与分布式事务内的所有其它资源管理器相协调,以提交或回滚自己的本地事务。SQL Server 可以作为分布式事务内的资源管理器工作,并遵从用于分布式事务处理的 X/Open XA 规范。 

·事务管理器 

提交或回滚分布式事务由称为事务管理器的软件组件控制。事务管理器与每个资源管理器相协调,确保一起提交或回滚所有组成分布式事务的本地事务。Microsoft分布式事务处理协调器 (MS DTC) 服务如事务管理器一样工作。MS DTC 遵从用于分布式事务处理的 X/Open XA 规范。 

·两阶段提交 (2PC) 

需要进行特殊的提交处理,以防止在管理跨越多个资源管理器的事务时出现问题。当刷新日志缓冲区使其可用时,提交大事务可能需要相对较长的时间。提交进程本身还可能遇到错误,需要强行回滚。如果事务管理器只是请求每个资源管理器提交,则可能从一些资源管理器返回成功状态,然后从某个资源管理器得到错误信息。这会导致冲突,因为所有分布式事务都应回滚,而部分事务已提交。两阶段提交通过将提交分成两相可以解决此问题:

·准备

事务管理器给每个资源管理器发送一个准备提交的请求。然后,每个资源管理器执行完成提交进程所需的所有大量占用资源的操作,如刷新所有日志缓冲区。资源管理器只保留维护事务完整性所需的最少的锁,然后给事务管理器返回成功状态。

·提交 

如果所有资源管理对发给它们的准备请求返回成功状态,事务管理器将给每个资源管理器发送提交命令。然后,每个资源管理器快速将事务记录为已完成,并释放上次控制的资源。如果有任何资源管理器对准备请求返回错误信息,事务管理器将给每个资源管理器发送回滚命令。 

有几种方法可以使应用程序在分布式事务内包括 SQL Server 2000: 

·如果应用程序有本地事务并且发出分布式查询,本地事务将升级到分布式事务。 

·发出 BEGIN DISTRIBUTED TRANSACTION 语句。 

·如果应用程序有本地事务并且将 REMOTE_PROC_TRANSACTIONS 选项设置为 ON,则调用远程存储过程将使本地事务升级到分布式事务。 

·使用用于 SQL Server 的 OLE DB 提供程序或 SQL Server ODBC 驱动程序的应用程序,可以使用 OLE DB 方法或 ODBC 函数让 SQL Server 连接联接由应用程序启动的分布式事务。

(二)案例

(2.1)問題描述

在执行分布式事务时,在sql server 2005下收到如下错误:

消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行

无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。

在sql server 2000下收到如下错误:

该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。

[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

(2.2)解決方案

(2.2.1)双方启动MSDTC服务

MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

(2.2.2) 打开双方135端口

MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。使用“telnet IP 135 ”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放。

(2.2.3)保证链接服务器中语句没有访问发起事务服务器的操作

  在发起事务的服务器执行链接服务器上的查询、视图或存储过程中含有访问发起事务服务器的操作,这样的操作叫做环回(loopback),是不被支持的,所以要保证在链接服务器中不存在此类操作。

文章评论

程序员都该阅读的书
程序员都该阅读的书
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员必看的十大电影
程序员必看的十大电影
漫画:程序员的工作
漫画:程序员的工作
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
 程序员的样子
程序员的样子
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
每天工作4小时的程序员
每天工作4小时的程序员
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
老程序员的下场
老程序员的下场
10个调试和排错的小建议
10个调试和排错的小建议
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员和编码员之间的区别
程序员和编码员之间的区别
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
我是如何打败拖延症的
我是如何打败拖延症的
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
我的丈夫是个程序员
我的丈夫是个程序员
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
鲜为人知的编程真相
鲜为人知的编程真相
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
如何成为一名黑客
如何成为一名黑客
一个程序员的时间管理
一个程序员的时间管理
中美印日四国程序员比较
中美印日四国程序员比较
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
旅行,写作,编程
旅行,写作,编程
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员的鄙视链
程序员的鄙视链
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
代码女神横空出世
代码女神横空出世
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
为什么程序员都是夜猫子
为什么程序员都是夜猫子
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有