Problem
You need to migrate a SQL Server Reporting Services (SSRS) Native Mode environment installed on one server and move it all to another server. Check out this tip to learn the SSRS migration steps.
Solution
The high-level SSRS migration steps are:
- Backup SSRS databases on source server
- Backup Encryption Key on source server
- Restore SSRS databases on target server
- Restore Encryption Key on target server
- Remove old server name from the Keys table on the target server
- Test
Below are the versions and editions I used, however, you can follow these steps for other versions and editions.
- Windows 10
- SQL Server 2012 Developer Edition (source)
- SQL Server 2017 Developer Edition (target)
Source Server
Even though the steps are the same whether it’s one or 1,000 reports, we’ll keep it simple. Here we’ll use an SSRS Server with one Folder, one Report, and one Subscription.
Here’s the MyReports Folder with MyReport.

And here’s the Subscription that automatically runs MyReport.

Edit the directory you want to use for your backup files here and execute to backup databases ReportServer and ReportServerTempDB.
-- backup ReportServer
BACKUP DATABASE [ReportServer]
TO DISK = N'C:\backups\ReportServer_migration.bak' -- edit backup directory and file name
WITH INIT,
NAME = N'ReportServer-Full Database Backup',
SKIP,
COMPRESSION,
STATS = 10
GO
-- backup ReportServerTempDB
BACKUP DATABASE [ReportServerTempDB]
TO DISK = N'C:\backups\ReportServerTempDB_migration.bak' -- edit backup directory and file name
WITH INIT,
NAME = N'ReportServerTempDB-Full Database Backup',
SKIP,
COMPRESSION,
STATS = 10
GOBackup the encryption key by opening the Reporting Services Configuration Manager on the source server
- Encryption Keys
- Backup
- Enter directory and file name
- Give it a password that meets your domain requirement
- Confirm password
- Click OK

Target Server
Step 1
Open the Reporting Services Configuration Manager on the new server.
- Click Stop to stop Reporting Services

Step 2
Copy the backup files from the source to the target server.
Step 3
Once completed, edit the following code with the path to your backup files, and path to the physical database files in the following and execute to restore the two databases. (Note: everything is pointing to C:\ here as I’m testing this on one laptop with 2 named instances of SQL Server. Obviously a good place to test, but you’ll most likely be doing this on actual servers.)
-- Restore ReportServer
USE [master]
RESTORE DATABASE [ReportServer]
FROM DISK = N'C:\backups\ReportServer_migration.bak' -- edit backup directory and file name
WITH FILE = 1,
-- edit physical file path
MOVE N'ReportServer' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\DATA\ReportServer.mdf',
MOVE N'ReportServer_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\DATA\ReportServer_log.ldf',
NOUNLOAD,
REPLACE,
STATS = 5
GO
-- update compat level
ALTER DATABASE [ReportServer] SET COMPATIBILITY_LEVEL = 140
GO
-- set db owner to sa
USE [ReportServer]
GO
ALTER AUTHORIZATION ON DATABASE::[ReportServer] TO [sa]
GO
-- dbcc
dbcc CHECKDB([ReportServer]) WITH NO_INFOMSGS
-- Restore ReportServerTempDB
USE [master]
RESTORE DATABASE [ReportServerTempDB]
FROM DISK = N'C:\backups\ReportServerTempDB_migration.bak' -- edit backup directory and file name
WITH FILE = 1,
-- edit physical file path
MOVE N'ReportServerTempDB' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\DATA\ReportServerTempDB.mdf',
MOVE N'ReportServerTempDB_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\DATA\ReportServerTempDB_log.ldf',
NOUNLOAD,
REPLACE,
STATS = 5
GO
-- update compat level
ALTER DATABASE [ReportServerTempDB] SET COMPATIBILITY_LEVEL = 140
GO
-- set db owner to sa
USE [ReportServerTempDB]
GO
ALTER AUTHORIZATION ON DATABASE::[ReportServerTempDB] TO [sa]
GO
-- dbcc
dbcc CHECKDB([ReportServerTempDB]) WITH NO_INFOMSGS
-- sp_helpdb
EXEC sp_helpdb [ReportServer]
EXEC sp_helpdb [ReportServerTempDB]Step 4
We need to ensure the logins and users are in sync at this time. To demonstrate what happens if you omit this step, we’ll digress briefly. Go back to the Report Server Configuration Manager.
- Click Start to start the service

