如果我们的报告电子邮件订阅由于SMTP服务器故障等问题而无法发送,我们必须手动重新发送报告电子邮件。我们有没有办法自动重新发送订阅电子邮件?
我使用了与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>
最大的区别之一是我的捕获了"失败"one_answers"错误"状态。
我希望我能记得我在哪里发现的这个,这样我就可以对它给予适当的赞扬,因为它在很多场合都是救命稻草。
没有自动的方法。
通过查询ReportServer数据库中的"订阅"表,可以获得失败的报告列表以及订阅ID。然后将它连接到Catalog表中,以显示报告的详细信息。
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%'
然后,您可以使用Subscription ID,使用AddEvent函数为每个报表启动订阅。
EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = @SUBSCRIPTION_ID;
您可以创建一个存储过程来遍历表并启动订阅。