分布式事务--两台服务器是不在同一个网段
我做了一个存储过程,把本地服务器的数据倒到外网的服务器上,但是为了保证完整性,必须使用分布式事务,但是这两台服务器是不在同一个网段,会报错
-----------
链接服务器"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 管理两阶段提交过程,或者通知链接的服务器和远程服务器回滚其事务。