Automatizzare la ridenominazione di un SQL Server


10

Stiamo sostituendo il nostro SQL Server e abbiamo deciso che rinominare il server stesso sarà molto più semplice che cambiare tutto il resto per puntare a un nuovo nome. Abbiamo trovato le istruzioni su come modificare il nome dell'istanza di SQL Server affinché corrisponda al nome del computer che assomiglia a questo:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Anche se SQL Enterprise Manager non sembra gradire quelli insieme. Ho dovuto cambiarlo nel modo seguente per farlo funzionare insieme:

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

Il che non è male, ma preferirei che le cose fossero più automatizzate. Dato che @@ ServerName restituisce il nome dell'istanza, ho capito come automatizzare la prima riga:

sp_dropserver @@ServerName; GO

Ho anche imparato che SERVERPROPERTY ('ServerName') dovrebbe restituire il nome del computer, quindi ho pensato che avrei potuto usarlo per automatizzare la seconda parte, ma questo non ha funzionato:

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

Ho provato a impostare una variabile, che devo comunque fare per aggiornare i lavori di SQL Agent, ma neanche quello ha funzionato:

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

Sintassi errata vicino a "sp_addserver".

Mi piacerebbe molto non dover codificare il nuovo nome del server nello script, per renderlo più facilmente riutilizzabile. Qualcuno ha qualche idea?


1
Puoi aggiungere EXEC prima di sp_addserver e vedere se aiuta?
Sankar Reddy,

Questo l'ha fatto funzionare. :)
Scott,

Risposte:


6

Ecco uno script per fare quello che vuoi:

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

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


1
Quasi, ma @ var1 dovrebbe essere eliminato e @ var2 aggiunto. @@ ServerName restituisce il nome dell'istanza di SQL Server, mentre SERVERPROPERTY ('MachineName') restituisce il nome del computer.
Scott,

1

Con l'aiuto di magma e Sankar Reddy, ecco lo script finito:

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

L'articolo trovato dal magma conteneva un piccolo errore, nel senso che stava cercando di eliminare il nuovo nome e aggiungere il vecchio nome invece di eliminare il vecchio nome e aggiungere il nuovo nome. Ho anche aggiunto una query di aggiornamento per correggere i lavori dell'agente SQL. Si noti che funziona correttamente solo con il server principale in un ambiente multi-server. Il mio ambiente è un ambiente a server singolo, quindi funziona per la mia situazione.


-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

In che modo differisce rispetto alle altre risposte (accettate)?
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.