Automatisieren der Umbenennung eines SQL Servers

10

Wir sind dabei, unseren SQL Server zu ersetzen, und haben entschieden, dass das Umbenennen des Servers selbst viel einfacher sein wird, als alles andere so zu ändern, dass es auf einen neuen Namen verweist. Wir haben Anweisungen zum Ändern des SQL Server-Instanznamens gefunden, um ihn an den Computernamen anzupassen, der folgendermaßen aussieht:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Obwohl SQL Enterprise Manager diese zusammen nicht zu mögen scheint. Ich musste es wie folgt ändern, damit es zusammenarbeitet:

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

Was nicht schlecht ist, aber ich würde es vorziehen, wenn die Dinge automatisierter wären. Da @@ Servername den Namen der Instanz zurückgibt, habe ich herausgefunden, wie die erste Zeile automatisiert werden kann:

sp_dropserver @@ServerName; GO

Ich habe auch erfahren, dass SERVERPROPERTY ('Servername') den Computernamen zurückgeben soll, also dachte ich, ich könnte das vielleicht verwenden, um den zweiten Teil zu automatisieren, aber das hat nicht funktioniert:

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

Ich habe versucht, eine Variable festzulegen, was ich sowieso tun muss, um die SQL Agent-Jobs zu aktualisieren, aber das hat auch nicht funktioniert:

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

Falsche Syntax in der Nähe von 'sp_addserver'.

Ich würde sehr gerne nicht den neuen Servernamen in das Skript fest codieren müssen, um dies einfacher wiederverwendbar zu machen. Hat jemand irgendwelche Ideen?

Scott
quelle
1
Können Sie EXEC vor sp_addserver hinzufügen und sehen, ob es hilft?
Sankar Reddy
Das hat funktioniert. :)
Scott

Antworten:

6

Hier ist ein Skript, mit dem Sie tun können, was Sie wollen:

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

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

Magma
quelle
1
Fast, aber @ var1 sollte gelöscht und @ var2 hinzugefügt werden. @@ Servername gibt den Namen der SQL Server-Instanz zurück, während SERVERPROPERTY ('Maschinenname') den Namen des Computers zurückgibt.
Scott
1

Mit Hilfe von Magma und Sankar Reddy ist hier das fertige Drehbuch:

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

Der Artikel, den Magma gefunden hat, hatte einen kleinen Fehler: Es wurde versucht, den neuen Namen zu löschen und den alten Namen hinzuzufügen, anstatt den alten Namen zu löschen und den neuen Namen hinzuzufügen. Ich habe auch eine Aktualisierungsabfrage hinzugefügt, um die SQL Agent-Jobs zu korrigieren. Beachten Sie, dass dies nur in einer Umgebung mit mehreren Servern ordnungsgemäß für den Master-Server funktioniert. Meine Umgebung ist eine Einzelserverumgebung, daher funktioniert sie für meine Situation.

Scott
quelle
-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
quelle
Wie unterscheidet sich das von den anderen (akzeptierten) Antworten?
Sven