Win2003+SQL 2005环境下:在服务器A上(sqlserver2005 sp1,32位)建立了一个链接服务器erp指向服务器B(sqlserver2005 sp2,64位)
运行:select count(*) from erp.ct_gc.v.xsjl 没有任何问题执行下列事务语句set xact_abort on
begin transelect sktno,jlbh into #reftbl_gc from ct_gc.dbo.xsjl insert into erp.ct_gc.v.xsjl
select x.* from 
ct_gc.dbo.xsjl x,
#reftbl_gc r 
where x.sktno=r.sktno and x.jlbh=r.jlbhcommit tran
go却报错:(7823 行受影响)
OLE DB provider "sqlncli" for linked server "erp" returned message "此事务已明地或暗地被确认或终止".
消息 7391,级别 16,状态 2,第 7 行
The operation could not be performed because OLE DB provider "sqlncli" for linked server "erp" was unable to begin a distributed transaction.请教,如何解决这个问题?--------------------------
二服务器都是Win2003系统,都做了如下设置:
打开“管理工具――组件服务”,以此打开“组件服务――计算机”,在“我的电脑”上点击右键。在MSDTC选项卡中,点击“安全配置”按钮。
在安全配置窗口中做如下设置:
选中“网络DTC访问”
在客户端管理中选中“允许远程客户端”“允许远程管理”
在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证”
保证DTC登陆账户为:NT   Authority\NetworkService

解决方案 »

  1.   

    检查下述msdtc的主要条件: 
    1.   网络通,   sql   server   之间能够互相连接 
    2.   分布式事务要求的   135   端口没有被防火墙限制   (可以用   DTCPing.exe   这个工具来检查) 
    3.   服务器之间能够做相互的身份验证.   如果无法保证,   建议取消身份验证(前面步骤三中有个地方设置如何进行身份验证) 
    4.   MSDTC   服务是开启的
      

  2.   

    二服务器的135端口都没有关闭,没有开软件防火墙erp 的地址解析已经放置到了 hosts 中
    telnet erp 135 正常
      

  3.   

    1. 互相能ping通
    2. 135端口都是打开的
    3. 哪三个步骤?
    4. msdtc 都是打开的
      

  4.   

     DTCPing.exe  测试了吗?
      

  5.   

    set xact_abort on ;
    BEGIN DISTRIBUTED tran;--分佈式事務
    ...
    commit tran
      

  6.   

    前面我提的问题,对数据的操作应该算:推操作现在我在服务器B上建立了一个链接服务器linkA  指向A
    然后连接到B服务器,把A上的数据拉过来,执行:拉操作。 立刻成功了!很是郁闷,配置都没有变动,为什么拉数据能成功,推数据却失败了,以前使用sqlserver2000时,这个问题好像没碰到过还请邹老大和各位高手释疑!
      

  7.   

    insert into erp.ct_gc.v.xsjl
    select x.* from
    ct_gc.dbo.xsjl x,
    #reftbl_gc r
    where x.sktno=r.sktno and x.jlbh=r.jlbh >>>
    这个需要启动分布式事务,因为是链接服务器进行的插入操作,本机需要跟ERP的分布式协调器交互, 确保插入成功。INSERT INTO xsjl
    select * from A.ct_gc.v.xsjl
    >>这个所谓的"拉"操作,不沙及对链接服务器的更新操作,所以不用启动分布式事务, 操作会成功。
      

  8.   

    在服务器A上用DTCping测试
    Invoking RPC method on erp
    Problem:fail to invoke remote RPC method
    Error(0x6D9) at dtcping.cpp @303
    -->RPC pinging exception
    -->1753(终结点映射器中没有更多的终结点可用。)
    RPC test failed
    到底该如何解决啊?
      

  9.   


    新的发现,好像与上面的讲法不符合连接A服务器后,如果不用事务的操作模式,只是简单的执行:insert into erp.ct_gc.v.xsjl 
    select * from ct_gc.dbo.xsjl 一切正常!注意:这仍然是推操作。
    为什么做成事务模式就不成功?请各位高手释疑,想明明白白的搞清这个问题