链接服务器,访问接口 "SQLNCLI" 无法启动分布式事务。

liliyyda 2010-07-21 12:49:04
我对IP是128.25.41.201的服务器建立了链接服务器
exec sp_addlinkedserver
@server='128.25.41.201', @srvproduct='',
@provider='SQLOLEDB', @datasrc='128.25.41.201'
go
exec sp_addlinkedsrvlogin
@rmtsrvname = '128.25.41.201'
, @useself = 'false'
, @rmtuser = 'sa'
, @rmtpassword = 'password'
然后
本服务器上设置,属性,

Exec sp_serveroption '128.25.41.201', 'lazy schema validation', 'true'



然后在本服务器上创建分区视图:

Create view DPV_Customers As
Select * from Customers
Union all
Select * from 128.25.41.201.Pubs.dbo.Customers
、、、、、、、、、
表结构是,本机
Create table customers (
Customerid varchar(5) not null,
CompanyName varchar(50) not null,
ContactName varchar(30) null,

CONSTRAINT PK_customers PRIMARY KEY CLUSTERED (Customerid),
CONSTRAINT CK_customerid CHECK (Customerid between 'AAAAA' and 'LZZZZ')
)

连接服务器上的表是
Create table customers (
Customerid varchar(5) not null,
CompanyName varchar(50) not null,
ContactName varchar(30) null,
CONSTRAINT PK_customers PRIMARY KEY CLUSTERED (Customerid),
CONSTRAINT CK_customerid CHECK (Customerid between 'M' and 'ZZZZZ')
)
go
、、、、、、、、、、、、、、、、、、、、、

现在
set xact_abort on
INSERT INTO DPV_CUSTOMERS VALUES('AAMAY','FUZHOU COMPANY','MARRY')
会报错误
链接服务器"128.25.41.201"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。
消息 7391,级别 16,状态 2,第 3 行
无法执行该操作,因为链接服务器 "128.25.41.201" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。

为什么啊,我什么设置都设置好了啊

...全文
3653 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
永生天地 2010-07-21
  • 打赏
  • 举报
回复
[sql server] SQL Server 分布式数据库的问题和解决方法1
http://blog.csdn.net/xys_777/archive/2010/07/12/5729339.aspx

[sql server] SQL Server 分布式数据库的问题和解决方法2
http://blog.csdn.net/xys_777/archive/2010/07/12/5729334.aspx

[sql server] sql server 链接 MySql 实测经过 (ODBC方式)---实际问题我也遇到过
http://blog.csdn.net/xys_777/archive/2010/07/14/5733516.aspx
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
2. 设置MSDTC组件。

3. 检查两台机器能够相互ping通Hostname。

4. 启动SQL Server 的分布式远程连接。

liliyyda 2010-07-21
  • 打赏
  • 举报
回复
以下的设置,我都设置好了啊!!!!!!!!!!


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
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
解决了各位,谢谢了
、、、
在C:找到名为“hosts”的文件(没有扩展名),通常路径为C:\WINDOWS\system32\drivers\etc,将对方服务器的IP和计算机对应起来
、、、
我只在本机上面设置了,没有在链接服务器上设置,所以出现问题了,现在结贴,各位都有分
obuntu 2010-07-21
  • 打赏
  • 举报
回复
http://support.microsoft.com/search/default.aspx?query=7391&mode=r&catalog=LCID%3D2052

那就好好排除下吧。。也有可能是bug,确实比较复杂。。
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yananguo_1985 的回复:]

启动两台服务器的MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火……
[/Quote]

不行啊,同志,我要崩溃了
yananguo_1985 2010-07-21
  • 打赏
  • 举报
回复
启动两台服务器的MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

打开双方的135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放


set xact_abort on
begin distributed tran
INSERT INTO DPV_CUSTOMERS VALUES('AAMAY','FUZHOU COMPANY','MARRY')
commit tran
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 obuntu 的回复:]

SQL code

EXEC master.dbo.sp_serveroption @server=N'128.25.41.201', @optname=N'rpc', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'128.25.41.201', @optname=N'rpc out', @optvalue=N'……
[/Quote]

这些我都设置了啊,没有啊
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
本机是server2003操作系统,链接服务器是XP的操作系统,怎么设置都不行啊
obuntu 2010-07-21
  • 打赏
  • 举报
回复

EXEC master.dbo.sp_serveroption @server=N'128.25.41.201', @optname=N'rpc', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'128.25.41.201', @optname=N'rpc out', @optvalue=N'true'
GO
jinjazz 2010-07-21
  • 打赏
  • 举报
回复
msdtc的确是很怪异的问题,这个和操作系统也有关系的。 在不同的操作系统环境下的反应还不一样。不过如果在同一域环境中可以自然解决。
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
各种方法我都试了,怎么还是不行啊
liliyyda 2010-07-21
  • 打赏
  • 举报
回复
我几乎都试了,还是不行啊

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