Automatizando a renomeação de um SQL Server

9

Estamos no processo de substituir nosso SQL Server e decidimos que renomear o servidor em si será muito mais fácil do que mudar todo o restante 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 desses juntos. Eu tive que mudá-lo 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, descobri como automatizar a primeira linha:

sp_dropserver @@ServerName; GO

Eu também aprendi que SERVERPROPERTY ('ServerName') deveria retornar o nome do computador, então eu pensei que poderia usar isso para automatizar a segunda parte, mas isso não funcionou:

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

Eu 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 próxima a 'sp_addserver'.

Eu gostaria muito de não precisar codificar o novo nome do servidor no script, para torná-lo mais facilmente reutilizável. Alguém tem alguma ideia?

    
por Scott 26.05.2011 / 00:23

3 respostas

5

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

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: link

    
por 26.05.2011 / 01:43
1

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

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 tinha um pequeno erro nele, que era tentar soltar o novo nome e adicionar o nome antigo em vez de soltar o nome antigo e adicionar o novo nome. Eu também adicionei uma consulta de atualização para corrigir os trabalhos do agente SQL. Observe que isso só funciona corretamente no servidor mestre em um ambiente com vários servidores. Meu ambiente é um ambiente de servidor único, por isso funciona para minha situação.

    
por 26.05.2011 / 16:56
-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
    
por 01.01.2016 / 14:46