在进行sqlserver复制的时候,我的情况是这样的,我在本地的management studio里连接了一个远程的sqlserver数据库服务器,用的不是默认端口号,也没有开browser服务,而且是命名实例,非默认实例,所以连接的服务器名得用abc\abcserver,port这样的模式来连,然后配置它的复制分发(包括新建发布等等跟复制有关的操作),程序会报这样两个错误信息:
SQL Server 无法连接到服务器“abc\abcserver,1369”。 (配置分发向导)
SQL Server 复制需要有实际的服务器名称才能连接到服务器。不支持通过服务器别名、IP 地址或任何其他备用名称进行连接。请指定实际的服务器名称“abc\abcserver”。 (Replication.Utilities)
说实话具体的原因我也搞的很晕,觉得莫名其妙的,但导致出错的原因就在这个使用management studio进行连接到服务器的时候填写的服务器名称上。因为用的是非默认的端口,所以远程连的时候,要在后面写上“,端口号”才能连上,但是在进行配置分发的时候,它进行连接用的就是这个abc\abcserver,1369名称,可是在配置分发的时候用这个连接,sqlserver却报连接不上。我真的不明白,它为什么用这个就连接不上。如果要连接成功就必须得用abc\abcserver这个服务器名称才可以(我在abc\abcserver本地也做了测试,只有用这个名称进行连接后配置才不会报这个错,即使在本地,用其他的方式连也都会报错)。而且sqlserver的错误提示里还说了不支持通过服务器别名来进行连接,可这问题还就是能用别名来解决,我真想说微软我操你妈的二大爷,在这放的什么大屁报的什么鸟错。
解决原理,既然sqlserver只能用连接服务器的时候使用的那个服务器名称来连接,那就只有在连接到sqlserver的时候填写的服务器名称用它要求的那个标准的abc\abcserver的模式来写。
具体解决办法:那像这种使用非默认端口又没有开browser服务的情况,只有用别名来解决问题,在sqlserver 配置管理器里,配置一个不带端口号的abc\abcserver这种模式的别名,别名名称用的就是需要连接的服务器\sqlserver实列名来命名,然后在里面配上端口号,这样在连接到sqlserver的时候,使用这个别名(其实也就是少了,端口号)来连接上sqlserver,然后进行配置的时候就不会报错。
当然,你要是能调整要连接的sqlserver服务器也行,打开它的browser服务,这样在远程连的时候也不需要写端口号了就,总之要不报这个错,在连接的时候用的服务器名称就只能是服务器\服务实例名(如果有的话),其他的服务器名称方式一概不行。
大概就是这样吧。