Um problema do “cão” me perseguiu em uma consultoria e também o Zavaschi num treinamento, onde não conseguíamos trabalhar com replicação do SQL Server com computadores que tiveram seus nomes alterados.
No caso do Zavaschi, foi porque as VMs do treinamento tinham o mesmo nome e MAC Address, fazendo o servidor DHCP entender que todas VMs eram um computador só. Assim foi necessário mudar o nome das VMs e o MAC Address de suas placas de redes “virtuais”.
No meu caso foi mais simples, alguém instalou o SQL Server e depois mudou o nome do computador.
Mas tanto no meu caso e no caso do Zavaschi, a replicação não funcionava mais…
Foi então que uma luz do submundo do SQL Server nos revelou uma system view das trevas chamada de “sys.servers”, executando um SELECT nela e o que vimos? O nome antigo do servidor ainda estava guardado dentro do SQL Server, what hell was that !?!?
SELECT * FROM sys.servers
Outra luz vinda do submundo nos revelou a solução… Vamos matar o servidor e criar outro!!! Não pegamos os machados e picaretas para atacar o servidor! Mas utilizamos algo pior, usamos o SQL…
EXEC sp_dropserver 'nome_antigo_do_computador'
GO
EXEC sp_addserver 'nome_atual_do_computador ', LOCAL
GO
Reiniciamos o serviço do SQL Server. Daí eu pensei: se não funcionar, estarei no inferno mesmo! Mas felizmente o SQL conseguiu realizar o procedimento corretamente… Ufa…
Depois disso a replicação começou a funcionar corretamente.
Mas minha mente insana teimou por testar uma situação: Se eu somente executar o sp_dropserver (ou executar errado o sp_addserver), depois reiniciar o serviço, o que vai acontecer?
Claro que executei isso em um SQL Server pessoal, daí matei o SQL Server e a partir daí, nem o SQL Server Management Studio funcionava mais com este serviço…
Tive de optar por outra solução, gerei um arquivo SQL com esta query:
EXEC sp_addserver 'nome_atual_do_computador ', LOCAL
GO
E na pasta do “C:\Arquivos de programas\Microsoft SQL Server\90\Tools\Binn”, executei o osql.exe com o arquivo SQL, utilizando o seguinte comando DOS:
osql -U usuario_sa -P senha_do_usuario_sa -i nome_do_arquivo
Reiniciei o serviço do SQL Server 2005 novamente, e as coisas começaram a rodar corretamente.
Pronto! Agora eu podia matar o servidor sem medo!rsss