将报表服务器数据库移到另一台计算机(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 实例分离。 然后移动它们并将其附加到要使用的实例。 此方法将保留数据库中的权限。
移动数据库后,必须重新配置报表服务器与报表服务器数据库的连接。 如果运行横向扩展部署,则必须为部署中的每个报表服务器重新配置报表服务器数据库连接。
若要使用分离和附加方法,请执行以下步骤。
分离数据库
打开报表服务器配置管理器。
使用“加密密钥”页备份要移动的报表服务器数据库的加密密钥。
使用“报表服务器状态”页停止报表服务器服务。
打开 SQL Server Management Studio 并连接到托管报表服务器数据库的 SQL Server 实例。
右键单击报表服务器数据库,选择“任务”,然后选择“分离”。 对报表服务器临时数据库重复此步骤。
附加数据库
查找当前 SQL Server 实例的.mdf和 .ldf 文件。 它们位于“数据”文件夹中。
将.mdf和 .ldf 文件复制或移动到要使用的 SQL Server 实例的数据文件夹。 由于要移动两个数据库,因此请确保移动或复制所有四个文件。
在 SQL Server Management Studio 中,打开与承载报表服务器数据库的新 SQL Server 实例的连接。
右键单击 “数据库” 节点,然后选择“ 附加”。
选择“添加”以选择要附加的报表服务器数据库 .mdf 和 .ldf 文件。 对报表服务器临时数据库重复此步骤。
完成配置
验证附加的数据库是否具有 RSExecRole 角色。 必须配置 RSExecRole ,以便对报表服务器数据库表选择、插入、更新、删除和引用权限,以及对存储过程执行权限。 有关详细信息,请参阅 创建 RSExecRole。
启动报表服务器配置管理器并打开与报表服务器的连接。
在“数据库”页上,选择新的 SQL Server 实例,然后选择“连接”。
选择刚移动的报表服务器数据库,然后选择“ 应用”。
在“加密密钥”页上,选择“还原”。 指定包含密钥备份副本的文件以及该文件的解锁密码。
重启报表服务器服务。
备份和还原报表服务器数据库
如果无法使报表服务器脱机,可以使用备份和还原方法来重新定位报表服务器数据库。 使用此方法时,必须使用 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 列中找到逻辑名称。
可以运行类似的语句来查找临时数据库的逻辑名称:
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>';
可以在输出的“位置”列中找到文件位置。
可以运行类似的语句来查找临时数据库的文件位置:
RESTORE HEADERONLY FROM DISK='<path-to-temporary-database-backup-file>';
该
NORECOVERY
参数执行初始还原。 此参数使数据库处于RESTORING
状态,这让你有时间查看日志备份以确定要还原的备份。最后一步是重复包含
RESTORE
参数的RECOVERY
操作。
运行这些语句之前,请将以下占位符替换为适当的值:
占位符 | 说明 | 示例 |
---|---|---|
<path-to-backup-folder> | 当前实例的“备份”文件夹的路径 | 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
配置报表服务器数据库连接
启动报表服务器配置管理器并打开与报表服务器的连接。
在“数据库”页上,选择“更改数据库” 。
在“更改数据库”页上,选择 现有报表服务器数据库,然后选择“ 下一步”。
对于 服务器名称,请输入现在托管报表服务器数据库的 SQL Server 实例,然后选择“ 测试连接”。
测试连接后,选择“ 下一步”。
对于 报表服务器数据库,请选择要使用的报表服务器数据库,然后选择“ 下一步”。
在“凭据”下,指定报表服务器用于连接到报表服务器数据库的凭据,然后选择“下一步”。
选择“下一步”,然后选择“完成” 。
注意
在 SSRS 安装中,SQL Server 数据库引擎实例必须包含 RSExecRole 角色。 使用报表服务器配置管理器设置报表服务器数据库连接时,会发生角色创建、登录注册和角色分配。 如果使用备用方法(例如rsconfig.exe命令提示符实用工具),则报表服务器未处于工作状态。 在这种情况下,可能需要编写 Windows Management Instrumentation (WMI) 代码才能使报表服务器可用。 有关详细信息,请参阅 访问 Reporting Services WMI 提供程序。