B\C上的msdtc全部都启动了 且b\c上 hosts文件中也加了 A服务器的ip地址
很是郁闷啊

解决方案 »

  1.   


      --启动远程服务器的MSDTC服务   
      --exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output   
        
      --启动本机的MSDTC服务   
      --exec   master..xp_cmdshell   'net   start   msdtc',no_output   
      

  2.   


      --定时同步服务器上的数据   
        
      --例子:   
      --测试环境,SQL   Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test   
      --服务器上的表(查询分析器连接到服务器上创建)   
      create   table   [user](id   int   primary   key,number   varchar(4),name   varchar(10))   
      go   
      --以下在局域网(本机操作)   
      --本机的表,state说明:null   表示新增记录,1   表示修改过的记录,0   表示无变化的记录   
      if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[user]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)   
        drop   table   [user]   
      GO   
      create   table   [user](id   int   identity(1,1),number   varchar(4),name   varchar(10),state   bit)   
      go   
      --创建触发器,维护state字段的值   
      create   trigger   t_state   on   [user]   
      after   update   
      as   
      update   [user]   set   state=1   
      from   [user]   a   join   inserted   b   on   a.id=b.id   
      where   a.state   is   not   null   
      go   
        
      --为了方便同步处理,创建链接服务器到要同步的服务器   
      --这里的远程服务器名为:xz,用户名为:sa,无密码   
      if   exists(select   1   from   master..sysservers   where   srvname='srv_lnk')   
        exec   sp_dropserver   'srv_lnk','droplogins'   
      go   
      exec   sp_addlinkedserver     'srv_lnk','','SQLOLEDB','xz'   
      exec   sp_addlinkedsrvlogin   'srv_lnk','false',null,'sa'   
      go   
        
      --创建同步处理的存储过程   
      if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_synchro]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)   
        drop   procedure   [dbo].[p_synchro]   
      GO   
      create   proc   p_synchro   
      as   
      --set     XACT_ABORT   on   
      --启动远程服务器的MSDTC服务   
      --exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output   
        
      --启动本机的MSDTC服务   
      --exec   master..xp_cmdshell   'net   start   msdtc',no_output   
        
      --进行分布事务处理,如果表用标识列做主键,用下面的方法   
      --BEGIN   DISTRIBUTED   TRANSACTION   
        --同步删除的数据   
        delete   from   srv_lnk.test.dbo.[user]   
          where   id   not   in(select   id   from   [user])   
        
        --同步新增的数据   
        insert   into   srv_lnk.test.dbo.[user]   
        select   id,number,name   from   [user]   where   state   is   null   
          
        --同步修改的数据   
        update   srv_lnk.test.dbo.[user]   set   
          number=b.number,name=b.name   
        from   srv_lnk.test.dbo.[user]   a   
          join   [user]   b   on   a.id=b.id   
        where   b.state=1   
          
        --同步后更新本机的标志   
        update   [user]   set   state=0   where   isnull(state,1)=1   
      --COMMIT   TRAN   
      go   
        
      --创建作业,定时执行数据同步的存储过程   
      if   exists(SELECT   1   from   msdb..sysjobs   where   name='数据处理')   
        EXECUTE   msdb.dbo.sp_delete_job   @job_name='数据处理'   
      exec   msdb..sp_add_job   @job_name='数据处理'   
        
      --创建作业步骤   
      declare   @sql   varchar(800),@dbname   varchar(250)   
      select   @sql='exec   p_synchro'       --数据处理的命令   
        ,@dbname=db_name()       --执行数据处理的数据库名   
        
      exec   msdb..sp_add_jobstep   @job_name='数据处理',   
        @step_name   =   '数据同步',   
        @subsystem   =   'TSQL',   
        @database_name=@dbname,   
              @command   =   @sql,   
        @retry_attempts   =   5,       --重试次数   
        @retry_interval   =   5         --重试间隔   
        
      --创建调度   
      EXEC   msdb..sp_add_jobschedule   @job_name   =   '数据处理',     
        @name   =   '时间安排',   
        @freq_type   =   4,           --每天   
        @freq_interval   =   1,         --每天执行一次   
        @active_start_time   =   00000     --0点执行   
      go   
      

  3.   

    结贴   呵呵原来需要在a上hosts文件中也要加 B\C服务器
    谢谢各位
      

  4.   

    http://expert.csdn.net/Expert/topic/2835/2835706.xml?temp=.1959955
    回复人: j9988(j9988) 一.A.不用事务,关用SELECT 语句.是否可以分布式查询?   B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)   C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.
      
       D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
    http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe二.两台机的MSDTC是否都打开了.三.MSDTC设置是否正确.
    1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
    2.转至"组件服务管理工具"。
    3.浏览至"启动管理工具"。
    4.选择"组件服务"。
     a.展开"组件服务"树,然后展开"我的电脑"。
     b.右键单击"我的电脑",然后选择"属性"。
     C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
    网络管理
    网络事务
        XA 事务
     e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
    5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
      所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
    6.单击"确定"关闭"我的电脑"属性窗口。四.
    MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
    telnet IP 135
    如果是关闭的打开它.五.
    有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
    使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
    Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.
    七.检查你的两台服务器是否在同一个域中.
    如果不在同一个域中,是否建立可信任联接.八.如果是WIN2000,升级到SP4九.升级MDAC到2.6以上,最好是2.8.十.要安装SQL的最新补丁: sp3a
    '全部补丁的位置
    http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766'应该安装的补丁sql 2000 sp3
    http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe