SQL SERVER 2005 相互链接服务器问题

时间:2021-03-07 18:00:50


这里有
有三台实例A,B,C
版本:SQL SERVER 2005 SP3  64 
A上有用户USER_A ;B上有USER_B;C上有USER_C
B和C 唯一区别就是,B不是默认实例,C是默认实例.

在A 上用USER_B建立链接服务器a->b 失败
在A 上用USER_C建立链接服务器a->c 成功
在b 上用USER_a建立链接服务器b->a 成功
在b 上用USER_c建立链接服务器b->c 成功
在c 上用USER_a建立链接服务器c->a 成功
在c 上用USER_b建立链接服务器c->b 成功

一句话就是,在A 上建立链接服务器,如果目标不是默认实例的话,就会失败.

提示如:链接服务器已创建单连接测试失败.是否要保留该链接服务器?
其它信息:
执行Transcact-SQL 语句或批处理时发生了异常.(Microsoft.SqlServer.ConnectionInfo)
 命名管道提供程序:无法打开与SQL SERVER 的连接[53]。
 链接服务器"TEST"的OLE DB 访问接口"SQLNCLI"返回了消息"登录超时已过期"
链接服务器"TEST"的OLE DB 访问接口"SQLNCLI"返回了消息"建立到服务器的连接时发生错误.
连接到SQL SERVER 2005时,默认设置 SQL SERVER 不允许远程连接这个事实可能会导致失败>"
(Microsoft SQL Server,错误:53)

另外提示,用UDL测试的话也是同样的结果
步骤为新建文本文件,改后缀名为UDL

提供程序:Microsft OLE DB Provider for SQL Server
连接:设置连接B相关参数.如果在A服务器上运行失败,但是如果COPY该UDL放在C上去运行,又能成功.太奇怪了
不知道大家有遇到过没有?
部分代码:
EXEC master.dbo.sp_addlinkedserver @server = N'192.168.0.2\DB_B', @srvproduct=N'ms', @provider=N'MSDASQL', @datasrc=N'192.168.0.2\DB_B'
.....
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname =  N'192.168.0.2\DB_B', @locallogin = NULL , @useself = N'False', @rmtuser = N'USER_B;', @rmtpassword = N'123'
GO

15 个解决方案

#1


B不是默认实例,

端口是啥

#2


SQL SERVER 不允许远程连接这个事实可能会导致失败
查查这个错误的解决方法
baidu下应该很多

#3


我来学习了

#4


tcp/ip

#5


确实奇怪

#6


引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

不是B的问题,因为C->B是可以连通的.B->A,C,也是通的.同理,我这里测了D,E,F,G,H,G.....
多个实例链接服务器,只要不是默认实例,A 就连不过去,但是B,C,D,E,F,G,H,G.....之间无论怎么组合都能成功.

#7


同时使用TCP/IP和named pipes

再换b的机器名试试

#8


引用 7 楼 xys_777 的回复:
同时使用TCP/IP和named pipes

再换b的机器名试试

都试过了,而且TCP/IP和named pipes都是N年以前都是启动的.

#9



引用 8 楼 lcw321321 的回复:
引用 7 楼 xys_777 的回复:
同时使用TCP/IP和named pipes

再换b的机器名试试

都试过了,而且TCP/IP和named pipes都是N年以前都是启动的.


telnet b的端口也都试了?

#10


引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

TCP 是动态端口来着

#11


引用 10 楼 lcw321321 的回复:
引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

TCP 是动态端口来着

?
你在配置中设置端口下

#12


引用 11 楼 sql77 的回复:
引用 10 楼 lcw321321 的回复:
引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

TCP 是动态端口来着

?
你在配置中设置端口下

姥姥的,终于搞出来,谢谢各位,果然 是WINDOWS 防火墙的问,出了A 以外,其它的防火墙都是关闭,由于默认实例是1433端口,而防火墙是系统维护人员增加允许1433可以访问.但是动态端口就不允许访问了.
强制给非默认实例(群集环境下)设个固定端口应该没影响吧?

#13


SQL Browser服务都启动了没有?

#14


引用 13 楼 garnett_kg 的回复:
SQL Browser服务都启动了没有?

谢谢,问题已经解决了,SQL Browser是启动了的,现在就是考虑指定非默认实例端口对正常运行有没有影响

#15


事实证明没影响

#1


B不是默认实例,

端口是啥

#2


SQL SERVER 不允许远程连接这个事实可能会导致失败
查查这个错误的解决方法
baidu下应该很多

#3


我来学习了

#4


tcp/ip

#5


确实奇怪

#6


引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

不是B的问题,因为C->B是可以连通的.B->A,C,也是通的.同理,我这里测了D,E,F,G,H,G.....
多个实例链接服务器,只要不是默认实例,A 就连不过去,但是B,C,D,E,F,G,H,G.....之间无论怎么组合都能成功.

#7


同时使用TCP/IP和named pipes

再换b的机器名试试

#8


引用 7 楼 xys_777 的回复:
同时使用TCP/IP和named pipes

再换b的机器名试试

都试过了,而且TCP/IP和named pipes都是N年以前都是启动的.

#9



引用 8 楼 lcw321321 的回复:
引用 7 楼 xys_777 的回复:
同时使用TCP/IP和named pipes

再换b的机器名试试

都试过了,而且TCP/IP和named pipes都是N年以前都是启动的.


telnet b的端口也都试了?

#10


引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

TCP 是动态端口来着

#11


引用 10 楼 lcw321321 的回复:
引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

TCP 是动态端口来着

?
你在配置中设置端口下

#12


引用 11 楼 sql77 的回复:
引用 10 楼 lcw321321 的回复:
引用 1 楼 sql77 的回复:
B不是默认实例,

端口是啥

TCP 是动态端口来着

?
你在配置中设置端口下

姥姥的,终于搞出来,谢谢各位,果然 是WINDOWS 防火墙的问,出了A 以外,其它的防火墙都是关闭,由于默认实例是1433端口,而防火墙是系统维护人员增加允许1433可以访问.但是动态端口就不允许访问了.
强制给非默认实例(群集环境下)设个固定端口应该没影响吧?

#13


SQL Browser服务都启动了没有?

#14


引用 13 楼 garnett_kg 的回复:
SQL Browser服务都启动了没有?

谢谢,问题已经解决了,SQL Browser是启动了的,现在就是考虑指定非默认实例端口对正常运行有没有影响

#15


事实证明没影响