无法开始分布式事务
我试图对链接的服务器运行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事务插入到远程表? ( 接受的答案没有解决 )
我所做的是无关紧要的,但是我会把它贴出来。
-
确保
Distributed Transaction Coordinator
服务在两个机器上运行: -
禁用两台机器上的所有MSDTC安全性:
-
打开链接服务器上的随机选项:
-
诅咒和发誓。
-
砸碎的东西。
-
检查一个
SELECT
可以使用链接的服务器 :SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users .... (763 row(s) affected)
-
检查客户端服务器是否可以
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
-
检查远程服务器是否可以通过名称返回到启动服务器:
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
-
检查
@@SERVERNAME
与两台服务器上的服务器名称匹配 :SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ------------- ------------- ASITESTSERVER ASITESTSERVER
和
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ---------- ---------- ASIGROBTEST ASIGROBTEST
-
尖叫
-
在发出我的查询之前发出
SET XACT_ABORT ON
:SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions
-
授予
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。
我的直觉说防火墙的问题,但有几件事情想起来…
- 机器在同一个域中吗? (是的,不应该与残疾人authentication)
- 防火墙是否在机器上运行? 对于防火墙,DTC可能会带来一些痛苦,因为它使用了一系列的端口,请参阅http://support.microsoft.com/kb/306843目前,为了识别问题,我将禁用防火墙;
- DTC ping说什么? http://www.microsoft.com/download/en/details.aspx?id=2868
- 什么帐户是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