您会推荐将最简单的方式将订阅从一个报告服务转移(或复制)到另一个不同服务器中的报告服务吗?转移订阅报告服务
转移订阅报告服务
回答
有多少订阅?
如果数字最小的最容易的事情是在其他服务器上手动重新创建它们。
如果我们正在谈论相当数量的话,那么有一个数据库报告服务来存储我认为被称为dbo.Subscriptions的订阅数据。我会建议首先在那里查看是否可以看到订阅。
否则,如果你要寻找整体转让报表服务器数据库(包括时间表),那么下面的链接可能是有用的:
这里的东西,我们使用从2008年SSRS复制订阅到2012年SSRS服务器。您需要提前正确设置数据源。从@ S.Juarez答案
INSERT INTO Mercury.ReportServer.dbo.Subscriptions(SubscriptionID, OwnerID, Report_OID, Locale, InactiveFlags, ExtensionSettings, ModifiedByID, ModifiedDate, Description, LastStatus, EventType, MatchData, LastRunTime, Parameters, DataSettings, DeliveryExtension, Version)
SELECT
--Path,
SubscriptionID
,(SELECT UserID FROM <Destination Linked Server>.ReportServer.dbo.Users WHERE UserName = '<User from DB>') OwnerID
,(select ItemId from <Destination Linked Server>.ReportServer.dbo.Catalog mCatalog where mCatalog.Path = Catalog.Path)Report_OID
,Locale, InactiveFlags, ExtensionSettings
,(SELECT UserID FROM <Destination Linked Server>.ReportServer.dbo.Users WHERE UserName = 'User from DB') ModifiedByID
, GETDATE()
,Sub.Description, LastStatus, EventType, MatchData, LastRunTime, Parameter, DataSettings, DeliveryExtension, Version
FROM ReportServer..Subscriptions Sub
LEFT JOIN ReportServer.dbo.Catalog ON Catalog.ItemId = Sub.Report_OID
WHERE Path NOT IN
(
SELECT Path
FROM <Destination Linked Server>.ReportServer.dbo.Subscriptions
LEFT JOIN <Destination Linked Server>.ReportServer.dbo.Catalog ON Catalog.ItemId = Subscriptions.Report_OID
)
--AND
-- PATH LIKE '...'
请注意名称'参数'不正确SELECT,它应该是'参数'。我添加了一个更全面的答案,其中包括相关表格。 – Mike 2016-06-17 00:50:57
大厦,这个脚本修复他的错误,整个工程进度表及附表用户记录打破了参数(从而防止工作订阅),并同时将。它在源和目标上都保持相同的GUID。
使用此脚本的起点是您已经传输报告(例如使用工具ReportSync)并且已在目标服务器上的所有报告文件夹上手动配置安全性。对于用户名存在于源服务器而不是目标服务器上的情况,您还需要确定目标服务器上的哪些用户记录将订阅与之关联。 (如果您决定不在目标上重新创建用户,或者因为该用户不再是该域上的有效帐户(即他们已离开您的组织),则可能发生这种情况。
在开始之前,我建议您针对源和目标ReportServer数据库运行这个小脚本并保存结果。另外,请完整备份数据库。这些步骤使您能够回滚小的和大的更改。
SELECT u.UserName, c.Path, Parameters, s.ExtensionSettings, s.Report_OID, SubscriptionID, u.UserID
FROM dbo.[Subscriptions] s
JOIN users u
on s.OwnerID = u.UserID
JOIN catalog c
on c.ItemID = s.Report_OID
这下一个脚本将转让认购的第一部分,其次是时间表,然后报告,订阅和计划之间的链接记录。您需要输入目标服务器和源服务器的名称,默认用户的名称(必须已存在于目标用户表中),然后在源服务器上执行此操作。
DECLARE @Default_User varchar(50)
SELECT @Default_User = UserID FROM [SourceServer].ReportServer.dbo.Users WHERE UserName = '[DOMAIN\YourDefaultUserNameGoesHere]'
INSERT INTO [TargetServer].ReportServer.dbo.Subscriptions(
SubscriptionID, OwnerID, Report_OID, Locale, InactiveFlags, ExtensionSettings, ModifiedByID, ModifiedDate,
[Description], LastStatus, EventType, MatchData, LastRunTime, [Parameters], DataSettings, DeliveryExtension, Version
)
SELECT
--cSource.Path,
--uSource.UserName,
SubscriptionID,
--u.UserName,
--LastStatus,
COALESCE(uTarget.UserID, @Default_User) AS OwnerID,
cTarget.ItemID,
Locale, InactiveFlags, ExtensionSettings,
@Default_User AS ModifiedByID,
GETDATE(),
sSource.[Description], LastStatus, EventType, MatchData, LastRunTime, [Parameters], DataSettings, DeliveryExtension, Version
FROM [SourceServer].ReportServer.dbo.Subscriptions sSource
LEFT JOIN [SourceServer].ReportServer.dbo.Catalog cSource ON cSource.ItemId = sSource.Report_OID
LEFT JOIN [SourceServer].ReportServer.dbo.Users uSource ON sSource.OwnerID = uSource.UserID
LEFT JOIN [TargetServer].ReportServer.dbo.Catalog cTarget ON cTarget.Path = cSource.Path
LEFT JOIN [TargetServer].ReportServer.dbo.Users uTarget ON uTarget.UserName = uSource.UserName
WHERE sSource.SubscriptionID NOT IN
(
SELECT SubscriptionID FROM [TargetServer].ReportServer.dbo.Subscriptions
)
INSERT INTO [TargetServer].ReportServer.dbo.Schedule
(
ScheduleID, Name, StartDate, Flags, NextRunTime, LastRunTime, EndDate, RecurrenceType, MinutesInterval, DaysInterval, WeeksInterval, DaysOfWeek, DaysOfMonth, [Month], MonthlyWeek, State, LastRunStatus, ScheduledRunTimeout, EventType, EventData, Type, ConsistancyCheck, Path, CreatedById
)
SELECT
ScheduleID, Name, StartDate, Flags, NextRunTime, LastRunTime, EndDate, RecurrenceType, MinutesInterval, DaysInterval, WeeksInterval, DaysOfWeek, DaysOfMonth, [Month], MonthlyWeek, State, LastRunStatus, ScheduledRunTimeout, EventType, EventData, Type, ConsistancyCheck, Path,
COALESCE(uTarget.UserID, @Default_User) AS CreatedById
FROM [SourceServer].ReportServer.dbo.Schedule s
INNER JOIN [SourceServer].ReportServer.dbo.Users uSource
ON s.CreatedById = uSource.UserID
LEFT JOIN [TargetServer].ReportServer.dbo.Users uTarget
ON uSource.UserName = uTarget.UserName
WHERE ScheduleID NOT IN (SELECT ScheduleID FROM [TargetServer].ReportServer.dbo.Schedule)
INSERT INTO [TargetServer].ReportServer.dbo.ReportSchedule
(
ScheduleID, ReportID, SubscriptionID, ReportAction
)
SELECT
rsSource.ScheduleID, cTarget.ItemID, rsSource.SubscriptionID, rsSource.ReportAction
FROM [SourceServer].ReportServer.dbo.ReportSchedule rsSource
INNER JOIN [TargetServer].ReportServer.dbo.Schedule sTarget
ON rsSource.ScheduleID = sTarget.ScheduleID
INNER JOIN [SourceServer].ReportServer.dbo.Catalog cSource
On cSource.ItemID = rsSource.ReportID
INNER JOIN [TargetServer].ReportServer.dbo.Catalog cTarget
ON cSource.Path = cTarget.Path
LEFT JOIN [TargetServer].ReportServer.dbo.ReportSchedule rsTarget
ON rsSource.ScheduleID = rsTarget.ScheduleID
AND rsSource.ReportID = rsTarget.ReportID
AND rsSource.SubscriptionID = rsTarget.SubscriptionID
WHERE rsTarget.ReportID IS NULL
要测试您的迁移是否正常工作,您可以针对目标服务器执行类似的语句。 GUID应该是Subscriptions表中的一个SubscriptionID,理想情况下用于发送到收件箱的内容。
exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', @EventData='cb38a708-7735-4b5a-8ff3-e03ee1b18edb'
如果有效,那么您应该会在约20秒内收到一封电子邮件。如果失败,我发现查找故障排除信息的最佳位置在SSRS日志文件described here中。
我打算将订阅从一台服务器迁移到另一台服务器。由于SSRS通过创建作业来管理日程安排,只需在脚本的表格中创建记录即可创建工作订阅日程安排?在你的情况下,你通过在AddEvent表中创建条目来手动触发一个时间表。 – 2017-11-16 00:25:21
嗯 - 好问题。我不再在做报告迁移的地方工作,所以我无法检查日程安排/作业是如何排序的 - 这是前一段时间。我记得尽管在迁移后没有对订阅的投诉,所以我认为这意味着一切都好(无论是人们还是没有注意到缺乏报告到达......我认为这不太可能,因为我们他说的是数百个订阅 - 有人会说出来)。 – Mike 2017-11-19 20:38:14
- 1. SQL Server 2005报告服务,订阅
- 2. 报告服务 - 订阅所有报告文件夹
- 3. SSRS报告订阅
- 4. 报告服务订阅报告错误,但日志未提供详细信息
- 5. 报告服务订阅失败,但手动运行报告工作
- 6. SQL Server报告订阅
- 7. 覆盖SQL Server报告服务小时订阅
- 8. sql server 2008 R2报告服务订阅选项
- 9. 报告服务:自定义程序集和订阅
- 10. SQL Server 2008 R2报告服务 - 获取订阅+计划链接
- 11. 尝试在报告服务中创建订阅时出错
- 12. 处理错误在订阅在报告服务
- 13. 报告服务器Web服务:将订阅连接到日程表
- 14. Azure移动订阅分析报告的频率是多少?
- 15. SSRS - 报告订阅的替代方式
- 16. SSRS报告订阅 - 发送到FTP
- 17. 如何订阅SSRS报告(SQL Server 2016)?
- 18. SSRS:订阅列顺序与报告
- 19. SSRS报告订阅以错误结束
- 20. 从SSIS触发报告订阅
- 21. MS报告服务MHTML订阅突然被截断并以纯文本格式
- 22. 如何在单个报告服务电子邮件订阅中包含2种报告格式?
- 23. 在报告服务中旋转表格?
- 24. MDX - 报告服务
- 25. SSRS报告服务
- 26. 报告服务匿名访问报告
- 27. SQL Server报告服务图表报告
- 28. 存档报告SQL 2005报告服务
- 29. SQL报告服务 - 报告不更新
- 30. Visual Studio报告服务报告2008
嗨..我检查了订阅表,它包含45行..我无法将整个报告服务移动到其他服务器,因为它会覆盖目标服务器中的现有报告。我能否获得订阅表并将行重新插入目标服务器? – user384080 2010-08-17 22:46:14
是的,应该很容易做到,但不确定它是否会因修改而被锁定,因为它是系统数据库,请首先检查您的权限是否正确。 复制和粘贴将是一个很好的简单解决方案,否则您将需要执行数据的导入/导出: 右键单击数据库>任务>导入/导出,然后该向导会引导您,但是有一个很好的链接:http ://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm – markdigi 2010-08-18 08:42:32
你做了这个..做了报表服务器数据库的完整备份并恢复它到目的地数据库..但是当我点击我的订阅报告服务器上什么都没有显示..然后我查询数据库,它显示订阅表中的45行..你知道它为什么不显示吗? – user384080 2010-08-31 06:17:31