Automatiser le changement de nom d'un serveur SQL

10

Nous sommes en train de remplacer notre serveur SQL et avons décidé que renommer le serveur lui-même sera beaucoup plus facile que de changer tout le reste pour pointer vers un nouveau nom. Nous avons trouvé des instructions sur la modification du nom d'instance SQL Server pour qu'il corresponde au nom de l'ordinateur qui ressemble à ceci:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Bien que SQL Enterprise Manager ne semble pas les aimer ensemble. J'ai dû le changer comme suit pour le faire fonctionner ensemble:

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

Ce qui n'est pas mal, mais je préférerais que les choses soient plus automatisées. Étant donné que @@ ServerName renvoie le nom de l'instance, j'ai compris comment automatiser la première ligne:

sp_dropserver @@ServerName; GO

J'ai également appris que SERVERPROPERTY ('ServerName') est censé retourner le nom de l'ordinateur, alors j'ai pensé que je pourrais peut-être l'utiliser pour automatiser la deuxième partie, mais cela n'a pas fonctionné:

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

J'ai essayé de définir une variable, ce que je dois faire de toute façon pour mettre à jour les travaux de l'Agent SQL, mais cela n'a pas fonctionné non plus:

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

Syntaxe incorrecte près de 'sp_addserver'.

J'aimerais beaucoup ne pas avoir à coder en dur le nouveau nom de serveur dans le script, pour le rendre plus facilement réutilisable. Quelqu'un a des idées?

Scott
la source
1
Pouvez-vous ajouter EXEC avant sp_addserver et voir si cela aide?
Sankar Reddy
Cela l'a fait fonctionner. :)
Scott

Réponses:

6

Voici un script pour faire ce que vous voulez:

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édits: http://www.myitforum.com/articles/5/view.asp?id=4983

magma
la source
1
Presque, mais @ var1 doit être supprimé et @ var2 ajouté. @@ ServerName renvoie le nom de l'instance SQL Server, tandis que SERVERPROPERTY ('MachineName') renvoie le nom de l'ordinateur.
Scott
1

Avec l'aide de magma et de Sankar Reddy, voici le script fini:

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'article que le magma a trouvé contenait une petite erreur, à savoir qu'il essayait de supprimer le nouveau nom et d'ajouter l'ancien nom au lieu de supprimer l'ancien nom et d'ajouter le nouveau nom. J'ai également ajouté une requête de mise à jour pour corriger les travaux de l'agent SQL. Notez que cela ne fonctionne correctement qu'avec le serveur maître dans un environnement multi-serveurs. Mon environnement est un environnement à serveur unique, il fonctionne donc dans ma situation.

Scott
la source
-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
la source
En quoi est-ce différent des autres réponses (acceptées)?
Sven