本周,我的一个复制订阅已过期,因为我没有收到任何有关登录错误的警报(我已修复这些警报和错误)。现在,我希望能够发送警报,告知订阅即将过期(即,将在 1 或 2 天内过期),以防这种情况再次发生。我已设置订阅过期时的警报,但这是事后警报。我已查看 sys.messages 中是否有任何包含“Expir”的文本,但尚未找到合适的错误代码。有人能给我指出正确的方向吗?
谢谢。
答案1
给你...这是我要采取的方法...你需要启用 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 = '[email protected]',
@query = 'exec dbo.usp_GetExpiringSubscribersList' ,
@subject = 'usp_GetExpiringSubscribersList',
@attach_query_result_as_file = 1 ;
答案2
我相信您正在寻找的事件 ID 是 14160。您可以设置一个 SQL Server 代理警报,当此事件发生时触发,并且可以配置代理以向您发送电子邮件或寻呼。
以下是有关该活动的信息:http://msdn.microsoft.com/en-us/library/aa337416.aspx
以下是设置警报的一些说明:http://technet.microsoft.com/en-us/library/ms175076.aspx