如果我不是报告的所有者,我该如何将SSRS报告复制到新服务器?

17

我需要将一个SSRS服务器上的所有报告复制到另一个服务器。我的计划是遍历每个报告,下载报告定义文件,然后将其上传到新服务器。

我被授予了系统管理员和系统用户广域角色,并且对于Home文件夹,我拥有浏览器、内容管理器、我的报告、发布者和报告生成器角色,但我仍然无法看到“编辑”按钮,这会让我保存报告定义文件。原因是报告是其他用户拥有的。我不能要求所有用户授予我编辑他们报告的权限,因为用户太多了,而我认为很多用户可能永远都不会去做这件事。

如果我不是大多数报告的所有者,我该怎么办才能将所有报告复制到新服务器上?

7个回答

45
请试用这个工具: http://code.google.com/p/reportsync/ 它可以将一个服务器上的所有报表(或选择性文件夹)同步到另一个服务器上。 此外,您还可以从本地文件夹下载和上传。
具有相同名称的数据源将自动附加。 这可以节省很多时间,因为您无需在上传后重新附加数据源。
注意:我亲自编写了此工具以满足我的需求,但它是免费开源的。

1
你的工具真是太棒了。 - Johnny_D
1
我知道这是一篇旧帖子,但感谢你提供这个工具,它很棒! - Richard Nixon
2
我会在这里添加一个感谢,这是一个简单而又棒的工具! - Rocket04
1
嗨nunespascal,非常感谢您分享这个伟大的工具!关于ReportSync是否有更多信息?我的意思是像“下载”,“上传”,“同步”按钮之类的东西。这些按钮背后是什么?就像它们所做的那样?如果“下载”和“上传”或多或少可以理解,那么“同步”就不是很清楚了。任何帮助和参考都将不胜感激。谢谢。 - Oleksii Dniprovskyi
1
同步将从源服务器同步选定的报告(或文件夹)到目标服务器。在将报告传输到目标后,ReportSync 将尝试查找与源服务器中使用的名称相同的数据源,并将其附加到目标报告上。使用 SSRS UI 进行此操作是一项繁琐的过程。 - nunespascal

7

使用此工具

只需将其指向你的RS服务器并让其运行。它有许多选项,可以选择脚本化或不脚本化的内容。其中之一是下载现有的RDL文件。

完成后,只需使用查找和替换工具更改服务器名称(在生成的脚本中)和任何其他密码/位置信息,然后让其运行。它本质上是在幕后使用RS.exe。

我记得在部署时必须在SSRS框中本地运行它。


那是一个非常有用的工具,但现在我必须让某人给我登录服务器的权限,以便我可以在服务器上本地运行它,以使其正常工作。 - Joe
您不需要在本地登录才能运行生成脚本的工具 - 如果您可以连接到报表管理器并且具有足够的权限,它将可以正常运行。我甚至不确定您是否需要在本地运行生成的脚本。 - adolf garlic
这个工具叫什么名字? - snapplex
1
那个网站已经消失了,但是在谷歌上搜索30秒就给了我这个链接:http://sqlserverfinebuild.codeplex.com/wikipage?title=Install%20Reporting%20Services%20Scripter - adolf garlic
1
名称为RSScripter。 - Sam
1
@aaronmason 感谢您提供存档的链接。 - Kent Anderson

4

对于SQL Server Reporting Services 2008 R2或更高版本,微软提供了迁移工具:

http://www.microsoft.com/en-us/download/details.aspx?id=29560

报表服务迁移工具

一种将报表和其他工件从一个报表服务器迁移到另一个报表服务器的工具。它也可以用作报表服务的备份和还原工具。

我个人没有使用过这个工具,老实说,描述中列出了一些开发人员正在“寻求解决方案”的问题,但它可能会帮助某些人。


5
答案错误。这个工具仅用于将本机模式迁移到SharePoint模式实例。 - Roman Pokrovskij

2
如果您考虑将新服务器上的所有报告替换,则应考虑移动ReportServer数据库。这也将移动订阅和缓存数据:http://technet.microsoft.com/en-us/library/ms156421.aspx 您使用的是哪个版本的SSRS?编辑按钮在SSRS 2005中,但在2008或2008 R2中不再存在:它被“下载”按钮所取代。这可能是问题所在吗?
作为内容管理员,您应该能够编辑任何报告的定义。
请告诉我您正在查看哪个版本。 Jamie F

