Sql server 监视SSRS订阅错误

Sql server 监视SSRS订阅错误,sql-server,reporting-services,ssrs-2008,reportingservices-2005,Sql Server,Reporting Services,Ssrs 2008,Reportingservices 2005,使用SSRS 2012,我们利用报告订阅保存报告网络位置并通过电子邮件发送报告。我熟悉如何调试错误,但我正在寻找一种解决方案,以便在订阅发送失败时提醒我们的支持团队。说我为积极主动而疯狂 我看到了一个监视ReportServer表状态的解决方案,但它假设所有订阅都是通过电子邮件进行的 我还看到了执行日志表(ExecutionLog3),但该表似乎没有捕获所有错误。通过删除对文件位置的网络访问,我强制订阅失败,但该错误未显示在表中 我想写一个SSRS报告,可以运行它来查看一天内发生的所有订阅错误。

使用SSRS 2012,我们利用报告订阅保存报告网络位置并通过电子邮件发送报告。我熟悉如何调试错误,但我正在寻找一种解决方案,以便在订阅发送失败时提醒我们的支持团队。说我为积极主动而疯狂

我看到了一个监视ReportServer表状态的解决方案,但它假设所有订阅都是通过电子邮件进行的

我还看到了执行日志表(ExecutionLog3),但该表似乎没有捕获所有错误。通过删除对文件位置的网络访问,我强制订阅失败,但该错误未显示在表中


我想写一个SSRS报告,可以运行它来查看一天内发生的所有订阅错误。任何建议都将不胜感激。

没有内置的方法可以做到这一点。您必须解析Windows错误日志或reporting services日志。我没有尝试过此操作,但ssrs api可能会返回基于订阅的报表的上次订阅状态,但是ReportingService数据库之外没有历史日志,即使在那里,我也不确定是否记录了故障。

我使用了Microsoft的报表服务器诊断报告包

我没有用过这个,但我听说过


看看我在Jeff Prom的博客上找到的这个解决方案


这只处理最后一条状态消息,因此不能完全回答问题(我看到这篇文章是因为我在寻找相同的答案),但它似乎在捕获所有订阅错误方面对我有效,包括文件共享问题:

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

该状态仅为最后一个状态,因此不会提供所有失败的订阅,只提供最后一个。此外,“邮件发送到”和“新订阅”文本对于保存到网络位置的文件不起作用。成功状态为“文件名”已保存到“共享”文件共享。
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