Задание агента SQL Server Уведомить несколько операторов о сбое

Я не мог найти простой способ добиться этого. Но после нескольких повторений попыток это то, что я сделал, и его работа над огромным списком запросов. В основном мы использовали это для пакетной операции для огромного запроса в нескольких подзапросах.

// Break down your huge workload into smaller chunks, in this case huge query string is broken 
// down to a small set of subqueries
// Here if needed to optimize further down, you can provide an optimal partition when parallelizing
val queries = sqlContext.sparkContext.parallelize[String](subQueryList.toSeq)

// Then map each one those to a Spark Task, in this case its a Future that returns a string
val tasks: RDD[Future[String]] = queries.map(query => {
    val task = makeHttpCall(query) // Method returns http call response as a Future[String]
    task.recover { 
        case ex => logger.error("recover: " + ex.printStackTrace()) }
    task onFailure {
        case t => logger.error("execution failed: " + t.getMessage) }
    task
})

// Note:: Http call is still not invoked, you are including this as part of the lineage

// Then in each partition you combine all Futures (means there could be several tasks in each partition) and sequence it
// And Await for the result, in this way you making it to block untill all the future in that sequence is resolved

val contentRdd = tasks.mapPartitions[String] { f: Iterator[Future[String]] =>
   val searchFuture: Future[Iterator[String]] = Future sequence f
   Await.result(searchFuture, threadWaitTime.seconds)
}

// Note: At this point, you can do any transformations on this rdd and it will be appended to the lineage. 
// When you perform any action on that Rdd, then at that point, 
// those mapPartition process will be evaluated to find the tasks and the subqueries to perform a full parallel http requests and 
// collect those data in a single rdd. 

Если вы не хотите выполнять какие-либо преобразования на контенте, такие как разбор полезной нагрузки ответа и т. д. Затем вы можете использовать foreachPartition вместо mapPartitions для немедленного выполнения всех этих http-вызовов.

29
задан Mike 15 September 2011 в 13:28
поделиться

6 ответов

Вопрос: Можно ли настроить уведомление по электронной почте, отправляемое нескольким операторам для этой конкретной работы?

Я не верю, что это возможно.

Конечно, глядя на структуру [msdb].[dbo].[sysjobs], различные столбцы operator_id находятся в самой этой таблице, что подтверждает идею, что 1 для многих невозможна.

Но некоторые альтернативы

  1. Вы можете создать новый оператор со списком адресов электронной почты, разделенным точкой с запятой. Глядя на определение sysoperators, это хорошо для строк, которые могут вписаться в nvarchar(100)
  2. , если вам нужно превзойти то, что вы, вероятно, могли бы создать группу рассылки электронной почты при обмене или что-то еще.
31
ответ дан Martin Smith 15 September 2011 в 13:28
поделиться

Если предполагается, что несколько человек в вашей организации должны быть уведомлены о сбое задания, вы можете изменить адрес электронной почты оператора, включив в него несколько почтовых ящиков, разделив каждый почтовый ящик точкой с запятой.

Я предполагаю, что ваш уведомленный оператор называется JobWatcher:

EXECUTE msdb.dbo.sp_update_operator
  @name = N'JobWatcher',
  @email_address = N'person1@company.org;person2@company.org';

Теперь person1@company.org и person2@company.org будут получать почту при сбое задания.

27
ответ дан Iain Samuel McLean Elder 15 September 2011 в 13:28
поделиться

Пожалуйста, используйте скрипт ниже, чтобы увеличить длину символа адреса электронной почты. USE mdsdb GO ALTER TABLE sysoperators ALTER column email_address NVARCHAR(2000);

1
ответ дан JERRY 15 September 2011 в 13:28
поделиться

Простейший метод, который я использую для уведомления нескольких "OPERATORS" на "JOB FAILURE", заключается в следующем:

В SSMS>SQL Server Agent>Operators создайте новый OPERATOR или EDIT существующий и добавьте дополнительные адреса электронной почты, разделенные ; в рамке "E-mail name:".

21
ответ дан SilverlightFox 15 September 2011 в 13:28
поделиться

Так что это то, что я придумал в качестве обходного пути, если намерение состоит в том, чтобы несколько человек в вашей организации были уведомлены о неудачной работе, а другая группа из нескольких человек - об успехах.

Вы заметите, что Шаги 1-3 являются обычными задачами, для которых используется задание по расписанию, как и для вашей задачи. Перед этим может быть столько шагов, сколько необходимо, но последний шаг (Шаг 3) процесса должен быть разбит на «В случае успеха» и «В случае отказа», чтобы перейти к отдельным электронным письмам. Кроме того, все сообщения «О сбоях» должны быть направлены на ваш «Email о сбое», как указано ниже. Таким образом, группа Failure получает туда электронные письма, и работа по-прежнему не выполняется для исторических записей.

1.1

На вкладке «Дополнительно» шагов «Работа» вы увидите возможность изменить направление действий «В случае успеха» и «В случае отказа».

2

Fail Email Email Step - общее свойство

3

Fail Email Email Step - свойство Advanced

4

Успешный шаг электронной почты - общее свойство

5

Успешный шаг электронной почты - предварительное свойство

6

Для других нуждающихся в помощи. Уведомление нескольких операторов с результатами различий

3
ответ дан dbahiker 15 September 2011 в 13:28
поделиться

Рекомендуется создать группу на своем почтовом сервере, отправить уведомления группе, а затем контролировать количество получателей с почтового сервера.

11
ответ дан Mackin 15 September 2011 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: