如果由于诸如SMTP服务器失败之类的问题而导致无法发送报告电子邮件订阅,我们必须手动重新发送报告电子邮件。有什么方法可以自动重新触发订阅电子邮件并重新发送?
答案 0 :(得分:1)
没有自动的方法。
通过查询ReportServer数据库中的Subscriptions表,可以获得失败的报告列表以及Subscription ID。然后将其加入目录表以显示报告详细信息。
SELECT Sub.SubscriptionID,
Sub.InactiveFlags,
Sub.ExtensionSettings,
Sub.Description,
Sub.LastStatus,
Sub.EventType,
Sub.MatchData,
Sub.LastRunTime,
Sub.Parameters,
Sub.DeliveryExtension,
Cat.Path,
Cat.Name,
Cat.Description,
Cat.Hidden,
Cat.Parameter,
Cat.ExecutionFlag,
Cat.ExecutionTime
FROM [ReportServer].[dbo].[Subscriptions] as Sub
LEFT OUTER JOIN [ReportServer].[dbo].[Catalog] as Cat on
Sub.Report_OID = ItemID
WHERE LastStatus LIKE 'Failure%'
然后,您可以使用AddID函数使用订阅ID来为每个报告触发订阅。
EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = @SUBSCRIPTION_ID;
您可以创建一个存储过程来遍历表并触发订阅。
答案 1 :(得分:1)
我使用了与Hannover Fist发布的方法类似的方法,但是采用了另一种方法来重新激活订阅:
SELECT
S.ScheduleID AS SQLAgent_Job_Name,
SUB.Description AS Sub_Desc,
SUB.DeliveryExtension AS Sub_Del_Extension,
C.Name AS ReportName,
C.Path AS ReportPath,SUB.LastStatus
FROM ReportSchedule RS
INNER JOIN Schedule S ON (RS.ScheduleID = S.ScheduleID)
INNER JOIN Subscriptions SUB ON (RS.SubscriptionID = SUB.SubscriptionID)
INNER JOIN [Catalog] C ON (RS.ReportID = C.ItemID AND SUB.Report_OID = C.ItemID)
WHERE LEFT (SUB.LastStatus, 12) Like 'Failure%' or LEFT (SUB.LastStatus, 12) Like 'Error%'
order by reportname
USE msdb
EXEC sp_start_job @job_name = <SQLAgent_Job_Name>
最大的区别之一是,我的系统同时捕获“失败”和“错误”状态。
我希望我能记得在哪里找到它的,以便我能对它给予应有的赞誉,因为它在某些场合曾挽救了生命。