次の方法で共有


SQL Server のアップグレードが失敗し、エラー 15151 が返される

この記事は、Microsoft SQL Server 用の累積的な更新プログラム (CU) またはサービス パック (SP) をインストールするときに発生するエラー 15151 のトラブルシューティングに役立ちます。 このエラーは、データベース アップグレード スクリプトが実行されるときに発生します。

現象

CU または SP を適用すると、セットアップ プログラムは次のエラー メッセージを返します。

データベース エンジンの復旧ハンドルの待機に失敗しました。 考えられる原因については、SQL Server エラー ログを確認してください

さらに、次のエラー エントリが SQL Server エラー ログに記録される場合があります。

Error: 15151, Severity: 16, State: 1.
Cannot find the login '##MS_SSISServerCleanupJobLogin##', because it does not exist or you do not have permission.

原因

この問題は、ログイン (サーバー プリンシパル) が手動で削除されたか、これらの 構造体 に従っていないために発生します。

CU または SP のインストール中に実行されるデータベース アップグレード スクリプトの詳細については、「 更新プログラムの適用時のアップグレード スクリプトのエラーを解決するを参照してください。

解決方法

この問題を解決するには、次の手順を実行します:

  1. trace フラグ 902 で SQL Server を起動します。

  2. サーバーでログインを再作成します。

    CREATE LOGIN [##MS_SSISServerCleanupJobLogin##]
    WITH PASSWORD = N'<password>',
    DEFAULT_DATABASE = [master],
    DEFAULT_LANGUAGE = [us_english],
    CHECK_EXPIRATION = OFF,
    CHECK_POLICY = OFF;
    
  3. SSISDB データベースに切り替え、既存のユーザーを新しく作成したログインにマップします。

    USE SSISDB
    GO
    ALTER USER [##MS_SSISServerCleanupJobUser##] WITH LOGIN =[##MS_SSISServerCleanupJobLogin##]
    
  4. 場合によっては、データベース のユーザー情報も不足している可能性があります。 この場合は、 SSISDB データベースにユーザーを再作成し、前の手順を再実行して、ユーザーをログインにマップします。

    USE [SSISDB]
    GO
    DROP USER [##MS_SSISServerCleanupJobUser##]
    GO
    
    CREATE USER [##MS_SSISServerCleanupJobUser##] FOR LOGIN [##MS_SSISServerCleanupJobLogin##]
    GO
    
    ALTER USER [##MS_SSISServerCleanupJobUser##] WITH DEFAULT_SCHEMA=[dbo]
    GO
    
    GRANT EXECUTE ON [internal].[cleanup_server_project_version] TO [##MS_SSISServerCleanupJobUser##]
    GO
    GRANT EXECUTE ON [internal].[cleanup_server_retention_window] TO [##MS_SSISServerCleanupJobUser##]
    GO