共用方式為


將報表伺服器資料庫移至另一部電腦 (SSRS 原生模式)

適用於: SQL Server Reporting Services (SSRS) 原生模式

您可以將安裝 SQL Server 時所使用的報表伺服器資料庫移至位於不同電腦上的實例。

SQL Server 提供數種方法來移動資料庫:

  • 卸離和附加。 此方法提供行動報表伺服器資料庫的最簡單方式,但您必須在卸離資料庫時讓報表伺服器離線。
  • 備份和復原。 這種方法可將服務中斷降至最低,但您必須執行 Transact-SQL (T-SQL) 命令來執行作業。
  • 複製。 如果您使用複製資料庫精靈,不建議複製資料庫。 它不會保留資料庫中的使用權限設定。

本文說明如何使用卸離和附加方法,以及備份和還原方法。

必要條件

  • 設定的原生模式報表伺服器,用於安裝 SQL Server。
  • 不同電腦上的 SQL Server 實例。

準備移動資料庫

當您移動報表伺服器資料庫時,請記住下列幾點:

  • 您必須將 reportserver 和 reportservertempdb 資料庫一起移動或複製。 SSRS 安裝需要這兩個資料庫。
  • 暫存資料庫的名稱必須與主報表伺服器資料庫的名稱相同,但具有 tempdb 後綴。
  • 移動資料庫不會更改目前已針對報表伺服器項目所定義的排程作業。
    • 排程會在您第一次重新啟動報表伺服器服務時重新建立。
    • 用來觸發排程的 SQL Server 代理程式作業會在新的資料庫實例上重新建立。 您不需要將作業移至新計算機,但您可能想要刪除目前電腦上不再使用的作業。
    • 移動的資料庫會保留訂閱、快取報表以及快照集。 如果在移動資料庫之後,快照集未挑選重新整理的數據,請清除快照集選項。 然後選取 [ 套用 ] 以儲存變更、重新建立排程,然後選取 [ 再次套用 ] 以儲存變更。
    • 當您移動該資料庫時,儲存在暫存資料庫中的暫存報表和用戶會話數據會保存。

重要

當您重新配置報表伺服器資料庫是唯一對現有安裝所做的變更時,建議使用本文中的步驟。 當您移轉整個 SSRS 安裝時,您必須重新設定連線並重設加密金鑰。 例如,當您移動資料庫並變更使用資料庫的報表伺服器 Windows 服務身分識別時,需要這些步驟。

卸離及附加報表伺服器資料庫

如果可以將報表伺服器離線,您可以使用卸離和附加方法。 具體而言,您會將資料庫與目前的 SQL Server 實例中斷連結。 然後,您可以移動它們,並將其附加至您想要使用的實例。 這種方式可以保留資料庫中的權限。

移動資料庫之後,您必須重新設定報表伺服器與報表伺服器資料庫間的連接。 如果您執行向外延展部署,您必須重新設定部署中每個報表伺服器的報表伺服器資料庫連接。

若要使用卸離和附加方法,請執行下列各節中的步驟。

中斷連結資料庫

  1. 開啟報表伺服器組態管理員。

  2. 使用 [加密金鑰] 頁面來備份您要移動之報表伺服器資料庫的加密金鑰。

  3. 使用 [報表伺服器狀態] 頁面來停止報表伺服器服務。

  4. 開啟 SQL Server Management Studio,並連線到裝載報表伺服器資料庫的 SQL Server 實例。

  5. 以滑鼠右鍵按兩下報表伺服器資料庫,選取 [ 工作],然後選取 [ 卸離]。 針對報表伺服器暫存資料庫重複此步驟。

