MSDTC 分布式事务处理记录

        公司有多台数据库服务器,因需要要对各数据库服务器之间进行访问,在现有的服务器a,建立一个链接服务器b,进行简单的数据访问.

      

        select *from b.master.dbo.sysobjects  --查询OK

 

接着在此查询中增加事务:

 

begin distributed tran

select *from b.master.dbo.sysobjects  --查询OK

commit tran

 

提示:  服务器:   消息   7391,级别   16,状态   1,行   5  
  该操作未能执行,因为   OLE   DB   提供程序   'SQLOLEDB'   无法启动分布式事务。  
  [OLE/DB   provider   returned   message:   不能在指定的事务处理器中获得新事务。]  

 

 

在网络上查询了半天,最后发现是MSDTC的问题,具体解决方法:

 

1、控制面板--管理工具--展开"组件服务"树,然后展开"我的电脑"。

 

2、右键单击"我的电脑",然后选择"属性",---在 MSDTC 选项卡中‘安全配置’按钮,确保选中了下列选项:网络 DTC 访问。网络事务 XA 事务 另外,"DTC 登录帐户"一定要设置为"NT Authority/NetworkService"。单击"确定",重新启动MSDTC。

 

再次进行运行以上查询,查询OK,无错误。

 

在a 服务器某表中TEST,建立触发器,触发器的执行内容是:将表TEST中的字段ID插入到另外服务器B的一个表中,但提示为:

服务器: 消息 7395,级别 16,状态 2,过程 tr_test,行 14
无法为 OLE DB 提供程序 'SQLOLEDB' 启动嵌套事务。之所以需要嵌套事务是因为 XACT_ABORT 选项已设置为 OFF。
[OLE/DB provider returned message: 无法在此会话中启动更多的事务。]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionLocal::StartTransaction returned 0x8004d013:  ISOLEVEL=4096]。

 

发现是 XACT_ABORT 的问题,在触发器中增加以下语句 set  XACT_ABORT  on

 

具体是触发器代码是:
alter trigger tr_test
on TEST
for insert
AS
begin
set XACT_ABORT on
  insert into WF.WorkflowEX.[dbo].test
  select id from INSERTED

set XACT_ABORT off
end

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值