На этой неделе истек срок действия одной из моих подписок на репликацию, потому что я не получал никаких предупреждений о том, что произошла ошибка входа в систему (я исправил эти предупреждения и ошибку). Сейчас я бы хотел, чтобы в случае, если это повторится снова, можно было отправить предупреждение о том, что срок действия подписки истекает (т. Е. Истекает через 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 ;