我正在将报告从Reporting Services 2005移动到2008 R2。不幸的是,复制ReportServer数据库不是一个选项,因为新报告已经被创建并放在了新服务器上,如果我用旧服务器上的数据库替换它,这些报告将会丢失。 - Joe

1

第一步: 在执行以下操作之前,备份您的新报表数据库。 从原报表数据库中复制以下表格到新报表数据库中: - Catalog - ChunkData - DataSource - Policy - PolicyuserRole - SecData - Users

请确保不要复制Keys表!

其中一个问题是您需要重新创建所有的共享数据源,并将它们重新分配给每个报表。但是,这将复制所有的文件夹、报表和用户角色。


1
小心这个过程。如果出了什么问题,我敢打赌微软不会提供支持。我并不是说这行不通;我只是说这与供应商批准的过程相差甚远。一定要进行充分测试。 - Jamie F

1
我最终做的是以服务器管理员用户身份运行Internet Explorer。您可以通过在开始菜单上按住Shift并右键单击Internet Explorer图标,然后选择“以不同的用户身份运行”来实现此操作。然后,您需要输入域管理员用户帐户的登录详细信息并输入报告服务器的地址。作为域的服务器管理员用户,我能够成为所有报告的内容管理器用户。

0

SSRS使用SQL Server作为后端存储其详细信息,Catalog表用于以二进制形式存储报告文件。下面的脚本仅从Catalog表中提取报告定义,并使用BCP实用程序将其导出到预定义路径作为.rdl文件。

要从TSQL使用BCP实用程序,我们需要执行“xp_cmdshell”命令;它默认处于禁用状态。因此,首先需要执行以下脚本以启用它-

-- 允许更改高级选项。 EXEC sp_configure 'show advanced options',1 GO
-- 更新高级选项的当前配置值。 RECONFIGURE GO
-- 启用xp_cmdshell EXEC sp_configure 'xp_cmdshell',1 GO
-- 更新xp_cmdshell的当前配置值。 RECONFIGURE GO
-- 禁止更改其他高级选项。 EXEC sp_configure 'show advanced options',0 GO
-- 更新高级选项的当前配置值。 RECONFIGURE GO

成功执行后,可以执行以下脚本并进行所需更改以下载文件-

DECLARE @FilterReportPath AS VARCHAR(500) = NULL DECLARE @FilterReportName AS VARCHAR(500) = NULL DECLARE @OutputPath AS VARCHAR(500) = 'D:\Reports\Download\' DECLARE @TSQL AS NVARCHAR(MAX) SET @OutputPath = REPLACE(@OutputPath, '\', '/') IF LTRIM(RTRIM(ISNULL(@OutputPath, ''))) = '' BEGIN SELECT 'Invalid Output Path' END ELSE BEGIN SET @TSQL = STUFF((SELECT ';EXEC master..xp_cmdshell ''bcp " ' + ' SELECT ' + ' CONVERT(VARCHAR(MAX), ' + ' CASE ' + ' WHEN LEFT(C.Content,3) = 0xEFBBBF THEN STUFF(C.Content,1,3,'''''''') '+ ' ELSE C.Content '+ ' END) ' + ' FROM ' + ' [ReportServer].[dbo].[Catalog] CL ' + ' CROSS APPLY (SELECT CONVERT(VARBINARY(MAX),CL.Content) Content) C ' + ' WHERE ' + ' CL.ItemID = ''''' + CONVERT(VARCHAR(MAX), CL.ItemID) + ''''' " queryout "' + @OutputPath + '' + CL.Name + '.rdl" ' + '-T -c -x''' FROM [ReportServer].[dbo].[Catalog] CL WHERE CL.[Type] = 2 --Report AND '/' + CL.[Path] + '/' LIKE COALESCE('%/%' + @FilterReportPath + '%/%', '/' + CL.[Path] + '/') AND CL.Name LIKE COALESCE('%' + @FilterReportName + '%', CL.Name) FOR XML PATH('')), 1, 1, '') EXEC SP_EXECUTESQL @TSQL END

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接