由于是两台服务器,需要对数据进行一些对接问题,目前我用的远程连接是sp_addlinkedsrvlogin,但其中不能进行事务处理。但有可能处理失败,或路途网络掉线,这样有可能这边服务器处理到了,那边没有,有没有更好的方法进行实现,谢谢。

解决方案 »

  1.   

    如果两个服务器会因为路途网络掉线的话,当然加事务时最好的。
         公司有多台数据库服务器,因需要要对各数据库服务器之间进行访问,在现有的服务器a,建立一个链接服务器b,进行简单的数据访问.               select *from b.master.dbo.sysobjects  --查询OK 接着在此查询中增加事务: begin distributed transelect *from b.master.dbo.sysobjects  --查询OKcommit 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 INSERTEDset XACT_ABORT off 
    end 
     
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/duanzhi1984/archive/2010/01/04/5129097.aspx