本周,我的一个复制订阅已过期,因为我没有收到任何警报,说有login错误(我已经修复了这些警报和错误)。 我现在想要的是,如果再次发生这种情况,能够发送一个提醒,说订阅即将到期(即将在1或2天内过期)。 当订阅到期时,我有一个提醒,但这是事实。 我已经通过sys.messages查看任何具有“Expir”的文本,但我还没有find适当的错误代码。 任何人都可以指出我在正确的方向吗?
谢谢。
在这里,你去…这是我会去的方式…你将需要启用数据库邮件和创build一个configuration文件,根据你的环境改变这些部分下面…也改变@ MaxOfflineInHours =variables为任何数量小时的静止,你想提醒…创build存储过程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 ;
我相信您正在查找的事件ID是14160.您可以设置一个SQL Server代理警报,以便在发生此事件时触发,并且可以将代理configuration为通过电子邮件发送或发送给您。
以下是有关该事件的信息: http : //msdn.microsoft.com/en-us/library/aa337416.aspx
以下是设置警报的一些说明: http : //technet.microsoft.com/zh-cn/library/ms175076.aspx