附加資料庫

  1. 尋找目前 SQL Server 實例的.mdf和 .ldf 檔案。 它們位於 [數據] 資料夾中。

    檔案總管 的螢幕快照。在 [數據] 資料夾中,.mdf和 .ldf 檔案會反白顯示報表伺服器資料庫和暫存資料庫。

  2. 複製或移動.mdf和 .ldf 檔案至您想要使用的 SQL Server 實例的 Data 資料夾。 因為移動的資料庫共有兩個,因此請確定您總共移動或複製四個檔案。

  3. 在 SQL Server Management Studio 中,開啟裝載報表伺服器資料庫之新 SQL Server 實例的連接。

  4. 以滑鼠右鍵按兩下 [ 資料庫] 節點,然後選取 [ 附加]。

  5. 選取 [新增],選取您要附加之報表伺服器資料庫的 .mdf 和 .ldf 檔案。 針對報表伺服器暫存資料庫重複此步驟。

完成設定

  1. 確認您附加的資料庫具有 RSExecRole 角色。 您必須設定 RSExecRole ,以選取、插入、更新、刪除和報表伺服器資料庫數據表的參考許可權,以及執行預存程式的許可權。 如需詳細資訊,請參閱 建立 RSExecRole

  2. 啟動報表伺服器組態管理員,並開啟與報表伺服器的連線。

  3. 在 [資料庫] 頁面上,選取新的 SQL Server 執行個體,然後選取 [連線]

  4. 選取您剛移動的報表伺服器資料庫,然後選取 [ 套用]。

  5. 在 [加密金鑰] 頁面上,選取 [還原]。 指定包含金鑰備份副本的檔案以及解除鎖定此檔案的密碼。

  6. 重新啟動報表伺服器服務。

備份及還原報表伺服器資料庫

如果您無法讓報表伺服器離線,您可以使用備份和還原方法來重新放置報表伺服器資料庫。 使用此方法時,您必須使用 T-SQL 語句。

下列各節中的步驟說明如何備份和還原資料庫,以及如何設定報表伺服器以使用新伺服器實例上的資料庫。

使用 BACKUP 和 COPY_ONLY 備份報表伺服器資料庫

若要備份資料庫,請開啟 SQL Server Management Studio,然後在查詢視窗中執行下列語句。 這些語句會使用 COPY_ONLY 自變數,並備份資料庫和記錄檔。

執行這些語句之前,請將 <path-to-backup-folder> 佔位元取代為您目前實例的Backup資料夾路徑,例如 C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\BACKUP

-- To permit log backups, alter the database to use the full recovery model
-- before you run the full database backup.
USE master;
GO
ALTER DATABASE ReportServer
   SET RECOVERY FULL

-- First back up the database without using the COPY_ONLY argument.
-- This step is needed after you change the recovery model to full.
-- It prevents a 4214 error from occurring.
USE master;
GO
BACKUP DATABASE ReportServer
TO DISK = '<path-to-backup-folder>\ReportServerExtraBackup.bak'
GO

-- If the ReportServerData device doesn't exist yet, create it.
USE master
GO
EXEC sp_addumpdevice 'disk', 'ReportServerData',
'<path-to-backup-folder>\ReportServerData.bak'

-- Create a logical backup device, ReportServerLog.
USE master
GO
EXEC sp_addumpdevice 'disk', 'ReportServerLog',
'<path-to-backup-folder>\ReportServerLog.bak'

-- Back up the full ReportServer database.
BACKUP DATABASE ReportServer
   TO ReportServerData
   WITH COPY_ONLY

-- Back up the ReportServer log.
BACKUP LOG ReportServer
   TO ReportServerLog
   WITH COPY_ONLY

-- To permit log backups, alter the database to use the full recovery model
-- before you run the full database backup.
USE master;
GO
ALTER DATABASE ReportServerTempdb
   SET RECOVERY FULL

-- First back up the database without using the COPY_ONLY argument.
-- This step is needed after you change the recovery model to full.
-- It prevents a 4214 error from occurring.
USE master;
GO
BACKUP DATABASE ReportServerTempdb
TO DISK = '<path-to-backup-folder>\ReportServerTempdbExtraBackup.bak'
GO