The service starts and it appears to be working. Then this error log appears:

For our example, we’re using the default accounts to run the services on both our source and target SSRS servers. Since there is no associated login with it, the user will not show up in Management Studio. Essentially, it’s orphaned. Regardless, you can still see it by querying sys.sysusers in each database.
SELECT name FROM [ReportServer].[sys].[sysusers]
SELECT name FROM [ReportServerTempDB].[sys].[sysusers]Even though we aren’t required to delete the orphaned users, we can do some housekeeping while we have the chance.
USE [ReportServer]
GO
DROP SCHEMA [NT SERVICE\ReportServer$SQL2012]
GO
DROP USER [NT SERVICE\ReportServer$SQL2012]
GO
USE [ReportServerTempDB]
GO
DROP SCHEMA [NT SERVICE\ReportServer$SQL2012]
GO
DROP USER [NT SERVICE\ReportServer$SQL2012]
GOStep 5
Now we’re ready to add our users and assign them to the proper groups.
-- master
USE [master]
GO
CREATE USER [NT SERVICE\SQLServerReportingServices]
FOR LOGIN [NT SERVICE\SQLServerReportingServices]
WITH DEFAULT_SCHEMA=[NT SERVICE\SQLServerReportingServices]
GO
ALTER ROLE [RSExecRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
-- msdb
USE [msdb]
GO
ALTER ROLE [RSExecRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
ALTER ROLE [SQLAgentOperatorRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
ALTER ROLE [SQLAgentReaderRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
ALTER ROLE [SQLAgentUserRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
-- ReportServer
USE [ReportServer]
GO
ALTER ROLE [db_owner] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
ALTER ROLE [RSExecRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
-- ReportServerTempDB
USE [ReportServerTempDB]
GO
ALTER ROLE [db_owner] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GO
ALTER ROLE [RSExecRole] ADD MEMBER [NT SERVICE\SQLServerReportingServices]
GOStep 6
Stop and start SSRS again.
Step 7
Check for errors in the error log and there should not be any more login failures.
EXEC sp_readerrorlogLook for NT SERVICE\SQLServerReportingServices connections.
EXEC sp_who 'NT SERVICE\SQLServerReportingServices'And we expect to see something like this:

Step 8
Go back to the Report Server Configuration Manager.
- Encryption Keys
- Restore
- Fully qualified file name of Encryption Key backup from the source server
- Password
- Click OK

You should see the restore was successful and Reporting Services was restarted.

If you’re on SQL Server Standard Edition, you’ll encounter a “scale-out deployment is not supported in this edition of reporting services” error when you open the SSRS Web Portal.
We just need to delete the source server record.
SELECT *
FROM [ReportServer].[dbo].[keys]
GO![[ReportServer].[dbo].[keys]](/wp-content/images-tips/6323_migrating-sql-server-reporting-services.010.png)
DELETE [dbo].[Keys]
WHERE InstanceName LIKE 'SQL2012'
GOStep 9
Open http://targetservername/Reports/ and here are our Reports.

And here are the Subscriptions.

And here is the SQL Agent Job that was automatically created.

Note: you’ll probably want to disable jobs while testing.
Checklist
In addition to the steps above, here’s a handy checklist to use if you like simple checklists like I do.
SSRS Migration Checklist
- Source Server
- Backup ReportServer and ReportServerTempDB together
- Copy backups to target server
- Backup SSRS Encryption Key
- Target Server
- Stop Reporting Services thru Reporting Services Configuration Manager
- Restore ReportServer and ReportServerTempDB from backups
- Update Compatibility Level if going to a newer version of SQL Server
- Update database owners
- Run DBCC CHECKDB on ReportServer and ReportServerTempDB
- Fix logins and users
- Start Reporting Services
- Verify no login errors in errorlog
- Restore Encryption Key
- DELETE [ReportServer].[dbo].[Keys] WHERE InstanceName = ‘SourceSsrsServerName’
- Validate at http://TargetServerName/Reports/
- Test
Next Steps
Below are some links to more info on migrating SQL Server Reporting Services:

Joe Gavin is from Greater Boston and has worked in technology as a Field Service Engineer for an automotive dealer computer system vendor, a Technical Consultant and Operations Analyst with Sybase and SQL Server based database applications in financial services and now works as a SQL Server Database Administrator.
- MSSQLTips Awards:
- Achiever Award (75+ Tips) – 2024 | Author of the Year – 2021 | Author Contender – 2024 |
- Rookie Contender – 2018
Hi Joe,
Thank you for detailed steps
At Step 5
CREATE USER [NT SERVICE\SQLServerReportingServices]
FOR LOGIN [NT SERVICE\SQLServerReportingServices] do I need to run this for all 3 databases?
Thank you for the detailed steps. In Step 5, CREATE USER [NT SERVICE\SQLServerReportingServices]
FOR LOGIN [NT SERVICE\SQLServerReportingServices], should this be for all 3 databases master, Report and ReportServer? Thank you
Kanav, any time I’ve migrated an SSRS instance I’ve migrated the SQL Agent jobs separately beforehand as a regular migration step. They do have to be done separately as they’re in msdb and not the SSRS databases.
Thanks for pointing it out.
Hi Joe, This tip is very helpful, I’ve successfully migrated my report server database from SQL 2016 to SQL 2022. Almost everything went well. Reports, Data sources, Subscriptions got moved gracefully. However there is just one problem which is quite big i.e. the SQL agent jobs for the subscriptions are not getting created. Any thoughts ?
Beatriz, sounds like you may have a problem with the encryption key. May want to export / import it again.
I carried out all the steps and it works fine but I have a problem, the groups and users that I had in the security section are not migrated, nor are the access permissions in the reports based on the roles. your help please
Thanks for this! It worked successfully for migrating a reporting services database from SQL 2012 to SQL 2022! :)
Thanks for the feedback Shaun. I haven’t had the need to move one to 2022 yet. Glad to know the solution is still good.
Thanks for this! This worked perfectly for migrating a reporting services database from SQL 2016 to SQL 2022!
Thank you KB!
Thanks for this guide — I’ve tried rs.exe for a migration and upgrade from SSRS 2012 to 2019 and had nothing but permissions and other errors. This method worked right away. The user accounts and Keys table issues would have stumped me without this article anticipating the problem and solution! Thanks again.
Thanks Joe, I will try the same.
Khalique, good question. I’ve never gone all the way from 2008R2 to 2019 but the most recent one I’ve done going from 2017 to 2019 started off originally on 2008R2 but had stops at 2012 and 2017. I’d say 2012 as an interim step would be a good idea.
Hi Joe,
I want to refer back to your comment on May 17, 2022. I used this process to upgrade 2008R2 to 2019. I succeeded but have some issues. For example, reports are missing data sources. And Subscriptions not working and not even editable.
My question is should I move 2008R2 to an intermediate version, like 2012, before going to 2019? What do you suggest?
Thanks.
So it appears the upgrade process for the ReportServer and ReportServerTemp databases is performed by the SSRS Service upon startup.
Just compared a set of 2017 database to the restored copy of those same databases on a new 2019 SSRS instance after following your procedure and there are 30 new and 23 updated objects and 1 that doesn’t exist in the ReportServer database on the 2019 instance.
TomV, I’ve used this process going from 2008R2 to 2012 to 2017 and 2019 without any problem.
Where’s the upgrade step? You can’t tell me a 2012 SSRS database is compatible with 2017. Does the service automatically upgrade the DB when the service starts? What am I missing?
I exactly followed the steps and it worked. Thanks a lot for your effort.
Thanks for the prompt response, this problem solved which comes because i was not update encryption key.
after came other error ‘System.Guid’ to type ‘System.String’. whenever i report open from source side.
which are not shown web portal side.
Vivek, are you sure you deleted the old SSRS instance name?
I followed your step but last show
“The feature: “Scale-out deployment” is not supported in this edition of Reporting Services. (rsOperationNotSupported) “
and [ReportServer].[dbo].[Keys] delete old key but when start report server service again restore in table