[SSRS] Reporting Services サービスが起動しない

小林 真治
SQL Developer Support Escalation Engineer

みなさん、こんにちは。
これまで起動していた SQL Server Reporting Services サービスが急に起動しなくなってしまった、というお問い合わせを何件かいただきましたので、この場を借りて対処方法についてお知らせします。
全て(SQL Server 2005, 2008, 2008 R2, 2012) の Reporting Services のバージョンで発生し得る問題です。

要因について

Reporting Services サービスが起動しなくなるタイミングは、修正プログラムや Service Pack の適用後など様々ですが、サービス起動の失敗は、サービス コントロールマネージャのタイムアウト時間である 30秒以内に、 Reporting Services サービスが自身のステータスをサービスコントロールマネージャへ通知できないことに起因しています。

尚、タイムアウトである応答時間までに応答を返せない原因として、Reporting Services の起動時の証明書関連のチェック処理に時間を要している可能性が想定されます。
Reporting Services は、 .NET Framework ベースのアプリケーションとなりますが、 .NET Framework のアセンブリに、 Authenticode の署名をもつ場合、 ロード時に CRL (証明書失効リスト) をダウンロードし、Authenticode の署名が失効していないかどうかの確認を行います。
この確認において、インターネットにアクセスできない環境や参照先 URL に接続を行う際に時間を要すると、サービス起動処理に許容された時間内に処理が収まらずタイムアウトに達し、この結果、 Reporting Services サービスの起動がキャンセルされます。
この現象は、同様の構成をしたサーバーにおいても発生する/しないの差違が見られることがあります。

合致しているかの判断基準
前述の要因に合致している場合、イベントログのシステムログに下記のイベントが発生していることを確認できます。
下記のイベントは既定のインスタンス(MSSQLSERVER)におけるイベントログとなりますので、現象が発生しているインスタンスによってインスタンス名は異なります。

イベント1 

種類 : エラー
ソース : Service Control Manager
分類 : なし
イベント ID : 7000
説明 :
" SQL Server Reporting Services (MSSQLSERVER) サービスを、次のエラーが原因で開始できませんでした:
そのサービスは指定時間内に開始要求または制御要求に応答しませんでした。"

イベント2

種類 : エラー
ソース : Service Control Manager
分類 : なし
イベント ID : 7011
説明 :
SQL Server Reporting Services (MSSQLSERVER) サービスの接続を待機中にタイムアウト(30000 ミリ秒) になりました。

本現象の対処策について
本現象の対処策として、下記の二つの対処策が有効です。

  a. Reporting Servicesのアセンブリの証明書のチェックを無効にする
  b. サービスコントロールマネージャ のタイムアウトを延ばす

それぞれの詳細を以下に記載致します。

a. Reporting Servicesのアセンブリの証明書のチェックを無効にする
Reporting Services はアセンブリのチェック処理を必須としないため、Reporting Services のみアセンブリの証明書関連のチェック処理を無効にすることで、証明書関連のチェックの時間を省きサービス起動時間に応答を返すようにします。
この動作変更により、Reporting Services に影響を与えることはありません。また、この操作による OS の再起動は必要としません。

Reporting Servicesのアセンブリの証明書関連のチェック処理を無効にするには、ReportingServicesService.exe.config ファイルに以下を追加します。

<generatePublisherEvidence enabled="false"/>

下記に、一例を紹介します。

1). ReportingServicesService.exe.config をコピーしバックアップします。
既定では、下記のパスに存在いたしますが、環境に合わせてパスをご変更ください。
この時点の設定ファイルをバックアップすることで、不測の事態が生じた際に、該当バックアップファイルをもとに戻して対応します。

- SQL Server 2005: C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin

- SQL Server 2008: C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\bin

- SQL Server 2008 R2: C:\Program Files\Microsoft SQL Server\MSRS10_50.MSSQLSERVER\Reporting Services\ReportServer\bin

- SQL Server 2012: C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\bin

2). ReportingServicesService.exe.config をメモ帳などで開きます。
該当パス上の ReportingServicesService.exe.config ファイルをメモ帳で開きます。

3). <runtime> タグの配下に下記を追加します。

<generatePublisherEvidence enabled="false"/>

例えば、下記のような形で追記します。

----------------------------------------------------------------------------
              <runtime>
                           <generatePublisherEvidence enabled="false"/>
----------------------------------------------------------------------------

4). ReportingServicesService.exe.config への変更を保存します。

5). Reporting Services サービスを起動します。

b. サービスコントロールマネージャ のタイムアウトを延ばす
本現象は、サービスコントロールマネージャのタイムアウト時間までに、 Reporting Services サービスの応答が通知されないために発生しています。
このため、サービスコントロールマネージャのタイムアウト時間を、 Reporting Services サービスからの応答時間まで延長することで回避することが可能です。
サービスコントロールマネージャのタイムアウト時間は、下記資料の「回避策」にある対処方法を実施ください。

Windows Server 2003 でサービスが開始されずイベント 7000 および 7011 が記録される
https://support.microsoft.com/kb/922918/ja

<考慮事項>
・x64 環境では、上記資料の [DWORD 値] の部分は [DWORD (32 ビット) 値] と表示されますので、[DWORD (32 ビット) 値] を追加します。
・タイムアウト値に指定する値は、環境により適切なタイムアウト値が異なりますが、 弊社実績から、まずは 1 分に相当する、60000に設定し、サービス起動可否をご確認ください。
・60000 にて回避できない場合は、値をさらに大きくしてお試しください。
・本対処策を実施した場合、全てのサービスに設定したタイムアウト値が設定されます点にご注意ください。
・変更を有効にするために、OS の再起動が必要です。

参考情報
MS12-070 の適用により SSRS が起動しない事象を説明した blog が公開されています。

Reporting Services service doesn't start after the installation of MS12-070 security patch
https://blogs.msdn.com/b/mariae/archive/2012/11/12/reporting-services-service-doesn-t-start-after-the-installation-of-ms12-070-security-patch.aspx