【2017年整理】关于触发器使用链接服务器的问题处理

上传人:豆浆 文档编号:1023627 上传时间:2017-05-26 格式:DOC 页数:3 大小:48.50KB
返回 下载 相关 举报
【2017年整理】关于触发器使用链接服务器的问题处理_第1页
第1页 / 共3页
【2017年整理】关于触发器使用链接服务器的问题处理_第2页
第2页 / 共3页
【2017年整理】关于触发器使用链接服务器的问题处理_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《【2017年整理】关于触发器使用链接服务器的问题处理》由会员分享,可在线阅读,更多相关《【2017年整理】关于触发器使用链接服务器的问题处理(3页珍藏版)》请在金锄头文库上搜索。

1、关于触发器使用链接服务器的问题处理上一篇 / 下一篇 2009-10-12 10:59:41 / 个人分类:实践 查看( 273 ) / 评论( 0 ) / 评分( 0 / 0 ) 一、 问题现象:在一个 test 表上创建触发器如下:ALTERTRIGGERTR_test_ION dbo.testAFTERINSERT,UPDATEASBEGINIF EXISTS(SELECT*FROMmyTest.test.DBO.testWHEREMM_SNUMB=RTRIM(MM_SNUMB)BEGINDELETEFROMmyTest.test.DBO.testWHEREMM_SNUMB=RTRIM(

2、MM_SNUMB)ENDINSERTINTOmyTest.test.DBO.test SELECT*FROMINSERTEDEND当对表 test 进行 UPDATE 操作时出现如下错误:OLE/DB provider returned message:新事务不能登记到指定的事务处理器中。OLE DB error trace OLE/DB Provider SQLOLEDB ITransactionJoin:JoinTransaction returned 0x8004d00a.消息 7391,级别 16,状态 1,过程 TR_test_I,第 26 行The operation could

3、not be performed because the OLE DB provider SQLOLEDB was unable to begin a distributed transaction.二、 解决方案根据网上查的资料进行了如下操作:1. 双方启动 MSDTC 服务MSDTC 服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动 MSDTC(Distributed Transaction Coordinator)服务。2. 在事务开始前加入 set XACT_ABORT ON 语句对于大多数 OLE DB 提供程序(包括 SQL Server),必须将

4、隐式或显示事务中的数据修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌套事务时。3. MSDTC 设置打开“管理工具组件服务”,以此打开“组件服务计算机”,在“我的电脑”上点击右键。在 MSDTC 选项卡中,点击“安全配置”按钮。在安全配置窗口中做如下设置:1) 选中“网络 DTC 访问”2) 在事务管理通讯中设置时,事务发起服务器选“允许出站“,事务处理服务器选”允许入站”,都选择”不要求进行验证”3) 选中启用 XA 事务4) 保证 DTC 登陆账户为:NT AuthorityNetworkService4. 确定后自动重启 MSDTC 服务5.

5、重新执行对 test 表的 UPDATE 操作,执行成功。三、 进一步实验上面的方法是通过“SQLOLEDB“,创建链接服务器来进行的。之后,我有尝试使用 ODBC 创建链接服务器进行测试时也是经过了一番波折。1. 创建链接服务器:EXEC sp_addlinkedservermytest,MSDASQL,testGOEXECsp_addlinkedsrvlogin myte,false,sa,saGO2. 建立用户 DSN3. 执行对 test 表的 UPDATE 操作时,产生如下错误:OLE/DB provider returned message: MicrosoftODBC 驱动程序管

6、理器 未发现数据源名称并且未指定默认驱动程序OLE DB error trace OLE/DB Provider MSDASQL IDBInitialize:Initialize returned 0x80004005: .消息 7399,级别 16,状态 1,过程 TR_MOLD_MASTER_I,第 26 行OLE DB provider MSDASQL reported an error. 4. 经过多次调整链接参数后仍无法解决,无奈之下只好删除该 DSN,创建了一个与之同样设置的系统 DSN,进行测试时,经过一个较为漫长的等待后竟然成功了(真是太让人惊讶了)注:与用户 DSN 不同的是

7、系统 DSN 允许所有登录服务器的用户使用。四、 总结:经过一番折腾,触发器终于如愿正常使用了。通过比较网上针对此类问题的其它说明,我个人认为其中的部分内容并非引起该问题的原因,在设置时是可有可无的。1.开始时填写的 BEGIN DISTRIBUTED TRANSACTION、COMMIT TRANS2.MSDTC 设置时的客户端和远程访问,事务管理通讯中的允许入站或出站(虽然自己没有尝试了解进一步的原因,但个人认为不了解的东西使用的越少越好)3.链接服务器远侧域名解析,135 端口等,在 MSDTC 服务启用的情况下,此类问题都可以不去考虑但是,其中的有些细节是必须注意的,如:SET ON

8、改为 OFF 时,会产生如下错误:OLE/DB provider returned message:无法在此会话中启动更多的事务。OLE DB error trace OLE/DB Provider SQLOLEDB ITransactionLocal:StartTransaction returned 0x8004d013: ISOLEVEL=4096.消息 7395,级别 16,状态 2,过程 TR_MOLD_MASTER_I,第 28 行Unable to start a nested transaction for OLE DB provider SQLOLEDB. A nested

9、transaction was required because the XACT_ABORT option was set to OFF.缺少该语句时,也会产生同样的错误。不管如何,上面的内容只是自己在现有的环境下测试得出的结果,并不保证其它的环境同样适用。希望能给大家帮助。最后添加一个微软的 DTC 测试工具 http:/ 表:ALTER trigger pr_changeon Productsinstead of update,deleteas begin set XACT_ABORT ONdelete from FIS_3G_WEB.fis_3g_web.dbo.Products wh

10、ere ProductID in (select ProductID from deleted)insert into FIS_3G_WEB.fis_3g_web.dbo.Products(ProductID,ProductTypeID,ProductSubTypeID,ProductName,CreateTime,FinishTime,ProductStatus,PlanID,Remark,ProductDataSN,ProductSN,bPack,工单单别,工单单号,ProcessRouteID,bHandover,StorageStatus,Amout,Dealed,Dept,Flag)

11、 select ProductID,ProductTypeID,ProductSubTypeID,ProductName,CreateTime,FinishTime,ProductStatus,PlanID,Remark,ProductDataSN,ProductSN,bPack,工单单别,工单单号,ProcessRouteID,bHandover,StorageStatus,Amout,Dealed,Dept,Flag from inserted-make change in fis_3g_testdelete from fis_3g_z8.dbo.Products where Produc

12、tID in (select ProductID from deleted)SET IDENTITY_INSERT fis_3g_z8.dbo.Products ONinsert into fis_3g_z8.dbo.Products(ProductID,ProductTypeID,ProductSubTypeID,ProductName,CreateTime,FinishTime,ProductStatus,PlanID,Remark,ProductDataSN,ProductSN,bPack,工单单别,工单单号,ProcessRouteID,bHandover,StorageStatus,

13、Amout,Dealed,Dept,Flag) select ProductID,ProductTypeID,ProductSubTypeID,ProductName,CreateTime,FinishTime,ProductStatus,PlanID,Remark,ProductDataSN,ProductSN,bPack,工单单别,工单单号,ProcessRouteID,bHandover,StorageStatus,Amout,Dealed,Dept,Flag from insertedSET IDENTITY_INSERT fis_3g_z8.dbo.Products OFFset XACT_ABORT OFFend

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号