[SSRS] レポートサーバーデータベース移行時のキー情報の削除方法について

今回の投稿では、SQL Server 2016 以降、かつ、Enterprise/Developer Edition 以外の Edition の Reporting Services に対するレポートサーバーデータベース移行時に発生する可能性がある現象とその対処策についてご案内します。

 

■ Reporting Services のレポートサーバーデータベースの移行方法について

Reporting Services が利用するレポートサーバーデータベース(既定では ReportServer, ReportServerTempDB) を移行し、別インスタンスの Reporting Services で利用する場合、移行元のレポートサーバーデータベースのバックアップを採取し、移行先の Reporting Services が参照する SQL Server インスタンスに復元します。その後、移行先の Reporting Services 構成マネージャにて、復元したレポートサーバーデータベースを使用するように指定することで、レポートサーバーデータベースの設定が完了します。

なお、上記手順によって、移行先のレポートサーバーデータベース内には、移行元のサーバー情報と移行先のサーバー情報が登録された状態となります。

 

この状態は、 Reporting Services のレポートサーバーデータベースの内部では、スケールアウト構成を実施した状態と同様の構成となります。

スケールアウト構成は、Enterprise/Developer Edition のみで利用可能な構成であるため、これら以外の Edition を利用している場合、 rskeymgmt を利用して、移行元のサーバー情報を削除する必要があります。

rskeymgmt による削除方法は下記の通りです。

 

1. 管理者として実行でコマンドプロンプトを開きます。

2. 下記のコマンドを実行し、移行元のサーバーが利用している installation-id を確認します。

 rskeymgmt -l

 

実行例)

C:\windows\system32>rskeymgmt -l

Server01\MSSQLSERVER - 1f8d21c3-f828-4f18-ab4e-f2e355491b9e

The command completed successfully

 

3. 下記のコマンドを実行し、移行元のサーバー情報を削除します。

 rskeymgmt -r <installation-id>

 

実行例)

C:\windows\system32>rskeymgmt -r 1f8d21c3-f828-4f18-ab4e-f2e355491b9e

Are you sure you want to delete this key? Yes (Y)/ No (N): Y

 

The command completed successfully

 

■ SQL Server 2016 以降における rskeymgmt の実行について

SQL Server 2016 以降、かつ、Enterprise/Developer Edition 以外の Edition の Reporting Services に対して、上記 rskeymgmt によるコマンドを実行すると下記のエラーが発生します。

 

The feature: “Scale-out deployment” is not supported in this edition of Reporting Services (rsOperationNotSupported)

(日本語版: このエディションの Reporting Services では、機能 "スケールアウト配置" はサポートされていません。)

 

■ 対処策について

本動作は SQL Server の問題であるため、現在、本問題の修正について検討が為されておりますが、現時点における修正予定は未定となります。

このため、下記の手順により問題に対処ください。本対処策の実行により Reporting Services の動作に影響を与えることはございませんので、ご安心ください。

 

1. SQL Server Management Studio から、移行先のレポートサーバーデータベースを復元した SQL Server データベースエンジン インスタンスに接続します。

2. ReportServer データベースをカレントとし、下記のクエリを実行します。

#<移行元のサーバー名> は移行元のサーバー名を入力してください。

USE ReportServer

GO

-- まずは下記コマンドを実行します。

BEGIN TRANSACTION

DELETE FROM Keys WHERE MachineName='<移行元のサーバー名>'

 

-- (1 行処理されました) と結果表示され、1行のみ削除されたことを確認します。

 

-- 問題なければ、下記のようにコミットします。

COMMIT TRANSACTION

 

-- 0件、もしくは2件以上削除された場合には、下記のようにロールバックします。

ROLLBACK TRANSACTION