Automatyzacja zmiany nazwy programu SQL Server

10

Jesteśmy w trakcie wymiany naszego SQL Servera i zdecydowaliśmy, że zmiana nazwy samego serwera będzie znacznie łatwiejsza niż zmiana wszystkiego innego, aby wskazać nową nazwę. Znaleźliśmy instrukcje dotyczące zmiany nazwy instancji SQL Server, aby pasowała do nazwy komputera, która wygląda następująco:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Chociaż SQL Enterprise Manager nie lubi tych razem. Musiałem zmienić to na następujące, aby działało razem:

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

Co nie jest złe, ale wolałbym, żeby rzeczy były bardziej zautomatyzowane. Ponieważ @@ NazwaSerwera zwraca nazwę instancji, wymyśliłem, jak zautomatyzować pierwszy wiersz:

sp_dropserver @@ServerName; GO

Dowiedziałem się również, że SERVERPROPERTY („nazwa_serwera”) ma zwrócić nazwę komputera, więc pomyślałem, że mógłbym użyć tego do zautomatyzowania drugiej części, ale to nie działało:

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

Próbowałem ustawić zmienną, którą i tak muszę zrobić, aby zaktualizować zadania agenta SQL, ale to też nie działało:

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

Niepoprawna składnia w pobliżu „sp_addserver”.

Bardzo chciałbym nie musieć na stałe wpisywać nowej nazwy serwera do skryptu, aby łatwiej było z niej korzystać. Czy ktoś ma jakieś pomysły?

Scott
źródło
1
Czy możesz dodać EXEC przed sp_addserver i sprawdzić, czy to pomaga?
Sankar Reddy
Dzięki temu działało. :)
Scott

Odpowiedzi:

6

Oto skrypt do robienia tego, co chcesz:

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

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

magma
źródło
1
Prawie, ale @ var1 należy usunąć i dodać @ var2. @@ nazwa_serwera zwraca nazwę wystąpienia programu SQL Server, a SERVERPROPERTY („nazwa_komputera”) zwraca nazwę komputera.
Scott
1

Z pomocą magmy i Sankara Reddy, oto gotowy skrypt:

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

Artykuł, który znalazła magma, zawierał jeden mały błąd, który polegał na tym, że próbował upuścić nową nazwę i dodać starą nazwę zamiast upuszczać starą nazwę i dodawać nową. Dodałem również zapytanie o aktualizację, aby naprawić zadania agenta SQL. Pamiętaj, że działa to poprawnie tylko w przypadku serwera głównego w środowisku wieloserwerowym. Moje środowisko to środowisko z jednym serwerem, więc działa w mojej sytuacji.

Scott
źródło
-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
MI
źródło
Czym różni się to od innych (zaakceptowanych) odpowiedzi?
Sven