2010-08-17 120 views

回答

2

有多少訂閱?

如果數字最小的最容易的事情是在其他服務器上手動重新創建它們。

如果我們正在談論相當數量的話,那麼有一個數據庫報告服務來存儲我認爲被稱爲dbo.Subscriptions的訂閱數據。我會建議首先在那裏查看是否可以看到訂閱。

否則,如果你要尋找整體轉讓報表服務器數據庫(包括時間表),那麼下面的鏈接可能是有用的:

MSDN Moving the Report Server Databases to Another Computer

+0

嗨..我檢查了訂閱表,它包含45行..我無法將整個報告服務移動到其他服務器,因爲它會覆蓋目標服務器中的現有報告。我能否獲得訂閱表並將行重新插入目標服務器? – user384080 2010-08-17 22:46:14

+0

是的,應該很容易做到,但不確定它是否會因修改而被鎖定,因爲它是系統數據庫,請首先檢查您的權限是否正確。 複製和粘貼將是一個很好的簡單解決方案,否則您將需要執行數據的導入/導出: 右鍵單擊數據庫>任務>導入/導出,然後該向導會引導您,但是有一個很好的鏈接:http ://www.databasejournal.com/features/mssql/article.php/3580216/SQL-Server-2005-Import--Export-Wizard.htm – markdigi 2010-08-18 08:42:32

+0

你做了這個..做了報表服務器數據庫的完整備份並恢復它到目的地數據庫..但是當我點擊我的訂閱報告服務器上什麼都沒有顯示..然後我查詢數據庫,它顯示訂閱表中的45行..你知道它爲什麼不顯示嗎? – user384080 2010-08-31 06:17:31

2

這裏的東西,我們使用從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 '...' 
+1

請注意名稱'參數'不正確SELECT,它應該是'參數'。我添加了一個更全面的答案,其中包括相關表格。 – Mike 2016-06-17 00:50:57

3

大廈,這個腳本修復他的錯誤,整個工程進度表及附表用戶記錄打破了參數(從而防止工作訂閱),並同時將。它在源和目標上都保持相同的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中。

+0

我打算將訂閱從一臺服務器遷移到另一臺服務器。由於SSRS通過創建作業來管理日程安排,只需在腳本的表格中創建記錄即可創建工作訂閱日程安排?在你的情況下,你通過在AddEvent表中創建條目來手動觸發一個時間表。 – 2017-11-16 00:25:21

+0

嗯 - 好問題。我不再在做報告遷移的地方工作,所以我無法檢查日程安排/作業是如何排序的 - 這是前一段時間。我記得儘管在遷移後沒有對訂閱的投訴,所以我認爲這意味着一切都好(無論是人們還是沒有注意到缺乏報告到達......我認爲這不太可能,因爲我們他說的是數百個訂閱 - 有人會說出來)。 – Mike 2017-11-19 20:38:14