3

我们的服务器崩溃了。我们将其恢复并运行,但上述数据库已损坏。

是否有重建或重新安装 SSRS 数据库的程序化/自动方式?

如果不:

  1. 由于我们仍然可以从数据库中选择 *,我如何获取不同报告的权限和角色?
  2. 我们如何检索订阅信息?
4

1 回答 1

1

1.

您可以通过使用带有 setup.exe 的 .ini 文件来自动执行 SQL 的初始安装。在那之后,您应该备份您的数据库。但似乎你没有。

如果您仍想重建数据库,您可以删除然后使用 SSRS 配置工具重新创建它们。

如果您想自动执行此操作,您需要编写一个 db drop、create、角色创建 (RSExecRole) 脚本,然后运行位于此处的 Catalog.sql 和 CatalogTempDB.sql 脚本,但我认为您不应该这样做这样做,只是备份 - 更容易!

X:\Program Files\Microsoft SQL Server\MSRS10.X\Reporting Services\ReportServer

2.

我会使用 RSScripter 来移动需要运行 Web 服务的对象。似乎您只能访问数据库,这使您的工作变得更加困难。您需要弄清楚哪些表保存订阅数据并将该数据移动到您的新数据库中。您还需要将旧报告 ID 转换为新报告 ID,因为它们将在新安装中发生更改 - 这可以通过匹配报告名称来完成,如果它们是唯一的。如果可能的话,我会尝试手动重建它们。

这是我用来查看订阅的查询,也许它会有所帮助......

USE ReportServer
go


WITH
[Sub_Parameters] AS
(
SELECT 
[SubscriptionID],
[Parameters] = CONVERT(XML,a.[Parameters])
FROM [Subscriptions] a
),
[MySubscriptions] AS
(
SELECT DISTINCT
[SubscriptionID],
[ParameterName] = QUOTENAME(p.value('(Name)[1]', 'nvarchar(max)')),
[ParameterValue] = p.value('(Value)[1]', 'nvarchar(max)')
FROM 
[Sub_Parameters] a
CROSS APPLY [Parameters].nodes('/ParameterValues/ParameterValue') t(p)
),
[SubscriptionsAnalysis] AS
(
SELECT
a.[SubscriptionID],
a.[ParameterName],
[ParameterValue] = 
(SELECT
STUFF(( 
SELECT [ParameterValue] + ', ' as [text()]
FROM [MySubscriptions]
WHERE 
[SubscriptionID] = a.[SubscriptionID]
AND [ParameterName] = a.[ParameterName]
FOR XML PATH('')
),1, 0, '')
+'')
FROM [MySubscriptions] a
GROUP BY a.[SubscriptionID],a.[ParameterName]
)
SELECT
a.[SubscriptionID],
c.[UserName] AS Owner, 
b.Name,
b.Path,
a.[Locale], 
a.[InactiveFlags], 
d.[UserName] AS Modified_by, 
a.[ModifiedDate], 
a.[Description], 
a.[LastStatus], 
a.[EventType], 
a.[LastRunTime], 
a.[DeliveryExtension],
a.[Version],
e.[ParameterName],
LEFT(e.[ParameterValue],LEN(e.[ParameterValue])-1) as [ParameterValue],
SUBSTRING(b.PATH,2,LEN(b.PATH)-(CHARINDEX('/',REVERSE(b.PATH))+1)) AS ProjectName
FROM 
[Subscriptions] a 
INNER JOIN [Catalog] AS b
ON a.[Report_OID] = b.[ItemID]
LEFT OUTER JOIN [Users] AS c
ON a.[OwnerID] = c.[UserID]
LEFT OUTER JOIN [Users] AS d
ON a.MODIFIEDBYID = d.Userid
LEFT OUTER JOIN [SubscriptionsAnalysis] AS e 
ON a.SubscriptionID = e.SubscriptionID

ORDER BY projectname
于 2013-06-05T06:12:21.960 回答