无法开始分布式事务

我试图对链接的服务器运行SQL,但我得到的错误。

BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.". Msg 7391, Level 16, State 2, Line 3 The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction. 

提供者返回了两个错误:

错误#1:

 Number: $80040E14 Source: Microsoft OLE DB Provider for SQL Server Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.". HelpFile: HelpContext: $00000000 SQLState: 01000 NativeError: 7412 

错误#2

 Number: $80040E14 Source: Microsoft OLE DB Provider for SQL Server Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction. HelpFile: HelpContext: $00000000 SQLState: 42000 NativeError: 7391 

我如何让微软在function上比安全更受青睐?

或者,至less,我怎样才能让两个SQL服务器彼此交谈?

相关问题

  • 操作无法执行,因为OLE DB提供程序“SQLNCLI10”… (*链接的服务器名称是(null)
  • 分布式事务错误? ( 使用Oracle提供者
  • 无法使用NHibernate进入分布式事务 ( 使用Hibernate
  • 在SQL Server 2008 R2中使用分布式事务时出错 ( SQL Server 2008 R2,无人接听
  • 分布式事务错误只能通过代码 ( 由连接池引起
  • 执行链接服务器中的分布式事务协调器时出错 ( SQL Server 2008,无答案
  • 分布式事务错误? ( 没有接受的答案,只有答案没有帮助
  • 如何使用链接服务器withint事务插入到远程表? ( 接受的答案没有解决

我所做的是无关紧要的,但是我会把它贴出来。

  1. 确保Distributed Transaction Coordinator服务在两个机器上运行:

    在这里输入图像说明

    在这里输入图像说明

  2. 禁用两台机器上的所有MSDTC安全性:

    在这里输入图像说明

    在这里输入图像说明

  3. 打开链接服务器上的随机选项:

在这里输入图像说明

  1. 诅咒和发誓。

  2. 砸碎的东西。

  3. 检查一个SELECT可以使用链接的服务器

      SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users .... (763 row(s) affected) 
  4. 检查客户端服务器是否可以ping远程服务器 :

      C:\Documents and Settings\avatar>ping asicmstest.contoso.com Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data: Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.40: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms 
  5. 检查远程服务器是否可以通过名称返回到启动服务器:

      C:\Documents and Settings\avatar>ping asitestserver.contoso.com Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data: Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms 
  6. 检查@@SERVERNAME与两台服务器上的服务器名称匹配 :

      SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ------------- ------------- ASITESTSERVER ASITESTSERVER 

      SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ---------- ---------- ASIGROBTEST ASIGROBTEST 
  7. 尖叫

  8. 在发出我的查询之前发出SET XACT_ABORT ON

     SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions 
  9. 授予Everyone Full Control

     HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer 

    在两个服务器上。

发现它,远程服务器上的MSDTC是本地服务器的克隆。

从Windows应用程序事件日志:

事件types:错误
事件来源:MSDTC
事件类别:CM
事件ID:4101
date:2011年9月19日
时间:1:32:59 PM
用户:N / A
计算机:ASITESTSERVER
描述:

本地MS DTC检测到ASICMSTEST上的MS DTC具有与本地MS DTC相同的唯一标识。 这意味着两个MS DTC将无法相互通信。 如果使用不受支持的克隆工具克隆了其中一个系统,则通常会出现此问题。 MS DTC要求使用受支持的克隆工具(如SYSPREP)克隆系统。 运行“msdtc -uninstall”然后在命令提示符下运行“msdtc -install”将会解决这个问题。 注意:运行“msdtc -uninstall”会导致系统丢失所有的MS DTCconfiguration信息。

有关更多信息,请参阅http://go.microsoft.com/fwlink/events.asp上的帮助和支持中心。;

运行

 msdtc -uninstall msdtc -install 

然后停止并重新启动SQL Server服务修复它。

好吧,所以服务启动,他们之间有一个以太网path,名称parsing工作,链接的服务器工作,并禁用事务身份validation。

我的直觉说防火墙的问题,但有几件事情想起来…

  1. 机器在同一个域中吗? (是的,不应该与残疾人authentication)
  2. 防火墙是否在机器上运行? 对于防火墙,DTC可能会带来一些痛苦,因为它使用了一系列的端口,请参阅http://support.microsoft.com/kb/306843目前,为了识别问题,我将禁用防火墙;
  3. DTC ping说什么? http://www.microsoft.com/download/en/details.aspx?id=2868
  4. 什么帐户是SQL服务运行?

如果服务器是群集的并且存在群集DTC,则必须禁用群集DTC而不是本地DTC的安全性。

如果您的目标服务器位于另一个云或数据中心,则需要在源服务器中添加主机条目MSDTC服务(目标服务器)

如果问题没有解决,尝试这一个,启用MSDTC设置。

我最后一次冒险与MSDTC和这个错误今天原来是一个DNS问题。 你在正确的轨道上询问机器是否在同一个域上,EBarr。 这个问题太棒了,顺便说一句!

我的情况:我需要一个子域中的服务器,以便能够通过防火墙对父域中的服务器运行分布式事务。 我多年来一直使用链接服务器,所以我在SQL中为链接服务器和MSDTC提供了所有常用的设置,Ian在上面logging得非常好。 我设置了一系列TCP端口(5000-5200)的MSDTC在两台服务器上使用,并在端口1433和5000-5200之间的盒子之间安排了一个防火墙孔。 这应该是有效的。 链接服务器testing好了,我可以通过链接服务器很好地查询远程SQL服务器,但我不能让它允许分布式事务。 我甚至可以从DEV服务器上看到QA服务器上的连接,但有些事情并没有使这次旅程回来。

我可以使用FQDN像PING DEVSQL.dev.domain.com从QA PING DEV服务器

我不能只用机器名PING DEVSQL PING DEV服务器

DEVSQL服务器应该是两个域的成员,但名称不能在父域的DNS中parsing…父域中DEVSQL的计算机帐户发生了一些情况。 一旦我们将DEVSQL添加到父域的DNS中,并且从远程QA服务器上运行“PING DEVSQL”,我们就解决了这个问题。

我希望这有帮助!

除了安全设置之外,我还必须在两台服务器上打开一些端口才能使事务运行。 我不得不打开59640港口,但根据以下build议,港口135必须打开。 http://support.microsoft.com/kb/839279