Estou criando um perfil de email para email de banco de dados em um script que precisa ser executado em mais de 200 instâncias. O script criará um perfil de e-mail de banco de dados para enviar alertas de trabalhos de agente. Existe uma maneira de passar por todos os trabalhos que existem em uma instância e alterar um parâmetro para que ele use o novo perfil de e-mail que criei em vez do perfil de e-mail que está usando atualmente? (bônus adicionado se depois eu puder limpar todos os perfis de e-mail não utilizados)
DECLARE @sb INT;
DECLARE @sc INT;
SET @sb =
(
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'
);
SET @sc =
(
SELECT CONVERT(INT, value_in_use)
FROM sys.configurations
WHERE name = 'Database Mail XPs'
);
IF (@sb = 1 AND @sc = 1)
BEGIN
PRINT 'Creating email profile';
DECLARE @account_id INT;
EXEC msdb.dbo.sysmail_add_account_sp @account_name = 'DatabaseServices - SQLMail Account',
@display_name = N'XXX - Database Services',
@replyto_address = N'[email protected]',
@description = N'SQL Server generated email from databases services team',
@mailserver_name = 'yyy.xxx.pvt',
@email_address = '[email protected]',
@port = 25,
@account_id = @account_id OUTPUT;
END
Acho que o que você está procurando é msdb.dbo.sysjobs e o
notify_email_operator_id
campo especificamente. Se você puder obter o ID do perfil após a criação, provavelmente precisará atualizar assysjobs
referências da tabela em uma únicaUPDATE
instrução, em cada instância em que executar seu script.Um trabalho não se refere a um perfil. Um trabalho refere-se a um operador.
A configuração do agente SQL Server refere-se a um "Perfil de email". Na GUI, você configura isso fazendo "Propriedades, Sistema de Alerta" para o Agente.
Ou seja, não está claro se você deseja alterar o Perfil de Correio para todos os seus Agentes ou se é o operador que deseja modificar.
Veja a resposta do JD como ponto de partida se for o Operador que você deseja alterar.
Se for o Mail Profile, tudo o que você precisa fazer é executar um xp, como no exemplo abaixo: