链接服务器:"没有事务处于活动状态。"并且"无法开始分布式交易"

时间:2015-03-12 18:51:34

标签: sql-server transactions ssms linked-server msdtc

我的本​​地计算机上有一个CRM软件。在该软件的SQL DB中,我添加了一个链接服务器(我们的测试网站与我们的测试数据库:Windows Small Business Server 2011)。 链接服务器设置为

RPC => True
RPC Out => True
Enable Promotion of Distributed Transaction => True

我创建了一个触发器,以便在通过CRM软件更新公司时,它会启动一个存储过程,例如:

proc [dbo].[Proc_UpdateInstitutionWeb]
@Company_ID nvarchar(50)

as

DECLARE @id int = 0;

BEGIN TRY
    SET @id = CONVERT(int, @Company_ID)
END TRY
BEGIN CATCH
    ...
END CATCH

update [myserver].[mydatabase].[dbo].[company] 
set founded = 2000
where company.id= @id

当我在CRM中进行更改时,这不起作用。所以我在CRM SQL DB中的公司表上尝试了一个简单的更新查询,但它引发了以下错误:

OLE DB provider "SQLNCLI10" for linked server "myserver" returned message "No transaction is active.". Msg 7391, Level 16, State 2, Procedure Proc_UpdateInstitutionWeb, Line 34 The operation could not be performed because OLE DB provider "SQLNCLI10" for linked server "myserver" was unable to begin a distributed transaction.

这是我尝试做的事情:

在我的计算机和测试服务器上:

  • 在管理工具中 - >服务 - >分布式事务协调器: 启动了服务
  • 在管理工具中 - >组件服务 - > 计算机 - >我的电脑 - >分布式事务协调器 - > 本地DTC - >右键单击 - >安全选项卡 - >检查网络DTC 访问和允许远程客户端并允许入站和出站。
  • 最后我重新启动了测试服务器

这些都没有解决问题。我该怎么办?

谢谢

1 个答案:

答案 0 :(得分:2)

经过多天失去我的头发,这对我有用,万一有人需要它。

首先我禁用了自动生成6to4地址。

 1. Open Command
 2. Type the command `netsh interface 6to4 set state disabled`

然后我限制了两台机器上的DCOM端口范围

 1. Start -> Run -> Type DCOMCNFG
 2. Go to the properties of the My Computer node under the Computers folder underneath Component Services. 
 3. Under the My Computer Properties look under the Default Protocols tab. 
 4. Over there make sure that Connection-oriented TCP/IP is selected and then click on Properties. 
 5. No range was listed. I added one. Example 5000-5100

我认为Component servicesServices中有关DTC的所有先前工作也需要这样做。

我最终得到了使用DTCPing.exe和以下参考资料的解决方案: