SQL Server 2008 R2: Problemas após a alteração do nome do computador

10

Estou tendo um problema confuso depois de alterar o nome do computador de um servidor remoto que hospeda uma instância local do SQL Server.

Basicamente, um servidor remoto foi movido de um site para outro. Para facilitar isso, fiz backup e restaurei o banco de dados antigo para um novo nome de banco de dados, limpando os dados para que pudessem ser usados ​​como um novo banco de dados para o software cliente. Também mudei o nome do computador, como sempre fazemos para identificar cada servidor pelo número do site.

O banco de dados pode ser conectado corretamente pelo software cliente, e posso efetuar login diretamente no SQL Server. No entanto, um dos meus trabalhos do SQL Server Agent falha, com um erro no log de eventos:

Tarefa agendada do SQL Server 'Redefinição noturna' (0x4F76FDFFF6DFFE4EA0DE4A70252AD3BD) - Status: com falha - Invocada em: 2012-02-07 08:10:05 - Mensagem: A tarefa falhou. Não foi possível determinar se o proprietário (Site-19 \ Admin) da tarefa Redefinição Noturna tem acesso ao servidor (motivo: não foi possível obter informações sobre o grupo / usuário do Windows NT 'Site-19 \ Admin', código de erro 0x534. [SQLSTATE 42000] ( Erro 15404)).

Agora, 'Site-19' é o nome antigo do computador, que foi alterado, e o servidor foi redefinido. Eu me conecto manualmente usando 'Site-28', o novo número do site, e ele me mostra estar conectado ao SQL Server com Site-28 \ Admin. No entanto, quando olho para as propriedades do trabalho do agente, ele mostra o proprietário como Site-19 \ Admin, e quando tento procurar usuários para alterá-lo, Site-28 \ Admin não aparece como opção , apenas Site-19 \ Admin. Se eu criar um novo trabalho com este script e alterar manualmente o proprietário para 'Site-28 \ Admin', o novo trabalho será criado com o proprietário 'Site-19 \ Admin'.

Procurando em sys.servers (ou via sp_helpserver), só tenho uma entrada: o nome do computador atual. No entanto, SELECT @@ SERVERNAME retorna o nome da máquina de desenvolvimento original (duas alterações de nome atrás).

Em resumo, não consigo executar este importante trabalho do SQL Server Agent porque ele pertence a um usuário que não existe mais e não consigo descobrir como alterá-lo ou criá-lo como o usuário correto.

Geo Ego
fonte
Obrigado pelo link. Por sua sugestão, perguntei lá também. Eu acho que é válido aqui também, pois enquanto a pergunta estiver mais relacionada à infraestrutura, a resposta provavelmente envolverá código, e também há muitas perguntas sobre a metodologia do SQL Server.
Ego Geo
E o que acontece se você soltar o servidor 'Site-28'? O que exibe sp_helpserver? Você não pode simplesmente excluir um trabalho antigo e criar um novo?
11
Curiosamente, quando tento soltar o 'Site-28', ele diz que não pode ser encontrado. Quando tento adicioná-lo, ele diz que já existe. Se eu criar o trabalho novo, seja por meio do assistente ou por script do original, ele sempre o cria com 'Site-19 \ Admin' como proprietário.
Ego Geo
Portanto, o servidor físico antigo recebeu um novo nome (e essa alteração também foi feita no DNS) e SELECT @@ SERVERNAME na caixa renomeada retorna seu novo nome?
jl01
11
Mesclei a pergunta transferida nesta, para que todas as respostas sejam consolidadas.
jcolebrand

Respostas:

7

Quando você adicionou o novo nome do servidor usando sp_addserver, lembrou-se de incluir a designação "local". É essa tag que atualiza os metadados para @@ SERVERNAME. Mais Informações.

sp_addserver 'servername', local
Brian Knight
fonte
Apenas uma nota que @@ServerNamenão atualizar até que eu reiniciado SQL Server
fiat
7

Encontrei a resposta ontem com a ajuda de um amigo meu. Eu tive que fazer login via SSMS com um usuário que não fosse o login do Windows que estava tentando usar, excluir o login antigo e adicionar meu login do Windows novamente. Depois disso, consegui transferir a propriedade do trabalho corretamente, o SQL conseguiu obter os dados do usuário do Windows e tudo estava bem com o mundo.

Geo Ego
fonte
Apliquei a resposta desta AND @ brian-knight. Para alterar as propriedades do banco de dados, usei isso SELECT 'use ' + DB_NAME(database_id) + ';EXEC sp_changedbowner ''sa'';' FROM sys.databases where DB_NAME(database_id) like 'MyDbs%';. Depois disso, fui capaz de descartar o logon ruim
fiat
4

Eu uso o seguinte para identificar problemas e criar as instruções drop e add corretas, se você ficar com tudo OK, não precisará fazer nada, caso contrário, precisará executar os comandos.

declare @currentName as nvarchar(128)
declare @newName as varchar(max)
declare @serverName as varchar(max)
declare @serverInstance as varchar(max)

select  @currentName = @@SERVERNAME
select @serverInstance = cast(serverproperty('InstanceName') as varchar(max))
select  @serverName = cast(serverproperty('MachineName') as varchar(max))

set @newName = @serverName

if (@serverInstance <> '') 
begin
      set @newName = @serverName + '\' + @serverInstance
end

if (@currentName <> @newName)
Begin
      print 'sp_dropserver ''' + @currentName + '''';
      print 'go'
      print 'sp_addserver ''' + @newName + ''',local'
      print 'go'
end
else
Print 'ALL OK'
Mike Miller
fonte
Usando esse script, consegui identificar que precisava soltar manualmente o nome do servidor antigo e adicionar o novo. Fiz isso, mas ainda tenho os mesmos problemas.
Geo Ego
Você reiniciou a instância?
Sim, a instância foi reiniciada posteriormente.
Ego Geo
Desculpe cara tem que se curvar, não tenho certeza qual pode ser o problema.
0

Teve um problema semelhante: alterou o nome do host de um computador em que o SQL Server e o SQL Server Agent estão em execução. Os trabalhos foram atribuídos a. Depois de criar um usuário temporário / logon no SSMS usando esse novo usuário temporário / soltar e criar o nome de login (public e sysadmin privs!) / Redesignar os trabalhos para esse login recriado, tudo estava bem. Talvez você possa manipular uma tabela do sistema para refletir a mesma alteração; mas o método acima não é tão arriscado.

Martin Bruegger
fonte