修改机器名导致不能发布的问题解决
1,故障
公司数据不能发布了,出错信息如下:
SQL Server 复制需要有实际的服务器名称才能连接到服务器。不支持通过服务器别名、IP 地址或任何其他备用名称进行连接。请指定实际的服务器名称“XX”。 (Replication.Utilities)
2,分析
根据出错信息,可以分析出原来核心库的服务器名并不是"XX"。不支持服务器别名,IP地址或任何其他备用名称进行连接这是微软对发布的强制限定。
在核心库MASTER库下执行
SELECT @@SERVERNAME ,serverproperty('servername')
结果2个结果并不相同:
可以看见系统默认实例名和现在系统实际的实例名并不相同,这是由于该SQL SERVER作为服务器上唯一的SQL SERVER实例,其默认实例名为改服务器的机器名,但是后来服务器改名后,系统默认实例名并没有改变,但是对于我们目前的实际情况是,机器名并没有修改,只是我们采用的是从原来机器名和现有机器名不一样的服务器上备份还原在SQL SERVER之后的版本,改服务器机器名不会给7.0之后的SQL SERVER版本使用带来很大影响,但是因为复制的要求严格,所以必须要求系统实例名必须同实际实例名相同。
SQL SERVER帮助文档中对@@@@SERVERNAME的描述;
SQL Server 安装程序在安装时将服务器名设置为计算机名。若要更改服务器的名称,请使用 sp_addserver,然后重新启动 SQL Server。
安装了多个 SQL Server 实例时,如果本地服务器名自安装后未发生更改,则 @@SERVERNAME 返回以下本地服务器名信息。
实例 | 服务器信息 |
默认实例 | 'servername' |
命名实例 | 'servernameinstancename' |
故障转移群集实例 - 默认实例 | 'virtualservername' |
故障转移群集实例 - 命名实例 | 'virtualservernameinstancename' |
尽管 @@SERVERNAME 函数和 SERVERPROPERTY 函数的 SERVERNAME 属性可能返回相似格式的字符串,但信息会有所不同。SERVERNAME 属性自动报告计算机网络名的更改。
相比之下,@@SERVERNAME 不报告此更改。@@SERVERNAME 报告使用 sp_addserver 或 sp_dropserver 存储过程对本地服务器名所做的更改。
3,解决办法
为了发布必须修改服务器的名称,让系统实例名和实际实例名相同,在该数据库MASTER库下执行如下语句:
use master
go
if serverproperty('servername') <> @@servername
begin
declare @server sysname
set @server = @@servername
exec sp_dropserver @server = @server
set @server = cast(serverproperty('servername') as sysname)
exec sp_addserver @server = @server , @local = 'LOCAL'
end
在本地数据试验,更改后可以正确的进行配置分发。对于系统定义的sp_addserver 存储过程用于定义SQL Server 本地实例的名称。此存储过程也定义远程服务器。相当于7.0之前版本用于添加链接服务器的存储过程。修改后不会对数据库的正常使用带来影响。
评论已关闭!