我正在尝试针对链接服务器运行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
我如何让微软支持功能而非安全性?
或者,至少,我如何让两个SQL Severs相互通信?
(null)
)我所做的无关紧要,但无论如何我都会发布。
确保两个机器上都运行Distributed Transaction Coordinator
服务:
禁用两台计算机上的所有MSDTC安全性:
启用链接服务器上的随机选项:
诅咒和发誓。
捣乱的事情。
检查SELECT
是否可以使用链接服务器:
SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
....
(763 row(s) affected)
Checked that client server can ping
the remote server:
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
Checked that @@SERVERNAME
matches the server name on both servers:
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
------------- -------------
ASITESTSERVER ASITESTSERVER
和
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
---------- ----------
ASIGROBTEST ASIGROBTEST
尖叫
Issued SET XACT_ABORT ON
before issuing my query:
SET XACT_ABORT ON
GO
BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions
Granted Everyone
Full Control
to:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
两台服务器上的。
答案 0 :(得分:28)
发现它,远程服务器上的MSDTC是本地服务器的克隆。
从Windows应用程序事件日志:
事件类型:错误
活动来源:MSDTC
活动类别:CM
事件ID:4101
日期:2011年9月19日
时间:下午1:32:59
用户:N / A
电脑:ASITESTSERVER
说明:本地MS DTC检测到了这一点 ASICMSTEST上的MS DTC与本地MS具有相同的唯一标识 DTC。这意味着两个MS DTC将无法通信 彼此。如果其中一个系统通常会出现此问题 使用不受支持的克隆工具克隆。 MS DTC要求 使用支持的克隆工具(如SYSPREP)克隆系统。 从命令运行'msdtc -uninstall'然后'msdtc -install' 提示将解决问题。注意:运行'msdtc -uninstall'会 导致系统丢失所有MS DTC配置信息。
有关详细信息,请参阅位于的“帮助和支持中心” http://go.microsoft.com/fwlink/events.asp
运行
msdtc -uninstall
msdtc -install
然后停止并重新启动SQL Server服务修复它。
答案 1 :(得分:6)
好的,所以服务启动,它们之间有一个以太网路径,名称解析工作,链接服务器工作,你禁用了事务身份验证。
我的直觉说防火墙问题,但有些事情会浮现在脑海中......
答案 2 :(得分:5)
答案 3 :(得分:2)
如果服务器是群集的并且存在群集DTC,则必须禁用群集DTC上的安全性而不是本地DTC上的安全性。
答案 4 :(得分:1)
如果目标服务器位于其他云或数据中心,则需要在源服务器中添加 MSDTC服务(目标服务器)的主机条目。
如果问题未解决,请尝试此操作,启用MSDTC设置后。
答案 5 :(得分:1)
答案 6 :(得分:0)
我与MSDTC的最后一次冒险,今天的错误结果证明是DNS问题。你正确地询问机器是否在同一个域,EBarr。顺便说一句,这个问题很棒!
我的情况:我需要子域中的服务器才能通过防火墙对父域中的服务器运行分布式事务。多年来我一直使用链接服务器,因此我在SQL中为链接服务器和MSDTC中的所有常用设置提供了Ian在上面很好地记录的内容。我设置了MSDTC,其中包含一系列TCP端口(5000-5200),可在两台服务器上使用,并在端口1433和5000-5200的盒子之间安排防火墙。这应该有效。链接服务器测试正常,我可以很好地通过链接服务器查询远程SQL服务器,但我不能让它允许分布式事务。我甚至可以从DEV服务器上看到QA服务器上的连接,但是有些东西没有回来。
我可以使用FQDN从QA PING DEV服务器,例如:PING DEVSQL.dev.domain.com
我无法使用机器名PING DEV服务器:PING DEVSQL
DEVSQL服务器原本应该是两个域的成员,但名称并没有在父域的DNS中解析...父域中DEVSQL的机器帐户发生了某些事情。一旦我们将DEVSQL添加到父域的DNS,并且&#34; PING DEVSQL&#34;从远程QA服务器工作,这个问题已经解决了。
我希望这有帮助!
答案 7 :(得分:0)
除了安全设置之外,我还必须在两台服务器上打开一些端口才能运行事务。我不得不打开端口59640,但根据以下建议,端口135必须打开。 http://support.microsoft.com/kb/839279
答案 8 :(得分:0)
我遇到了同样的错误,我设法通过在源服务器上正确配置MSDTC来解决此问题,以允许出站并允许DTC通过Windows防火墙。
允许分布式事务处理协调器,刻度域,私人和公共选项
答案 9 :(得分:0)
允许 DTC 勾选私有和公共以及域的防火墙设置起到了作用。仅仅域是不够的(感觉应该是,但不)。