应用场景:
1、数据库安装完成之后,又修改了服务器的计算机名,导致SQLServer记录的计算机名和实际计算机名不一致;
2、数据库系统库是从其它服务器同步过来的;
将导致SQLServer数据库系统库中记录的服务器名称和实际服务器名称不一致,会导致发布订阅等相关功能异常,此时需要将数据库服务器名修改一致。
检查方法:
使用一下语句在master库中执行,查询系统库中记录的服务器名称:
--查询系统库存储的服务器名
select * From Sys.SysServers
select @@ServerName
使用以下语句查询当前实际运行SQLServer的服务器名称:
--查询当前实际运行服务器名
select Host_name()
正常情况服务器名称应当是一致的

注:repl_distributor是数据库复制(发布订阅)功能启用后自动生成的,停用数据库复制(发布订阅)功能后repl_distributor将被自动删除。
停用复制发布时如提示需要计算机名,可以尝试使用127.0.0.1作为计算机名进行连接,然后禁用数据库复制功能。
禁用数据库复制功能之后,select * From Sys.SysServers 查询出来的应当只有一行数据,没有repl_distributor。
处理过程:
如果系统库表Sys.SysServers记录的服务器名称与实际服务器名称不一致,需要先删除错误的服务器名称记录,然后在将实际的服务器名称添加进去。
1、禁用复制发布功能(复制-右键 禁用发布和分发),禁用后repl_distributor将被删除,否则旧服务器名称会提示占用。
2、删除错误的服务器名称记录,执行以下语句(oldservername替换成需要删除的记录中srvname记录的名称)
--删除原有服务器名称
sp_dropserver 'oldservername'
3、添加当前实际服务器名称到系统库,执行以下语句(newservername替换成Host_name()查出来的当前实际服务器名称)
--新增服务器名
sp_addserver 'newservername', 'LOCAL'
4、修改完成后重启服务器,然后再次检查系统库记录的服务器名称和当前实际服务器名称是否一致。
注:repl_distributor记录不要手工添加,当再次启用数据库复制(发布订阅)功能时系统将自动创建,并关联计算机名称。
其他注意事项:
1、删除服务器名称记录前,或停用数据库复制(发布订阅)功能前,需要先删除SQL Server代理的作业和警告任务中所有和发布订阅相关的任务,否则删除时可能会提示服务器名称有占用不允许删除。
2、从其它地方同步过来的系统库,其中记录的Widnows账号与当前计算机不同,当使用Windows身份验证时会出现问题(即使账户名称相同,在部分功能中也存在问题,因为账户名称前都带有计算域名称);需要在“安全性-登录名”中将当前服务器windows账号加入,并为其勾选服务器角色sysadmin(存在相同名称时会不允许添加,这时需要先删除原账号,则又需要解除原账号下归属的数据库,一般是分离数据库修改好之后重新附加);如果不想修改windwos账户,则应该注意在后续所有步骤中都使用sa账户(或另建其他管理员账户),不在使用windows账户进行操作(特别是发布订阅时不能在使用windows账户)。
3、删除账号的远程链接语句 sp_droplinkedsrvlogin 'oldservername',null
网友评论