-- If the ReportServerTempDBData device doesn't exist yet, create it.
USE master
GO
EXEC sp_addumpdevice 'disk', 'ReportServerTempDBData',
'<path-to-backup-folder>\ReportServerTempDBData.bak'

-- Create a logical backup device, ReportServerTempDBLog.
USE master
GO
EXEC sp_addumpdevice 'disk', 'ReportServerTempDBLog',
'<path-to-backup-folder>\ReportServerTempDBLog.bak'

-- Back up the full ReportServerTempDB database.
BACKUP DATABASE ReportServerTempDB
   TO ReportServerTempDBData
   WITH COPY_ONLY

-- Back up the ReportServerTempDB log.
BACKUP LOG ReportServerTempDB
   TO ReportServerTempDBLog
   WITH COPY_ONLY

使用 RESTORE 和 MOVE 重新放置報表伺服器資料庫

若要還原資料庫,請開啟 SQL Server Management Studio,然後在查詢視窗中執行下列語句。

在這些語句中:

  • RESTORE資料庫和記錄檔的作業會個別執行。

  • MOVE 變數可讓您指定路徑。 這個自變數會使用數據檔的邏輯名稱。 若要尋找邏輯名稱,請執行下列語句。 首先,將 <path-to-report-server-database-backup-file> 佔位元取代為報表伺服器資料庫備份文件的路徑,例如 C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup\ReportServerData.bak

    RESTORE FILELISTONLY FROM DISK='<path-to-report-server-database-backup-file>';
    

    您可以在輸出的 LogicalName 資料列中找到邏輯名稱。

    SQL Server Management Studio 查詢視窗中 RESTORE FILELISTONLY 語句的螢幕快照。在輸出中,會反白顯示LogicalName資料行。

    您可以執行類似的語句來尋找暫存資料庫的邏輯名稱:

    RESTORE FILELISTONLY FROM DISK='<path-to-temporary-database-backup-file>';
    
  • FILE 變數可讓您指定要還原之記錄檔的檔案位置。 若要尋找檔案位置,請執行下列語句。 首先,將 <path-to-report-server-database-backup-file> 佔位元取代為報表伺服器資料庫備份文件的路徑,例如 C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Backup\ReportServerData.bak

    RESTORE HEADERONLY FROM DISK='<path-to-report-server-database-backup-file>';
    

    您可以在輸出的 [位置] 資料列中找到檔案位置。

    SQL Server Management Studio 查詢視窗中 RESTORE HEADERONLY 語句的螢幕快照。在輸出中,[位置] 資料行會反白顯示。

    您可以執行類似的語句來尋找暫存資料庫的檔案位置:

    RESTORE HEADERONLY FROM DISK='<path-to-temporary-database-backup-file>';
    
  • NORECOVERY 變數會執行初始還原。 這個自變數會讓資料庫保持狀態 RESTORING ,讓您有時間檢閱記錄備份,以判斷要還原的記錄備份。

  • 最後一個步驟會使用 RESTORE 引數重複執行 RECOVERY 作業。

執行這些語句之前,請先將下列佔位元取代為適當的值:

預留位置 描述: 範例
<path-to-backup-folder> 目前實例之 Backup 資料夾的路徑 C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\BACKUP
<path-to-new-data-folder> 新實例之 Data 資料夾的路徑 C:\Program Files\Microsoft SQL Server\MSSQL16.NEWINSTANCE\MSSQL\DATA
<report-server-database-logical-name> 報表伺服器資料庫的邏輯名稱 ReportServer
<report-server-database-log-logical-name> 報表伺服器資料庫記錄的邏輯名稱 ReportServer_log
<report-server-database-log-file-position> 報表伺服器資料庫記錄檔的檔案位置 2
<temporary-database-logical-name> 暫存資料庫的邏輯名稱 ReportServerTempDB
<temporary-database-log-logical-name> 暫存資料庫記錄的邏輯名稱 ReportServerTempDB_log
<temporary-database-log-file-position> 暫存資料庫記錄檔的檔案位置 2
-- Restore the report server database and move it to the new instance folder.
RESTORE DATABASE ReportServer
   FROM DISK='<path-to-backup-folder>\ReportServerData.bak'
   WITH NORECOVERY,
      MOVE '<report-server-database-logical-name>' TO
         '<path-to-new-data-folder>\ReportServer.mdf',
      MOVE '<report-server-database-log-logical-name>' TO
         '<path-to-new-data-folder>\ReportServer_Log.ldf';
