操作系统: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”文件中增加一条记录:
xxx.xxx.xxx.xxx 发起服务器名
相关推荐
导入Microsoft分布式事务处理协调器MSDTC,网上大部分教程都是服务器配置msdtc,但是发现两个服务器都配置之后还是不行,可参照此图片解决,已验证过,不好用找我,最低可以支持到sqlserver2005的数据库以及2008R2的...
无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...
无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...
无论您是学生还是数据库领域的从业人员,都可从《SQL Server 2008管理员必备指南》获得解决问题和完成工作所需的信息。 《SQL Server 2008管理员必备指南》重要主题: 规划、部署和配置SQL Server 2008 管理服务器,...
SQL Server 2014(SQL2014)是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的关系型数据库管理系统,它实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案,提供了企业驾驭海量资料的...
DTC: Distributed Transaction Coordinator(分布式事务处理协调器),用于协调多个数据库、消息队列、文件系统等等资源管理器的事务,由于内部开发中并不使用这个功能,远程数据库服务器上也并不经常使用,因此建议...
5.5 启动、停止和配置Microsoft分布式事务处理协调器 114 5.6 管理SQL Server启动 115 5.6.1 启用或防止SQL Server的自动启动 115 5.6.2 设置数据库引擎的启动参数 116 5.6.3 从命令行管理服务 118 ...
5.5 启动、停止和配置Microsoft分布式事务处理协调器 114 5.6 管理SQL Server启动 115 5.6.1 启用或防止SQL Server的自动启动 115 5.6.2 设置数据库引擎的启动参数 116 5.6.3 从命令行管理服务 118 ...
5.5 启动、停止和配置Microsoft分布式事务处理协调器 114 5.6 管理SQL Server启动 115 5.6.1 启用或防止SQL Server的自动启动 115 5.6.2 设置数据库引擎的启动参数 116 5.6.3 从命令行管理服务 118 ...
SQLServer是一个可扩展的、高性 能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有 机结合,提供了基于事务的企业级信息管理系统方案。 其主要特点如下: (1)高性能设计,可充分利用...
5.5 启动、停止和配置Microsoft分布式事务处理协调器 114 5.6 管理SQL Server启动 115 5.6.1 启用或防止SQL Server的自动启动 115 5.6.2 设置数据库引擎的启动参数 116 5.6.3 从命令行管理服务 118 ...
数据实时复制解决方案 经过分析,大多数应用系统以查询操作为主,造成数据库压力迅速增加的主要因素也 是复杂的查询操作,为了能够得到同一份数据的多个副本来响应用户的查询,SQL Server 提供了复制技术...
支持分布式事务(弱xa)。 支持XA分布式事务(1.6.5)。 支持全局序列号,解决分布式下的主键生成问题。 分片规则丰富,插件化开发,易于扩展。 强大的web,命令行监控。 支持前端作为MySQL通用代理,后端JDBC方式...
SQL Server 2000提供了对分布式事务处理的支持,并对开发工具具有良好的支持,为大型数据库项目提供了企业解决方案。SQL是关系数据库的标准语言。操作数据库有多种途径:使用企业管理器、使用查询分析器、编程中使用...
Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、...
SQL Server 2000提供了对分布式事务处理的支持,并对开发工具具有良好的支持,为大型数据库项目提供了企业解决方案。SQL是关系数据库的标准语言。操作数据库有多种途径:使用企业管理器、使用查询分析器、编程中使用...
SQL Server 2000提供了对分布式事务处理的支持,并对开发工具具有良好的支持,为大型数据库项目提供了企业解决方案。SQL是关系数据库的标准语言。操作数据库有多种途径:使用企业管理器、使用查询分析器、编程中使用...
Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由JDBC、Proxy和Sidecar(规划中)这3款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和...
在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...
Apache ShardingSphere是一个开放源代码生态系统,由一组分布式数据库解决方案组成,其中包括JDBC,代理和Sidecar(计划)这3种独立产品。 它们都提供数据横向扩展,分布式事务和分布式治理的功能,适用于各种情况,...