24.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Скрипт отправки почты в случае, если нет данных
logoffДата: Четверг, 23.01.2014, 12:15 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Для Версии BNC 2.x - где есть SQL база данных

Код
use BNComplex

declare @current datetime

declare @currentUTC datetime
set @current=(select dateadd(mi,-2,getdate())) -- указываем допустимый порог в минутах минус от системного, после чего будет Alarm - 2 минуты
set @currentUTC=(select DATEADD(HH,-4,@current)) -- сдвигаем время на Гринвича

declare @maxnavtime datetime
set @maxnavtime=(select MAX (NavTime) from ObjectsCoords)

if @maxnavtime <=@currentUTC EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'srvt', --сначала надо настроить компонент sql Database Mail
@recipients = '[u]my_mail@mail.ru; my_mail2@mail.ru ', --указываем список адресов рассылки
@body = 'Отсутствие новых данных от приборов!!!' else print 'good'


Для работы требуется настроенный Компонент database mail (входит в состав SQL standart и выше)
Имя профиля srvt  - указано в скрипте

http://habrahabr.ru/post/132902/

Скрипт используется в задании (Job), с периодом запуска раз в минуту.
 
(hesДата: Четверг, 23.01.2014, 15:30 | Сообщение # 2
Тамбов
Группа: Проверенные
Сообщений: 2
Репутация: 0
Статус: Offline
Немного изменённый код. Встроен механизм проверки, при котором сообщение не будет отсылаться чаще чем 1 раз в полчаса, чтобы сильно не спамить.
Для этого необходимо создать вспомогательную таблицу dbo.MailHistory

Код
USE
[BNComplex]GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[MailHistory](
  [SendDate][datetime]NOT NULL,
CONSTRAINT [PK_SendDate] PRIMARY KEY CLUSTERED
(
[SendDate]ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON
[PRIMARY]) ON

[PRIMARY]GO

и единоразово туда произвести insert в поле SendDate, например:

Код
INSERT INTO [BNComplex].[dbo].
[MailHistory]([SendDate])
VALUES
(GETDATE())
GO

Необходимо это для того, чтобы было с чем сверяться.

Код
use BNComplex

declare @currentUTC datetime
declare @current datetime
declare @SendTime datetime
set @current=GETDATE()
set @currentUTC=(select dateadd(mi,-2,GETUTCDATE()))  -- указываем допустимый порог в минутах минус от системного по гринвичу, после чего будет Alarm - 2 минуты
set @SendTime=(select SendDate from dbo.MailHistory)

declare @maxnavtime datetime
set @maxnavtime=(select MAX (NavTime) from ObjectsCoords)

if @maxnavtime <=@currentUTC
and DATEDIFF (mi,@SendTime, @current) >30  -- здесь как раз мы задаём условие что письмо повторно отправляется только по истечении 30-ти минут с момента отправки предыдущего
BEGiN
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'srvt',
@recipients = '[u]my_mail@mail.ru; [url=mailto:my_mail2@mail.ru]my_mail2@mail.ru ', --указываем список адресов рассылки
@body = 'Отсутствие новых данных от приборов!!!'

update MailHistory set SendDate=GETDATE() --запишем новое время отправки последнего e-mail

END
else print 'good'


Сообщение отредактировал (hes - Четверг, 23.01.2014, 15:32
 
  • Страница 1 из 1
  • 1
Поиск:

LogOff © 2024
Сайт создан в системе uCoz Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС