MSSQL server分布式事务解决方案 |
实用环境 操作系统:windows 2003 数据库:sql server 2000/sql server 2003 使用链接服务器进行远程数据库 拜访的状况 一、问题
景象 信息 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] 。 二、解决
方案 2.
打开双方135端口 使用“telnet IP 135 ”命令测试对方端口是不是对外开放 。也可用端口扫描软件( 比方Advanced Port Scanner)扫描端口以推断端口是不是开放 。 3.
保障链接服务器中语句没有
拜访
发动事务服务器的操作 4.在事务开始前加入set xact_abort ON语句 5.MSDTC设置 在安全配置窗口中做如下设置: l选中“网络DTC 拜访” l在客户端治理 当选中“同意远程客户端”“同意远程治理” l在事务治理通信 当选“同意入站”“同意出站”“不要求进行验证” l 保障DTC登陆账户为:NTAuthority\NetworkService 6.链接服务器和名称解析问题 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设置为sql server服务器名时,需求做名称解析,便是把服务器名解析为ip地址 。 有两个 步骤解析服务器名: 一是在sql server客户端配置中设置一个别名,将上面的服务器名对应到链接服务器的ip地址 。 二是在“C:\WINDOWS\system32\drivers\etc\hosts”文件中添加一条记录: xxx.xxx.xxx.xxx服务器名 作用同样是把服务器名对应到链接服务器的ip地址 。 6.2DTC 假如@server设置的是ip地址,同样不需求做域名解析工作 。 |