Automatizar el cambio de nombre de un servidor SQL

10

Estamos en el proceso de reemplazar nuestro SQL Server y hemos decidido que cambiar el nombre del servidor en sí será mucho más fácil que cambiar todo lo demás para señalar un nuevo nombre. Encontramos instrucciones sobre cómo cambiar el nombre de la instancia de SQL Server para que coincida con el nombre de la computadora que se ve así:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Aunque al Administrador corporativo de SQL no parece gustarle todo eso. Tuve que cambiarlo a lo siguiente para que funcione juntos:

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

Lo que no está mal, pero preferiría que las cosas sean más automatizadas. Como @@ ServerName devuelve el nombre de la instancia, descubrí cómo automatizar la primera línea:

sp_dropserver @@ServerName; GO

También aprendí que SERVERPROPERTY ('ServerName') debe devolver el nombre de la computadora, así que pensé que podría usar eso para automatizar la segunda parte, pero esto no funcionó:

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

Traté de configurar una variable, lo que debo hacer de todos modos para actualizar los trabajos del Agente SQL, pero tampoco funcionó:

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

Sintaxis incorrecta cerca de 'sp_addserver'.

Me gustaría mucho no tener que codificar el nuevo nombre del servidor en el script, para que esto sea más fácil de reutilizar. ¿Alguien tiene alguna idea?

Scott
fuente
1
¿Puede agregar EXEC antes de sp_addserver y ver si ayuda?
Sankar Reddy
Eso lo hizo funcionar. :)
Scott,

Respuestas:

6

Aquí hay un script para hacer lo que quieras:

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

Créditos: http://www.myitforum.com/articles/5/view.asp?id=4983

magma
fuente
1
Casi, pero @ var1 debería descartarse y agregarse @ var2. @@ ServerName devuelve el nombre de la instancia de SQL Server, mientras SERVERPROPERTY ('MachineName') devuelve el nombre de la computadora.
Scott
1

Con la ayuda de magma y Sankar Reddy, aquí está el guión terminado:

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

El artículo que encontró magma tenía un pequeño error, que era que estaba tratando de eliminar el nuevo nombre y agregar el nombre antiguo en lugar de eliminar el nombre antiguo y agregar el nuevo nombre. También agregué una consulta de actualización para corregir los trabajos del agente SQL. Tenga en cuenta que esto solo funciona correctamente con el servidor maestro en un entorno multiservidor. Mi entorno es un entorno de servidor único, por lo que funciona para mi situación.

Scott
fuente
-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
fuente
¿Cómo es esto diferente de las otras respuestas (aceptadas)?
Sven