我做了一个存储过程,把本地服务器的数据倒到外网的服务器上,但是为了保证完整性,必须使用分布式事务,但是这两台服务器是不在同一个网段,会报错
-----------
链接服务器"srv_lnk"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "没有活动事务。"。
消息 7391,级别 16,状态 2,过程 proc_copybookdata,第 25 行
无法执行该操作,因为链接服务器 "srv_lnk" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。
------------亲~~~有木有人能解决这个问题,3q~~~~~~~~~╭(╯3╰)╮

解决方案 »

  1.   

    启动两台服务器的MSDTC服务 
    MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。打开双方的135端口
    MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
    使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
      

  2.   

    在 Transact-SQL 中启动的分布式事务的结构相对比较简单:
      1. Transact-SQL 脚本或应用程序连接执行启动分布式事务的 Transact-SQL 语句。
      2. 执行该语句的 Microsoft® SQL Server™ 成为事务中的主控服务器。
      3. 然后脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。
      4. 当执行了分布式查询或远程过程调用后,主控服务器将自动调用 MS DTC 以便登记分布式事务中链接的服务器和远程服务器。
      5. 当脚本或应用程序发出 COMMIT 或 ROLLBACK 语句时,主控 SQL Server 将调用 MS DTC 管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。
      

  3.   

    我申明下,双方的服务器的配置都启动了问题是不是一个网段。会报错。要解决这个问题,希望大家别回答错了,浪费您的时间回答我的问题,谢谢~~~~~~~(>_<)~~~~ 亲,偶就等你们了我已经无能为力了,呜呜呜~~~
      

  4.   

    ------------------------
    ~~~~(>_<)~~~~ 事务是我们这个问题的必要条件,必须保证完整性,如果不能,就要从新用其他方法,但是效率,我滴神~~~~~~