Автоматизация переименования SQL Server

10

Мы находимся в процессе замены нашего 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
Можете ли вы добавить EXEC перед sp_addserver и посмотреть, поможет ли это?
Санкар Редди
Это заставило это работать. :)
Скотт

Ответы:

6

Вот скрипт, который делает то, что вы хотите:

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

магма
источник
1
Почти, но @ var1 должен быть удален и @ var2 добавлен. @@ ServerName возвращает имя экземпляра SQL Server, а SERVERPROPERTY ('MachineName') возвращает имя компьютера.
Скотт
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'
UPDATE msdb.dbo.sysjobs SET originating_server = @var2
GO

В статье, найденной магмой, была одна небольшая ошибка: она пыталась удалить новое имя и добавить старое имя вместо того, чтобы сбросить старое имя и добавить новое имя. Я также добавил запрос на обновление, чтобы исправить задания агента 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
Мичиган
источник
Чем это отличается от других (принятых) ответов?
Свен