您會推薦將最簡單的方式將訂閱從一個報告服務轉移(或複製)到另一個不同服務器中的報告服務嗎?轉移訂閱報告服務
轉移訂閱報告服務
回答
有多少訂閱?
如果數字最小的最容易的事情是在其他服務器上手動重新創建它們。
如果我們正在談論相當數量的話,那麼有一個數據庫報告服務來存儲我認爲被稱爲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