如何(不)管理 SSRS 报告执行历史记录保留

Bob*_*b C 6 ssrs-2008-r2

SQL Server 2008 R2 Reporting Services 会记录谁运行什么报告,存储在 ReportServer 数据库的 ExecutionLogStorage 表中。该历史数据的默认保留期为 60 天。

几个月前,我想在我的几个报告服务器上增加保留期,所以我搜索了如何做到这一点,并找到了几个不同的博客文章,其中说您更新了 ReportServer 数据库中的 ConfigurationInfo 表。具体来说,他们说您将 Value 列设置为 Name = 'ExecutionLogDaysKept' 行的保留天数,如果您将该值设置为 0,则执行历史将无限期保留。所以这就是我所做的,并很快忘记了它。

快进到今天早上,当我对 ExecutionLog 视图运行 who-launched-what-report-when 查询时,很快就没有返回任何行。在调查过程中,我了解到 SSMS GUI,您还可以使用它管理报告执行历史记录;GUI 显然更新了相同的 ConfigurationInfo 行,但它的标签表明将 'ExecutionLogDaysKept' 值设置为 0 实际上转化为“删除早于 0 天的执行日志条目”,或者基本上,“不保留任何今天之前的历史”——与“无限期地保留历史”截然相反。

这在对存储过程 ExpireExecutionLogEntries 的检查中得到证实,该过程引用了“ExecutionLogDaysKept”值,其中注释和代码本身清楚地表明指示无限期历史保留的正确值是 -1,而不是 0。

这些博客的作者将保持匿名,因为他们是我不是特别熟悉的 SQL 人员,因此我不应该如此愉快地遵循他们的建议。我想这篇文章主要是警告不要犯同样的错误;但是,我确实有几个问题:

  • 有没有其他人经历过同样的事情?
  • 报告执行历史保留管理在 SSRS 的后续版本中是否以相同的方式工作?

编辑:向那些未透露姓名的博客作者道歉,因为似乎错误的保留设置信息实际上起源于2008R2在线图书中的至少一个位置。它仍然存在于2016年的BOL 中——不确定是否仍然与底层程序代码脱节。提交了 Microsoft Connect条目,要求更正文档。

小智 2

有趣的发现。直到我构建了一个使用 SSRS 执行历史记录表作为报告下载计数的唯一来源的页面时,我才意识到此设置。令我惊讶的是,有一天计数消失了。那时,我发现了 60 天保留的默认值。我记得在 GUI 中增加了保留设置,但我没有设置为 0。

我重新设计了下载计数,将其存储在自定义表中,并使用 SSRS 历史记录通过 SQL 代理作业每日更新,以消除任何其他意外情况。关于“0”的作用肯定存在相互矛盾的文档。但是,如果您将保留天数设置为非常大的数字(几百年),那么这本质上是无限的保留期,应该可以实现您的目标。