我正在为需要在 200 多个实例上运行的脚本中的数据库电子邮件创建电子邮件配置文件。该脚本将创建一个数据库电子邮件配置文件,以从代理作业发送警报。有没有办法遍历实例上存在的所有作业并更改参数,以便它将使用我创建的新电子邮件配置文件而不是当前使用的电子邮件配置文件?(如果之后我可以清理所有未使用的电子邮件配置文件,则额外奖励)
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
我认为您正在寻找的是msdb.dbo.sysjobs和
notify_email_operator_id
专门的领域。如果您可以在创建后获取配置文件的 ID,那么您可能只需要sysjobs
在单个UPDATE
语句中更新表引用,在您运行脚本的每个实例上。工作不涉及个人资料。工作是指操作员。
SQL Server 代理的配置是指“邮件配置文件”。在 GUI 中,您可以通过为代理执行“属性,警报系统”来配置它。
即,不清楚您是要更改所有代理的邮件配置文件,还是要修改它是操作员。
如果要更改的是 Operator,请参阅 JD 答案作为起点。
如果是邮件配置文件,您所要做的就是执行一个 xp,如下例所示: