我正在尝试从我的机器( Server 2012)到客户端服务器( server 2008)运行一个分布式事务。
我试着跑:
begin distributed transaction
select * from [172.01.01.01].master.dbo.sysprocesses
Commit Transaction我得到了:
OLE DB provider "SQLNCLI11" for linked server "172.01.01.01" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 2
The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "172.01.01.01" was unable to begin a distributed transaction.我可以在返回数据的情况下对该服务器运行一个SELECT,所以至少我知道服务器可以看到对方,并且链接服务器存在并正在运行
现在,有多个帖子在网上为这个,但我不能让它工作。这就是我迄今尝试过的:


还有什么值得尝试的吗?
UPDATE:将事务从另一个服务器运行到172.01.01.01可以工作。因此,问题不是在目标服务器上,而是在作为源的我的计算机上。
发布于 2016-02-26 15:25:48
如果根据OP的原始帖子在两个SQL服务器上配置了MS分布式事务协调器(MSDTC),您仍然可以得到“没有事务活动”,那么您应该检查每个主机是否可以通过注册在链接服务器中的IP (假设这就是您所使用的)到达。
例如,在最近的设置中,两个SQL服务器可以通过192.168.200.x范围内的网络访问(相同的子网),但每个服务器也通过10.x.x.x范围内的IP间接连接。在一个Server上,它使用的DNS服务器一直将目标SQL服务器解析为10.x.x.xIP(这是防火墙),尽管链接服务器条目在目标服务器的192.168.200.x中使用了IP。
看来,MSDTC使用服务器的主机名,而SQL server则使用链接服务器条目中定义的IP或主机名通过任何链接连接连接,导致在SQL Management Studio中检查目标链接服务器时出现这种明显连接的混乱行为,但无法在目标上执行远程过程。
解决方案是在主机文件(%windir%\system32 32\驱动器\etc\ host )中添加条目,显式地强制每个SQL服务器将另一个解析到192.168.200.x网络上的IP地址。
关于主机1 (IP 192.168.200.15):)
# TARGET SERVER
192.168.200.20 targetserverhostname.and.any.domain.suffix targetserverhostname关于主机2 (IP 192.168.200.20) )
# SOURCE SERVER
192.168.200.15 sourceserverhostname.and.any.domain.suffix sourceserverhostname不要忘记确保MSDTC已经根据上面OP的屏幕截图进行了配置,允许网络访问和(如果需要)无身份验证。
发布于 2018-06-17 08:04:02
将“启用分布式事务的升级”标志设置为false (在链接服务器属性窗口中)解决了类似的问题。
发布于 2017-09-19 06:45:17
我面临着一个类似的问题,我解决了如下问题。在SQL Server中对象资源管理器的树结构中存在一个节点。在这里您会发现Serverobjects→下面有一个分布式服务器的IP地址列表。
右键单击它,选择属性,一个窗口将弹出。在左窗格中选择服务器选项;您将获得属性列表。将标志值false设置为“启用分布式事务的提升”属性。
https://stackoverflow.com/questions/24014718
复制相似问题