Olá pessoal,
A dica de hoje pode ser raro de encontrar no dia-a-dia, mas você pode passar por ele em algum momento, por exemplo, ao levar o banco msdb de uma instância X para uma Y, ou seja, instâncias de versões iguais, mas uma nova instalação.
Cenário
Ao acessar o SQL Server Error Log, você observa o registro da mensagem de erro a seguir diversas vezes:
“The activated proc ‘[dbo].[sp_syspolicy_events_reader]’ running on queue ‘msdb.dbo.syspolicy_event_queue’ output the following: ‘Cannot execute as the database principal because the principal “##MS_PolicyEventProcessingLogin##” does not exist, this type of principal cannot be impersonated, or you do not have permission.'”
Sintoma
Acesse o banco de dados msdb e execute o seguinte comando:
1 2 3 4 |
USE msdb; GO exec sp_change_users_login 'report'; GO |
É bem provável que será retornado que o usuário ##MS_PolicyEventProcessingLogin## encontra-se órfão.
Solução
A solução é bem simples, mas ocorre que ao mover o msdb para uma outra instância, então o login ##MS_PolicyEventProcessingLogin## possui internamente um SID diferente do usuário localizado no banco msdb. Você precisa apenas, atualizar esse SID e o comando será o seguinte:
1 2 3 4 5 6 7 8 |
use msdb; GO EXEC sp_change_users_login 'Update_One', '##MS_PolicyEventProcessingLogin##','##MS_PolicyEventProcessingLogin##'; GO -- Opcionalmente, execute a procedure abaixo para fazer um recycle do Error log -- que pode estar com bastante mensagens de erro © este momento. exec sp_cycle_errorlog; GO |
Acesse novamente o SQL Server Error Log e você irá verificar que as mensagens de erro se findaram!
Espero que esta dica, possa ter contribuÃdo para o seu dia a dia.
Vithor da Silva e Silva | Consultor e Instrutor | SQL Server e Power BI
vithor@vssti.com.br