Назад | Перейти на главную страницу

Предупреждение об истечении срока подписки на репликацию SQL Server 2005

На этой неделе истек срок действия одной из моих подписок на репликацию, потому что я не получал никаких предупреждений о том, что произошла ошибка входа в систему (я исправил эти предупреждения и ошибку). Сейчас я бы хотел, чтобы в случае, если это повторится снова, можно было отправить предупреждение о том, что срок действия подписки истекает (т. Е. Истекает через 1 или 2 дня). У меня есть оповещение об истечении срока подписки, но это уже постфактум. Я просмотрел sys.messages на предмет любого текста, в котором есть «Expir», но я еще не нашел подходящий код ошибки. Сможет ли кто-нибудь указать мне правильное направление?

Спасибо.

Идентификатор события, который, как мне кажется, вы ищете, - 14160. Вы можете настроить оповещение агента SQL Server, которое срабатывает при возникновении этого события, и вы можете настроить агент для отправки вам электронной почты или пейджинга.

Вот информация о мероприятии: http://msdn.microsoft.com/en-us/library/aa337416.aspx

Вот несколько инструкций по настройке оповещения: http://technet.microsoft.com/en-us/library/ms175076.aspx

Вот, пожалуйста ... Я бы так и поступил ... вам понадобится DB Mail и профиль, созданный и измените эти разделы в соответствии с вашей средой ниже ... также измените переменную @ MaxOfflineInHours = на любое количество часов бездействия, о которых вы хотели бы предупредить ... Создайте хранимую процедуру usp_GetExpiringSubscribersList, затем поместите сценарий электронной почты ниже в задание SQL и запланируйте его. Сценарий электронной почты предназначен для отправки вам набора результатов по электронной почте. Дайте мне знать, если у вас возникнут какие-либо проблемы, и я смогу решить их с вами. Позвольте мне знать, если вам нужно что-нибудь еще. Спасибо! -VM

- ================================================== ==============================

Create Procedure dbo.usp_GetExpiringSubscribersList

AS



declare @maxOffLineInHours int

set @maxOffLineInHours = 72 -- <SET YOUR NUMBER OF HOURS TO ALERT ON HERE>

SELECT srvname,

Max_start_time,

DATEDIFF(hh, Max_start_time, getdate())

FROM distribution.dbo.msmerge_sessions

JOIN ( SELECT agent_id,

Max_start_time = MAX(start_time)

FROM distribution.dbo.msmerge_sessions

GROUP BY agent_id

) AS k ON k.agent_id = 
distribution.dbo.msmerge_sessions.agent_id

AND distribution.dbo.msmerge_sessions.start_time = max_Start_Time

JOIN ( SELECT id AS agent_id,

srvname

FROM distribution.dbo.msmerge_agents

JOIN sys.sysservers ON sys.sysservers.srvid = distribution.dbo.msmerge_agents.Subscriber_ID

) AS l ON l.agent_id = k.agent_id

WHERE DATEDIFF(hh, max_start_time, GETDATE()) > @maxOffLineInHours 

ORDER BY DATEDIFF(hh, max_start_time, GETDATE()) DESC 





--====================================================================

-- Put this code in a SQL Job to run daily or whatever interval suits you



EXEC msdb.dbo.sp_send_dbmail

@profile_name = 'AdventureWorks2008R2 Administrator',

@recipients = 'VinnyAdmin@Adventure-Works.com',

@query = 'exec dbo.usp_GetExpiringSubscribersList' ,

@subject = 'usp_GetExpiringSubscribersList',

@attach_query_result_as_file = 1 ;