【问题标题】:SSRS scheduled reports not executing -SSRS 计划报告未执行 -
【发布时间】:2015-07-13 14:12:18
【问题描述】:

我们计划在一周内生成大量报告。一些报告也设置为代理作业报告,并使用 SP_send_dbmail 以 HTML 格式发送报告。在过去一周左右的时间里,多份报告未能发送,而其他报告则在同一天完成。这是一个间歇性问题,因为有些日子所有报告似乎都通过了,但我没有任何警报通知我报告失败。

我从 \Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\LogFiles 查看了报告服务器的日志文件; 此错误消息经常出现:

ERROR: PollingMaintenance: Restarting maintenance thread for the following exception:  This method or property cannot be called on Null values.
   at System.Data.SqlClient.SqlBuffer.get_String()
   at Microsoft.ReportingServices.Library.InstrumentedSqlDataReader.<>c__DisplayClass3d.<GetString>b__3c()
   at Microsoft.ReportingServices.Library.SqlBoundaryWithReturn`1.Invoke(Method m)
   at Microsoft.ReportingServices.Library.EventQueueWorker.GetNextQueueItem(IDataRecord record)
   at Microsoft.ReportingServices.Library.QueuePollWorker.ProcessData(IDataReader reader)
   at Microsoft.ReportingServices.Library.DBPoll.PollingFunction()
   at Microsoft.ReportingServices.Library.DBPoll.PollingMaintenance().
library!WindowsService_827!8d4!07/10/2015-05:54:19:: i INFO: PollingMaintenance: Polling cycle completed.

除此之外,我在 LastStatus 下的 ExecutionLogStorage 表中没有看到任何有用的信息(只是在几条记录上说 rsProcessAborted)。

我还尝试运行此查询来查找失败的报告,但今天失败的报告没有出现:

SELECT
    c.Name AS [ReportName],
    sb.[Description] AS [SubscriptionDescription],
    sb.DeliveryExtension AS [DeliveryType],
    sb.LastStatus AS [LastRunStatus],
    sb.LastRunTime AS [LastRunTime],
    c.Path AS [ReportPath],
    'http://sql-server/Reports/Pages/Report.aspx?ItemPath='+REPLACE(REPLACE(C.[Path],'/','%2f'),' ','+')+'&SelectedTabId=PropertiesTab&ViewMode=List&SelectedSubTabId=SubscriptionsTab' AS [SubscriptionLink],
    sc.ScheduleID AS [SQLAgentJobName],
    sb.SubscriptionID
FROM
    ReportServer.dbo.ReportSchedule AS RS
    INNER JOIN ReportServer.dbo.Schedule sc ON rs.ScheduleID = sc.ScheduleID
    INNER JOIN ReportServer.dbo.Subscriptions sb ON rs.SubscriptionID = sb.SubscriptionID
    INNER JOIN ReportServer.dbo.[Catalog] c ON rs.ReportID = c.ItemID AND sb.Report_OID = c.ItemID
WHERE
    (sb.LastStatus LIKE 'Failure%' OR sb.LastStatus LIKE 'Error%' OR sb.LastStatus LIKE '%not valid%')
    order by lastruntime asc

【问题讨论】:

  • 嘿,感谢您的评论。我检查了该线程回复中的链接,但它似乎与我的问题无关。唯一的共同点是提到“这可能是由于数据库中的连接失败、超时或磁盘条件低”的错误,但与我在上面发布的其他 1 个相比,该错误只出现了几次。今天上午 10 点 09 分预定了多份订阅的报告,但没有一个通过;我检查了该工作的代理工作历史记录,它显示成功...
  • 我正在运行简单的批处理文件来记录 ping 时丢弃的任何数据包...我正在从我的网络和托管我们的 SQL 服务器的网络测试它(从我的计算机和从 SQL ping 我们的邮件服务器)如​​果出现任何问题,将会更新。
  • @samalkobi - 报告的参数是什么,您在订阅中将哪些值传递给它?
  • 你检查过收件人的垃圾邮件吗?由于电子邮件已嵌入 HTML,因此可能会被标记为垃圾邮件。

标签: sql-server-2008 reporting-services ssrs-2008-r2


【解决方案1】:

现在已解决; 这需要对事件表进行更多挖掘,我们发现了一个代理作业,该作业计划更新报告上的旧订阅。该报告在一个月前引起了问题,我删除了订阅并使用相同的查询创建了一个新报告。更新报告的工作似乎是在事件表中排队事件,并且由于没有订阅该报告,它们一直超时。前几天我们清除了这些事件,只剩下一些,但所有报告都按计划发布。我在上面的最后一条评论中发布的链接涵盖了为我们指明正确方向的主要领域。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多