Отправка уведомления по электронной почте при сбое задания не работает

  1. Подготовил скрипты для сисадмина, для создания и настройки почтового профиля базы данных, аккаунта и оператора. Он запустил скрипт, поэтому я создал временное задание, которое не работает. Затем я устанавливаю уведомление по электронной почте, когда задание не выполняется. Я запускаю задание, но электронная почта не отправляется. Затем я попытался запустить процедуру msdb.dbo.sp_send_dbmail, используя того же оператора, и получил электронное письмо. Что может быть причиной того, что электронная почта не отправляется при сбое задания? Какая процедура выполняется в случае использования уведомления по электронной почте в случае сбоя задания - отличается ли она от sp_send_dbmail?

  2. Другое дело, что в логе почты базы нет информации о статусе отправки писем (он пустой) - может у меня нет прав на просмотр лога?

  3. Я установил профиль как общедоступный, запустив dbo.sysmail_add_principalprofile_sp procedure, но когда я пытаюсь отправить электронное письмо под управлением msdb.dbo.sp_send_dbmail, зарегистрированного как dbowner, я получаю сообщение об ошибке: Разрешение EXECUTE было отклонено.. Почему это работает только тогда, когда Я зарегистрирован как мой пользователь?

Я использую SQL Server 2008.

Вот код T-SQL, который я передал системному администратору для создания и настройки почты базы данных.

-- Create a Database Mail account

EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'Mail Account',
    @description = 'Mail account for administrative e-mail.',
    @email_address = '[email protected]',
    @display_name = 'Job failure notification',
    @mailserver_name = 'xx.xx.xxx' ,
    @username = 'aaa',
    @password = 'xxx'

-- Create a Database Mail profile


 EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'Database Mail Profile',
    @description = 'Profile used for job failure notifications.' ;

-- Add the account to the profile


EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'Database Mail Profile',
    @account_name = 'Mail Account',
    @sequence_number =1 ;

-- Enable Mail profile in SQL Agent


EXEC master.dbo.xp_instance_regwrite 
      N'HKEY_LOCAL_MACHINE', 
      N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent', 
      N'DatabaseMailProfile', 
      N'REG_SZ', 
      N'Database Mail Profile'
GO

-- Create new operator


EXEC msdb.dbo.sp_add_operator @name=N'SQL Job Failure', 
            @enabled=1, 
            @weekday_pager_start_time=90000, 
            @weekday_pager_end_time=180000, 
            @saturday_pager_start_time=90000, 
            @saturday_pager_end_time=180000, 
            @sunday_pager_start_time=90000, 
            @sunday_pager_end_time=180000, 
            @pager_days=0, 
            @email_address=N'[email protected]', 
            @category_name=N'[Uncategorized]'
GO

-- Setting profile as public

EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'Database Mail Profile',
    @principal_name = 'public',
    @is_default = 0 ;

person Konrad Z.    schedule 04.04.2013    source источник


Ответы (1)


Я думаю, вам нужно перезапустить агент SQL после выполнения этих сценариев. Проверять

  • что установлено на странице уведомления о вакансиях - должен быть установлен флажок электронной почты и должен быть определен оператор
  • Щелкните правой кнопкой мыши агент Sql -> Свойства - Настройки предупреждений - необходимо указать настройки электронной почты.

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

person dferidarov    schedule 04.04.2013
comment
Здравствуйте, dferidarov, спасибо за ваш ответ. К сожалению, я не могу проверить все с помощью графического интерфейса (нет разрешений). Я прикрепил код T-SQL, который был запущен для создания почты базы данных. Но, возможно, вы правы, что для этого требуется SQL Agent - я проверю. - person Konrad Z.; 04.04.2013
comment
К сожалению, это не помогло. Это очень странно, потому что в тестовой среде запуск этого сценария и перезапуск агента SQL вызывает отправку электронной почты при сбое задания. Я понятия не имею, где проблема. - person Konrad Z.; 05.04.2013
comment
Вы проверили статью, которую я разместил в своем ответе, на наличие чего-либо пропущенного (например, Свойства агента Sql-> Настройки предупреждений)? - person dferidarov; 05.04.2013
comment
Да, но у меня нет разрешения проверить, включен ли правильный профиль в агенте SQL. Но вы можете быть правы, что, вероятно, проблема в этом. Я проверил, что часть моего скрипта, отвечающая за включение профиля в SQL Agent, работает правильно только в том случае, если для SQL Agent еще не назначен другой профиль. Если есть, он не перезапишет текущий. - person Konrad Z.; 05.04.2013
comment
Я думаю, что по умолчанию эти настройки оповещения агента SQL не настроены ни для одного почтового профилировщика. - person dferidarov; 05.04.2013
comment
Но кто-то до меня мог добавить профиль. Насколько я вижу, в системной таблице уже создан почтовый профиль базы данных, отличный от моего. Я предполагаю, что он также назначен профилю агента SQL, и поэтому мой скрипт не работает. - person Konrad Z.; 05.04.2013
comment
Почтовый профиль базы данных правильно назначен агенту SQL. Возможно, вы знаете, в рамках каких пользовательских электронных писем отправляются (с точки зрения использования их в качестве уведомлений о работе)? - person Konrad Z.; 08.04.2013
comment
Чтобы отправлять почту базы данных, вы должны быть членом роли базы данных DatabaseMailUserRole в базе данных msdb. - из msdn. Также проверьте следующие ссылки Устранение неполадок почты базы данных и Настройка агента SQL - person dferidarov; 08.04.2013
comment
Я добавил dbowner в DatabaseMailUserRole и создал задание, зарегистрировавшись как dbowner, но это не помогло. По-прежнему можно отправлять электронные письма только с помощью процедуры sp_send_dbmail. Для уведомления о задании я получаю: ПРИМЕЧАНИЕ. Не удалось уведомить «‹имя оператора›» по электронной почте. - person Konrad Z.; 08.04.2013
comment
Я понял - проверьте, включил ли агент sql систему оповещений. Проверьте настройки по link1 , ссылка2. - person dferidarov; 08.04.2013
comment
Да, агент SQL включил систему оповещения. И его уже перезапускали, но все равно та же проблема. - person Konrad Z.; 08.04.2013
comment
У меня кончаются идеи... Проверьте журнал DB Mail с помощью SELECT * FROM msdb.dbo.sysmail_event_log; и прочитайте ссылку, которую я разместил — Устранение неполадок в почте базы данных, пытаясь устранить неполадки с самого начала. - person dferidarov; 08.04.2013