使用SSRS 2012,我们利用报告订阅来保存报告网络位置并通过电子邮件发送报告。我熟悉如何调试错误,但我正在寻找一种解决方案,以便在订阅无法发送时提醒我们的支持团队。因为积极主动而叫我疯了。
我看到了一个监控ReportServer表状态的解决方案,但它假定所有订阅都是通过电子邮件发送(only handles email statuses)。
我也看到了执行日志表(ExecutionLog3),但该表似乎没有捕获所有错误。我通过删除对文件位置的网络访问来强制订阅失败,但错误没有出现在表中。
我想编写一份SSRS报告,可以运行该报告来查看一天内发生的所有订阅错误。任何建议都表示赞赏。
答案 0 :(得分:4)
这只处理最后一条状态消息,所以没有完全回答这个问题(我发现这篇文章是因为我正在寻找相同的答案),但它在捕获所有订阅错误方面似乎对我有用,包括文件共享问题:
select count(*)
from ReportServer.dbo.[Subscriptions] S
where 0 = case
when S.[LastStatus] = 'New Subscription' then 1
when substring(S.[LastStatus],1,9) = 'Mail Sent' then 1
when substring(S.[LastStatus],1,5) = 'Done:'
and right(S.[LastStatus],9) = '0 errors.' then 1
when substring(S.[LastStatus],1,9) = 'The file '
and patindex('%has been saved to the%',S.[LastStatus]) > 1
and right(S.[LastStatus],11) = 'file share.' then 1
else 0
end
答案 1 :(得分:1)
我使用过Microsoft的Report Server Diagnostic Reports包
More info about the Report Server Diagnostic Reports (snapshots)
Download link for Report Server Diagnostic Reports Pack
我没有用过这个,但我听说过它
答案 2 :(得分:0)
没有内置方法可以做到这一点。您必须解析Windows错误日志或报告服务日志。我没有尝试过这个,但是ssrs api可能会返回基于订阅的报告的最后订阅状态,但是在ReportingService数据库之外没有历史日志,即使在那里我也不确定是否记录了失败。
答案 3 :(得分:0)
查看我在Jeff Prom的博客http://jeffprom.com/2008/08/22/ssrs-failed-subscription-notifications/
上找到的这个解决方案SELECT C.Name, S.LastRunTime, S.LastStatus, S.Description
FROM Subscriptions AS S
LEFT OUTER JOIN [Catalog] AS C
ON C.ItemID = S.Report_OID
WHERE LEFT (S.LastStatus, 12) != ‘Mail sent to’
AND LEFT (S.LastStatus, 12) != ‘New Subscrip’