SQL Server服务器名称与默认实例名不一致的修复方法

时间:2022-03-31 14:36:32
 

SQL Server服务器名称与默认实例名不一致的修复方法

分类: 个人累积 SQl SERVER 数据库复制
[sql]  view plain copy
 
  1. --原因分析:  
  2. --SERVERPROPERTY 函数的 ServerName 属性与@@SERVERNAME 返回相似的信息。  
  3. --ServerName 属性提供Windows 服务器和实例名称,两者共同构成唯一的服务器实例;  
  4. --@@SERVERNAME 提供当前配置的本地服务器名称。  
  5.   
  6. --如果安装时未更改默认服务器名称,则 ServerName 属性和 @@SERVERNAME 返回相同的信息。如果在安装时已将本地服务器名称从默认服务器名称更改为其他名称,则 @@SERVERNAME 返回更改后的新名称。  
  7.   
  8. --如果安装时未更改默认服务器名称,但是安装完成后更改过Windows 服务器名称,则@@SERVERNAME仍然返回安装时的服务器名称,ServerName 属性返回更改过后的Windows 服务器名称。也就是说,@@SERVERNAME不会报告Windows 服务器名称的更改,ServerName 属性会报告Windows 服务器名称的更改。这就会造成SQL Server默认实例的@@SERVERNAME和ServerName 属性不一致。这种情况在一些应用中常常会出现无法连接的问题,有时我们需要修复这种情况。  
  9.   
  10. --修复方法:(修复方法很简单,直接执行以下语句即可)  
  11. use master    
  12.        go    
  13.        select @@servername  
  14.        select serverproperty('servername')  
  15. ------  
  16.   IF serverproperty('servername')<>@@servername    
  17.   BEGIN  
  18.   DECLARE  @server SYSNAME  
  19.   SET   @server=@@servername      
  20.   EXEC  sp_dropserver @server=@server    
  21.   SET   @server=cast(serverproperty('servername') AS SYSNAME)   
  22.   EXEC  sp_addserver @server=@server,@local='LOCAL'     
  23.   END  
  24.   ELSE  
  25.     PRINT '实例名与主机名一致,无需修改!'  
  26.    

若,安装SQL之后 服务器修改主机名,造成不一致,且之前有存在复制发布:

 

 机器名与实例名不同,解决办法

在执行 exec sp_addlinkedserver 'DMGZSRV10' 的时候一直提示

消息 15190,级别 16,状态 1,过程 sp_dropserver,第 56 行
仍有对服务器 'DMGZSRV10' 的远程登录或链接登录。

又执行

exec sp_dropserver 'DMGZSRV10', 'droplogins' 

这时提示

无法删除服务器 'LC04',因为该服务器用作复制过程中的发布服务器。 (Microsoft SQL Server,错误: 20582)



下面是解决的方案

原始状态
1、服务器名LC04 MSSQL实例名MSSQLSERVER
2、在LC04上建立了发布,在另一台服务器上订阅或者用SQLServer管理器远程访问LC04上的SQLServer,出现错误:
无法连接到 LC04。
-----------------------------
其他信息:

在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQL Server,错误: 53)


解决处理

将LC04的计算机名称改为MSSQLSERVER与MSSQL实例名相同
此时状态
SQLServer管理器远程可以访问LC04的数据库,但不能订阅,出现错误:
SQL Server 复制需要有实际的服务器名称才能连接到服务器。不支持通过服务器别名、IP 地址或任何其他备用名称进行连接。请指定实际的服务器名称“LC04”。 (Replication.Utilities)


解决处理

在LC04(现在应当名为MSSQLSERVER)的服务器上,执行如下代码
SELECT @@SERVERNAME ,serverproperty('servername')
发现两个不同,分别为LC04和MSSQLSERVER


执行如下代码

exec sp_droplinkedsrvlogin 'LC04',null
exec sp_dropserver 'LC04','droplogins'
exec sp_addserver 'MSSQLSERVER' , 'LOCAL' 

出现错误
无法删除服务器 'LC04',因为该服务器用作复制过程中的发布服务器。 (Microsoft SQL Server,错误: 20582)


解决处理

select * from msdb.dbo.MSdistpublishers
DELETE FROM msdb.dbo.MSdistpublishers
select * from msdb.dbo.MSdistpublishers
exec sp_droplinkedsrvlogin 'LC04',null
exec sp_dropserver 'LC04','droplogins'
exec sp_addserver 'MSSQLSERVER' , 'LOCAL' 
重启SQLServer服务


设置发布服务器属性,发现发布服务器的服务器名还是为LC04,造成发布执行错误:
在建立与服务器的连接时出错。在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) (Microsoft SQL Server,错误: 53)


使用 exec sp_helpserver
发现name为repl_distributor的服务器的network_name还是LC04


解决处理


执行exec sp_setnetname 'repl_distributor','MSSQLSERVER'


再次设置发布服务器,并发布,完成


实际上在SQLServer和其他应用中还有可能用到原有的数据库名LC04
可以建立SQLServer的新别名为LC04,这样基本上都可以解决了