GO

-- Restore the report server log file to the new instance folder.
RESTORE LOG ReportServer
   FROM DISK='<path-to-backup-folder>\ReportServerData.bak'
   WITH NORECOVERY, FILE=<report-server-database-log-file-position>,
      MOVE '<report-server-database-logical-name>' TO
         '<path-to-new-data-folder>\ReportServer.mdf',
      MOVE '<report-server-database-log-logical-name>' TO
         '<path-to-new-data-folder>\ReportServer_Log.ldf';
GO

-- Restore and move the report server temporary database.
RESTORE DATABASE ReportServerTempdb
   FROM DISK='<path-to-backup-folder>\ReportServerTempDBData.bak'
   WITH NORECOVERY,
      MOVE '<temporary-database-logical-name>' TO
         '<path-to-new-data-folder>\ReportServerTempDB.mdf',
      MOVE '<temporary-database-log-logical-name>' TO
         '<path-to-new-data-folder>\ReportServerTempDB_Log.ldf';
GO

-- Restore the temporary database log file to the new instance folder.
RESTORE LOG ReportServerTempdb
   FROM DISK='<path-to-backup-folder>\ReportServerTempDBData.bak'
   WITH NORECOVERY, FILE=<temporary-database-log-file-position>,
      MOVE '<temporary-database-logical-name>' TO
         '<path-to-new-data-folder>\ReportServerTempDB.mdf',
      MOVE '<temporary-database-log-logical-name>' TO
         '<path-to-new-data-folder>\ReportServerTempDB_Log.ldf';
GO

-- Perform the final restore operation on the report database.
RESTORE DATABASE ReportServer
   WITH RECOVERY
GO

-- Perform the final restore operation on the temporary database.
RESTORE DATABASE ReportServerTempDB
   WITH RECOVERY
GO

設定報表伺服器資料庫連線

  1. 啟動報表伺服器組態管理員,並開啟與報表伺服器的連線。

  2. 在 [資料庫] 頁面上,選取 [變更資料庫] 。

  3. 在 [變更資料庫] 頁面上,選取 [ 選擇現有的報表伺服器資料庫],然後選取 [ 下一步]。

  4. 針對 [ 伺服器名稱],輸入現在裝載報表伺服器資料庫的 SQL Server 實例,然後選取 [ 測試連線]。

  5. 測試連線之後,請選取 [ 下一步]。

  6. 針對 [報表伺服器資料庫],選取您想要使用的報表伺服器資料庫,然後選取 [ 下一步]。

  7. 在 [認證] 下,指定報表伺服器用來連接到報表伺服器資料庫的認證,然後選取 [下一步]。

  8. 選取 [下一步],然後選取 [完成]

注意

在 SSRS 安裝中,SQL Server 資料庫引擎 實例必須包含 RSExecRole 角色。 當您使用報表伺服器組態管理員來設定報表伺服器資料庫連接時,會發生角色建立、登入註冊和角色指派。 如果您使用替代方法,例如rsconfig.exe命令提示字元公用程式,報表伺服器就不會處於工作狀態。 在此情況下,您可能必須撰寫 Windows Management Instrumentation (WMI) 程式代碼,讓報表伺服器可供使用。 如需詳細資訊,請參閱 存取 Reporting Services WMI 提供者