MSDTC服务出错
Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network
access in the security configuration for MSDTC using the Component Services Administrative tool.
出现以上错误
修改下面路径的hosts文件
添加数据库服务器的ip地址与服务器名称的映射
(数据库服务器IP地址与服务器名字)
(192.168.2.10 it-china)
C:\WINDOWS\system32\drivers\etc\hosts
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
127.0.0.1 localhost
192.168.2.10 it-china
下列任一条件没有满足就会出现该错误:
1. 必须启动MSDTC服务。(sqlserver的服务)
2. 所涉及的Server之间如果存在网关、防火墙,需要开启TCP 135端口和RPC动态分配的端口号。 分布式事务需要使用这个端口通讯。
3. 如果Server之间跨网段,则Server之间需要能互相PING到机器名(而不是IP地址)。
如果相互PING机器名有问题,修改system32/driver/etc目录下的hosts文件
4 察看dcomcnfg中察看msdtc的安全配置选项,保证双方都可以交互
如果装了windows2003 SP1 或者xp sp2 请看 Windows Server 2003 Service Pack 1 和 Windows XP Service Pack 2 的分布式事务处理协调器服务中的新功能
5 如果windows2003(XP)开启了update服务,则检查注册表[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSDTC]的键值TurnOffRpcSecurity是否为1,如果为0修改为1
6 IP地址解析问题
另外一种原因就是中间层、客户端不能按照数据库服务器的IP地址解析机器名。
解决方法是在中间层、客户端、数据库双方的hosts文件中分别加入其他两个机器的IP地址和机器名,另外更加保险的做法是在各自的TCP/IP协议的Wins中加入其他两个机器的IP地址。
7 设置问题
对于Windows2003+SP1,需要设置组件服务的属性中的“安全配置”的“事务管理器”通信卫“不要求进行验证”,系统默认值是“要求对方进行验证”。
http://expert.csdn.net/Expert/topic/2835/2835706.xml?temp=.1959955
回复人: j9988(j9988)
一.A.不用事务,关用SELECT 语句.是否可以分布式查询?
B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)
C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.
D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe
二.两台机的MSDTC是否都打开了.
三.MSDTC设置是否正确.
1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
2.转至"组件服务管理工具"。
3.浏览至"启动管理工具"。
4.选择"组件服务"。
a.展开"组件服务"树,然后展开"我的电脑"。
b.右键单击"我的电脑",然后选择"属性"。
C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
XA 事务
e.另外,"DTC 登录帐户"一定要设置为"NT AuthorityNetworkService"。
5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
6.单击"确定"关闭"我的电脑"属性窗口。
四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.
五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.
七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.
八.如果是WIN2000,升级到SP4
九.升级MDAC到2.6以上,最好是2.8.
十.要安装SQL的最新补丁: sp3a
'全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766
'应该安装的补丁sql 2000 sp3
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe
Windows 2003 下分布式事务协调器(DTC)的配置 【转载】
2007年04月16日 星期一 16:25
分布式事务在Windows 2003的配置比较麻烦,原来我就碰到过怎么设置也启动不了的情况,近日在别人指导下弄好了,顺便写个配置步骤,希望对大家有用 1、 添加/删除程序中,选择添加Windows组件,选择应用程序服务器,选择启用分布式事务网络访问 2、 在DTC所涉及的所有服务器中,启用NETBIOS,确保所有服务器能相互ping通对方,具体为修改所有服务器中的C:WindowsSystem32Driversetchosts文件(具体可参考hosts文件的内部帮助)。[注意]必须修改所有的服务器中的hosts文件 3、 禁用SQL Server 的DTC RPC安全,具体为在HKEY_LOCAL_MACHINESoftwareMicrosoftMSDTC下新建一个DWord键,名称为TurnOffRpcSecurity,设置其值为1 4、 重启MSDTC 5、 关闭网络防火墙(或者开放相应的端口) ------------------------------------------------------------------------------------------------------- 主要是两个原因:
-------------------------------------------------------------------------------------------------------
适用环境 操作系统:windows 2003 数据库:sql server 2000/sql server 2005 使用链接服务器进行远程数据库访问的情况 一、 问题现象 在执行分布式事务时,在sql server 2005下收到如下错误: 消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行 无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启 动分布式事务。 在sql server 2000下收到如下错误: 该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。 [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ] OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。 二、 解决方案 1. 双方启动MSDTC服务 MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双 方服务器启动MSDTC(Distributed Transaction Coordinator)服务。 2. 打开双方135端口 MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证 RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。 使用“telnet IP 135 ”命令测试对方端口是否对外开放。也可用端口扫描软件( 比如Advanced Port Scanner)扫描端口以判断端口是否开放。 3. 保证链接服务器中语句没有访问发起事务服务器的操作 在发起事务的服务器执行链接服务器上的查询、视图或存储过程中含有访问发起事务 服务器的操作,这样的操作叫做环回(loopback),是不被支持的,所以要保证在链 接服务器中不存在此类操作。 4. 在事务开始前加入set xact_abort ON语句 对于大多数 OLE DB 提供程序(包括 SQL Server),必须将隐式或显示事务中的数据 修改语句中的 XACT_ABORT 设置为 ON。唯一不需要该选项的情况是在提供程序支持嵌 套事务时。 5. MSDTC设置 打开“管理工具――组件服务”,以此打开“组件服务――计算机”,在“我的电脑 ”上点击右键。在MSDTC选项卡中,点击“安全配置”按钮。 在安全配置窗口中做如下设置: l 选中“网络DTC访问” l 在客户端管理中选中“允许远程客户端”“允许远程管理” l 在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证” l 保证DTC登陆账户为:NT Authority\NetworkService
6. 链接服务器和名称解析问题 建立链接sql server服务器,通常有两种情况: l 第一种情况,产品选”sql server” EXEC sp_addlinkedserver @server='linkServerName', @srvproduct = N'SQL Server' 这种情况,@server (linkServerName)就是要链接的sqlserver服务器名或者ip地址 。 l 第二种情况,访问接口选“Microsoft OLE DB Provider Sql Server”或 “Sql Native Client” EXEC sp_addlinkedserver @server=' linkServerName ', @srvproduct='', @provider='SQLNCLI', @datasrc='sqlServerName' 这种情况,@datasrc(sqlServerName)就是要链接的实际sqlserver服务器名或者ip 地址。 Sql server数据库引擎是通过上面设置的服务器名或者ip地址访问链接服务器,DTC服 务也是通过服务器名或者ip地址访问链接服务器,所以要保证数据库引擎和DTC都能通 过服务器名或者ip地址访问到链接服务器。 数据库引擎和DTC解析服务器的方式不太一样,下面分别叙述 6.1 数据库引擎 第一种情况的@server或者第二种情况的@datasrc设置为ip地址时,数据库引擎会根据 ip地址访问链接服务器,这时不需要做名称解析。 第一种情况的@server或者第二种情况的@datasrc设置为sql server服务器名时,需要 做名称解析,就是把服务器名解析为ip地址。 有两个办法解析服务器名: 一是在sql server客户端配置中设置一个别名,将上面的服务器名对应到链接服务器 的ip地址。 二是在“C:\WINDOWS\system32\drivers\etc\hosts”文件中增加一条记录: xxx.xxx.xxx.xxx 服务器名 作用同样是把服务器名对应到链接服务器的ip地址。 6.2 DTC 不管哪一种情况,只要@server设置的是服务器名而不是ip地址,就需要进行名称解析 ,办法同上面第二种办法,在hosts文件中增加解析记录,上面的第一种办法对DTC不 起作用。 如果@server设置的是ip地址,同样不需要做域名解析工作。 7. 远程服务器上的名称解析 分布式事务的参与服务器是需要相互访问的,发起查询的服务器要根据机器名或ip查 找远程服务器的,同样远程服务器也要查找发起服务器,远程服务器通过发起服务器 的机器名查找服务器,所以要保证远程服务器能够通过发起服务器的机器名访问到发 起服务器。 一般的,两个服务器在同一网段机器名能就行很好的解析,但是也不保证都能很好的 解析,所以比较保险的做法是: 在远程服务器的在“C:\WINDOWS\system32\drivers\etc\hosts”文件中增加一条记录 ---------------------------------------------------------------------------------------------------------------------------- SQL Server连接中的四个最常见错误: |
已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组可以由本文解决。
http://hi.baidu.com/easonshen/blog/item/e5e80916faa55807c83d6d7d.html
还可参考 百度百科 MSDTC http://baike.baidu.com/view/723468.htm#sub723468