SSRS - 重命名TempDB,现在订阅报告未通过电子邮件发送

时间:2013-10-14 13:15:20

标签: sql sql-server reporting-services sql-server-2012 database-migration

我目前无法在服务器2012上的新SQL Server 2012安装上通过电子邮件发送SSRS的基于时间的订阅报告。

我在SSRS LogFiles中收到以下错误

  

日程安排!WindowsService_5!dc4!10/14 / 2013-10:01:09 :: i INFO:使用数据1a762da1-75ab-4c46-b989-471185553304处理事件TimedSubscription。   library!WindowsService_5!dc4!10/14 / 2013-10:01:09 :: e错误:抛出Microsoft.ReportingServices.Diagnostics.Utilities.ReportServerStorageException :,报表服务器数据库中发生错误。这可能是由于数据库中的连接失败,超时或磁盘状况不佳所致。   library!WindowsService_5!dc4!10/14 / 2013-10:01:09 :: w WARN:未执行事务回滚连接无效   计划!WindowsService_5!dc4!10/14 / 2013-10:01:09 :: i INFO:处理事件'TimedSubscription'时出错,数据= 1a762da1-75ab-4c46-b989-471185553304,错误= Microsoft.ReportingServices.Diagnostics.Utilities .ReportServerStorageException:报表服务器数据库中发生错误。这可能是由于数据库中的连接失败,超时或磁盘状况不佳所致。 ---> System.Data.SqlClient.SqlException:无效的对象名称'ReportServerTempDB.dbo.ExecutionCache'。

数据库是从SQL 2008迁移出来的,这是由第三方完成的,我不确定是否有人被忽视了。

非常感谢任何协助。

谢谢。

丹麦人

3 个答案:

答案 0 :(得分:1)

此主题似乎解决了您的问题。

http://www.sqlservercentral.com/Forums/Topic553765-147-1.aspx

请在发布错误消息之前进行一些研究。

来自链接 “ 经过多次惊愕,我找到了一个引用无效对象的触发器。在ReportServer表上触发[Schedule_UpdateExpiration] Schedule中包含违规引用。在测试中,我更改了此触发器以引用正确的报表服务器tempdb,现在订阅似乎正常工作。到目前为止,我没有发现任何其他因素。“

“如果有人正在寻找快速答案,那么我就是为解决问题所做的:

  • 更新了dbo.schedule上的触发器,以引用正确的tempdb。
  • 将所有存储过程及其权限编写到新查询中,然后使用新查询“查找并替换”旧tempdb的所有实例。 “

答案 1 :(得分:1)

在搜索解决方案以解决此问题一段时间后,我发现这是由SQL Server代理的作业定义未完全迁移到新服务引起的。对于在SSRS中创建的每个订阅,SQL Server代理中都定义了一个关联的作业。对于服务通过订阅大量回复报告传递,最好导出这些作业定义并将其导入新服务器。

答案 2 :(得分:0)

Daniel E.回答是正确的。

我花了很多时间来查找它以及我在更新现有订阅时遇到的错误

“报表服务器数据库中发生错误。这可能是由于数据库中的连接失败,超时或磁盘状况不佳所致。 (rsReportServerDatabaseError)”

当我使用上述错误在线搜索时,我无法设法修复它。很长一段时间后,我发现跳跳手指向旧数据库。 Temp数据库如下:[ReportServerTempDB] 更新到正确的tempDB之后,一切正常。

ALTER TRIGGER [dbo].[Schedule_UpdateExpiration] ON [dbo].[Schedule]  
AFTER UPDATE
AS 
UPDATE
   EC
SET
   AbsoluteExpiration = I.NextRunTime
FROM
   [ReportServerTempDB].dbo.ExecutionCache AS EC
   INNER JOIN ReportSchedule AS RS ON EC.ReportID = RS.ReportID
   INNER JOIN inserted AS I ON RS.ScheduleID = I.ScheduleID AND RS.ReportAction = 3