Automatizando a renomeação de um SQL Server

10

Estamos substituindo nosso SQL Server e decidimos que renomear o próprio servidor será muito mais fácil do que alterar todo o resto para apontar para um novo nome. Encontramos instruções sobre como alterar o nome da instância do SQL Server para corresponder ao nome do computador que se parece com isso:

sp_dropserver 'OLDSERVER'
sp_addserver 'NEWSERVER', local

Embora o SQL Enterprise Manager não pareça gostar deles juntos. Eu tive que mudar para o seguinte para fazê-lo funcionar em conjunto:

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

O que não é ruim, mas eu preferiria que as coisas fossem mais automatizadas. Como @@ ServerName retorna o nome da instância, eu descobri como automatizar a primeira linha:

sp_dropserver @@ServerName; GO

Aprendi também que SERVERPROPERTY ('ServerName') deve retornar o nome do computador, então pensei que talvez pudesse usá-lo para automatizar a segunda parte, mas isso não funcionou:

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

Tentei definir uma variável, o que preciso fazer de qualquer maneira para atualizar os trabalhos do SQL Agent, mas isso também não funcionou:

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

Sintaxe incorreta perto de 'sp_addserver'.

Eu gostaria muito de não precisar codificar o novo nome do servidor no script, para tornar isso mais facilmente reutilizável. Alguém tem alguma idéia?

Scott
fonte
1
Você pode adicionar o EXEC antes do sp_addserver e ver se isso ajuda?
Sankar Reddy 25/05
Isso fez funcionar. :) #
Scott

Respostas:

6

Aqui está um script para fazer o que você deseja:

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
fonte
1
Quase, mas @ var1 deve ser eliminado e @ var2 adicionado. @@ ServerName retorna o nome da instância do SQL Server, enquanto SERVERPROPERTY ('MachineName') retorna o nome do computador.
26511 Scott
1

Com a ajuda do magma e Sankar Reddy, aqui está o script final:

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

O artigo que o magma encontrou teve um pequeno erro, que era o de tentar soltar o novo nome e adicionar o nome antigo em vez de soltar o nome antigo e adicionar o novo nome. Também adicionei uma consulta de atualização para corrigir os trabalhos do agente SQL. Observe que isso funciona corretamente somente no servidor mestre em um ambiente com vários servidores. Meu ambiente é um ambiente de servidor único, portanto funciona para minha situação.

Scott
fonte
-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
fonte
Como isso é diferente das outras respostas (aceitas)?
Sven