简体   繁体   English

如何在所有SQL作业上添加操作员和电子邮件通知?

[英]How to add operator and email notification on all the SQL jobs?

To be more proactive and responsive to the job issues or failures I want to set an alert, add operator and send the notification(to me) when a job fails. 为了更主动地响应工作问题或失败,我想设置警报,添加操作员,并在工作失败时发送通知(给我)。 I know Operator and notification can be added through SSMS GUI but its a very time-consuming process and can be prone to errors so I am trying to do it through scripting. 我知道可以通过SSMS GUI添加操作员和通知,但这是一个非常耗时的过程,并且容易出错,因此我尝试通过脚本来实现。 The following script gives me jobs: 以下脚本为我提供了工作:

USE msdb
SELECT sj.name AS JobName,
    CASE
    WHEN sj.enabled = 1 THEN 'Enable'
    ELSE 'Disable'
    END AS JobStatus,
    sj.description AS JobDescription,
    ss.name AS JobScheduleName,
    CASE
    WHEN ss.enabled = 1 THEN 'Enable'
    WHEN ss.enabled = 0 THEN 'Disable'
    ELSE 'Not Schedule'
    END AS JobScheduleStatus, 
    --ss.active_start_date AS ActiveStartDate,
    --ss.active_end_date AS ActiveEndDate,
    --ss.active_start_time AS ActiveStartTime,
    --ss.active_end_time AS ActiveEndTime,
    sh.step_name AS StepName,
    Case 
       sh.run_status WHEN 0 THEN 'Failed'
       WHEN 1 THEN 'Success'
       WHEN 2 THEN 'Retry'
       WHEN 3 THEN 'Canceled'
       WHEN 4 THEN 'In Progress' END AS Status,
    dbo.agent_datetime(run_date, run_time) As Last_Run_DateTime,
    sh.run_duration AS RunDuration,
     ((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31) / 60) as 'RunDurationMinutes'
FROM dbo.sysjobs AS sj
LEFT JOIN dbo.sysjobschedules AS sjs ON sj.job_id = sjs.job_id
LEFT JOIN dbo.sysschedules AS ss ON sjs.schedule_id = ss.schedule_id
LEFT JOIN dbo.sysjobhistory AS sh ON sj.job_id = sh.job_id

I also made an attempt in adding operator, please correct me if I am doing it wrong. 我也尝试添加运算符,如果我做错了,请纠正我。

DECLARE @Operator varchar(50)
SET @Operator = 'Emamr'
SELECT  sj.job_id AS JobID,
        sj.name AS JobName,
        sj.description AS JobDescription,
        ----adding operator using SP----
       'EXEC sp_update_job @job_name = ''' + sj.[name] + 
       ''', @notify_email_operator_name = ''' + @Operator  +
       ''', @notify_level_email = 2' As OperatorAdded  -- 1 = On Success, 2 = On Failure,3=always
FROM dbo.sysjobs sj
WHERE sj.enabled = 1 
AND sj.notify_level_email <> 1

After adding the operator I need to set an email notification and I dont know how to do that in one script. 添加操作员后,我需要设置一封电子邮件通知,但我不知道如何在一个脚本中执行此操作。 Any help or guidance will be appreciated 任何帮助或指导将不胜感激

I'd do this with powershell myself: 我自己用powershell做到这一点:

import-module sqlps;
$s = 'someServerName'
$operator = @{Name = 'foo'; EMail = 'foo@bar.com'};

# no changes necessary below here

$serv = new-object Microsoft.SqlServer.Management.Smo.Server $s;
$js = $serv.JobServer;
$opers = $js.Operators;
if ( $opers -eq $null -or $opers[$operator.Name] -eq $null ) {
    $oper = new-object Microsoft.SqlServer.Management.Smo.Agent.Operator( $js, $operator.Name);
    $oper.EmailAddress = $operator.EMail;
    $oper.Create();
}

$jobs = $js.Jobs
foreach ( $job in $jobs ) {
    $job.OperatorToEmail = $Operator.Name;
    $job.EmailLevel = 'OnFailure';
    $job.Alter();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM