Автоматизація перейменування SQL-сервера


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 Agent, але це не спрацювало:

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

Чим це відрізняється від інших (прийнятих) відповідей?
Свен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.