自动重命名 SQL Server

自动重命名 SQL Server

我们正在更换 SQL Server,并决定重命名服务器本身比将其他所有内容更改为新名称要容易得多。我们找到了有关更改 SQL Server 实例名称以匹配计算机名称的说明,如下所示:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

尽管 SQL Enterprise Manager 似乎不喜欢将它们放在一起。我必须将其更改为以下内容才能使其一起工作:

sp_dropserver 'OLDSERVER'; GO
sp_addserver 'NEWSERVER', 'local'; GO

这并不坏,但我希望事情更加自动化。由于 @@ServerName 返回实例的名称,我找到了如何自动化第一行的方法:

sp_dropserver @@ServerName; GO

我还了解到 SERVERPROPERTY('ServerName') 应该返回计算机名称,所以我想我可以使用它来自动化第二部分,但这不起作用:

sp_addserver SERVERPROPERTY('ServerName'), 'local'; GO

我尝试设置一个变量,无论如何我都需要这样做来更新 SQL 代理作业,但这也不起作用:

DECLARE @srv sysname;
SET @srv = CAST(SERVERPROPERTY('ServerName') AS sysname);
sp_addserver @srv, 'local'; GO

‘sp_addserver’ 附近的语法不正确。

我非常希望不必将新服务器名称硬编码到脚本中,以便更轻松地重复使用。有人有什么想法吗?

答案1

这是一个可以执行您想要的操作的脚本:

DECLARE @var1 nvarchar(50)
DECLARE @var2 nvarchar(50)
SET @var1 = convert(nvarchar(50),@@SERVERNAME)
SET @var2 = convert(nvarchar(50),SERVERPROPERTY('MachineName'))
EXEC sp_dropserver @var1
EXEC sp_addserver @var2, 'local'
GO

致谢:http://www.myitforum.com/articles/5/view.asp?id=4983

答案2

在 magma 和 Sankar Reddy 的帮助下,完成的脚本如下:

DECLARE @var1 nvarchar(50)
DECLARE @var2 nvarchar(50)
SET @var1 = convert(nvarchar(50),@@SERVERNAME)
SET @var2 = convert(nvarchar(50),SERVERPROPERTY('MachineName'))
EXEC sp_dropserver @var1
EXEC sp_addserver @var2, 'local'
UPDATE msdb.dbo.sysjobs SET originating_server = @var2
GO

magma 找到的文章中有一个小错误,即它试图删除新名称并添加旧名称,而不是删除旧名称并添加新名称。我还添加了一个更新查询来修复 SQL 代理作业。请注意,这仅在多服务器环境中对主服务器有效。我的环境是单服务器环境,因此它适用于我的情况。

答案3

Declare @OldName varchar(50),
        @NewName Varchar(50)

Select @OldName = CONVERT(VARCHAR(50),@@SERVERNAME) ;
--SELECT @OldName [OLDNAME]
Select @NewName =  CONVERT(VARCHAR(50),SERVERPROPERTY('ServerName'));
--SELECT @NewName [NEWNAME]

EXEC sp_dropserver @OldName;
EXEC sp_addserver @server = '@NewName',@local='local';
GO

相关内容