日期:2014-05-17  浏览次数:20497 次

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

亲~~~有木有人能解决这个问题,3q~~~~~~~~~╭(╯3╰)╮

------最佳解决方案--------------------
启动两台服务器的MSDTC服务 
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放

------其他解决方案--------------------
在 Transact-SQL 中启动的分布式事务的结构相对比较简单:
  1. Transact-SQL 脚本或应用程序连接执行启动分布式事务的 Transact-SQL 语句。
  2. 执行该语句的 Microsoft® SQL Server? 成为事务中的主控服务器。
  3. 然后脚本或应用程序对链接的服务器执行分布式查询,或对远程服务器执行远程存储过程。
  4. 当执行了分布式查询或远程过程调用后,主控服务器将自动调用 MS DTC 以便登记分布式事务中链接的服务器和远程服务器。
  5. 当脚本或应用程序发出 COMMIT 或 ROLLBACK 语句时,主控 SQL Server 将调用 MS DTC 管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。
------其他解决方案--------------------
引用:
SQL code
启动两台服务器的MSDTC服务 
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果……

=================================
已经配置过了。。。。。
------其他解决方案--------------------
我申明下,双方的服务器的配置都启动了。。。。。。问题是不是一个网段。。。。会报错。。。。要解决这个问题,希望大家别回答错了,浪费您的时间回答我的问题,谢谢~~~~~~~(>_<)~~~~ 亲,偶就等你们了。。。我已经无能为力了,呜呜呜~~~
------其他解决方案--------------------
我上次也碰到了,试了主流的方式
都没有解决问题
最后我一狠心,把事务给去了,先解决问题再说,MD
引用:
我申明下,双方的服务器的配置都启动了。。。。。。问题是不是一个网段。。。。会报错。。。。要解决这个问题,希望大家别回答错了,浪费您的时间回答我的问题,谢谢~~~~~~~(>_<)~~~~ 亲,偶就等你们了。。。我已经无能为力了,呜呜呜~~~

------其他解决方案--------------------
引用:
我上次也碰到了,试了主流的方式
都没有解决问题
最后我一狠心,把事务给去了,先解决问题再说,MD引用:

------------------------
~~~~(>_<)~~~~ 事务是我们这个问题的必要条件,必须保证完整性,如果不能,就要从新用其他方法,但是效率,我滴神~~~~~~
------其他解决方案--------------------
是不同网段的问题,同一网段不会报错,现在我也遇到这个问题,IP要怎么设置呢?