次の方法で共有


更新データベース スクリプトの実行時にエラー コード 2714 で SQL Server のアップグレードが失敗する

この記事では、データベース アップグレード スクリプトを実行するときに累積的な更新プログラム (CU) または Service Pack (SP) がエラー 2714 を報告する問題を解決します。

現象

CU または SP を適用すると、セットアップ プログラムで次のエラーが報告されることがあります。

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

SQL Server エラー ログを確認すると、次のいずれかのエラー メッセージグループが表示されることがあります。

2021-07-27 14:08:44.31 spid6s      Error: 2714, Severity: 16, State: 6.
2021-07-27 14:08:44.31 spid6s      There is already an object named 'DatabaseMailUserRole' in the database.
2021-07-27 14:08:44.31 spid6s      Error: 2759, Severity: 16, State: 0.
2021-07-27 14:08:44.31 spid6s      CREATE SCHEMA failed due to previous errors.
2021-07-27 14:08:44.31 spid6s      Error: 912, Severity: 21, State: 2.
2021-07-27 14:08:44.31 spid6s      Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 2714, state 6, severity 25.
This is a serious error condition which might interfere with regular operation and the database will be taken offline.
If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting.
Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.
2021-07-27 14:08:44.32 spid6s      Error: 3417, Severity: 21, State: 3.
Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online.
2021-07-27 14:08:44.31 spid6s      Error: 2714, Severity: 16, State: 6.
2021-07-27 14:08:44.31 spid6s      There is already an object named 'TargetServersRole' in the database.
2021-07-27 14:08:44.31 spid6s      Error: 912, Severity: 21, State: 2.
2021-07-27 14:08:44.31 spid6s      Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 2714, state 6, severity 25.
This is a serious error condition which might interfere with regular operation and the database will be taken offline.
If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting.
Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.
2021-07-27 14:08:44.32 spid6s      Error: 3417, Severity: 21, State: 3.
Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online.

DatabaseMailUserRole スキーマに関するアップグレードの問題を解決する

次の情報を確認して、 DatabaseMailUserRoleに関連するアップグレードの問題を解決します。

原因

このエラーは、 msdb データベースでシステム スキーマ、ユーザー、またはロールが正しく構成されていない場合に発生します。

また、アップグレード スクリプトがmsdb データベースでDatabaseMailUserRole スキーマの再作成に失敗した場合にも発生します。 この問題は、 DatabaseMailUserRole スキーマが DatabaseMailUserRole ロールによって所有されていない場合に発生する可能性があります(たとえば、スキーマが dboによって所有されている場合)。

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

解決方法

  1. T902 を使用して SQL Server を停止して再起動します。 たとえば、コマンド プロンプトから次のコマンドを実行できます。

    既定のインスタンスの場合:

    NET START MSSQLSERVER /T902
    

    名前付きインスタンスの場合:

    NET START MSSQL$INSTANCENAME  /T902
    
  2. msdb データベースを予防措置としてバックアップします。

    BACKUP DATABASE msdb TO disk = '<backup folder>'
    
  3. SQL Server Management Studio を開き、SQL Server インスタンスに接続し、 msdb データベースのバックアップを作成します。

  4. Databases>System Databases>msdb>Security>Schemas>DatabaseMailuserRole を展開します。

  5. DatabaseMailUserRoleという名前のスキーマを削除します。

  6. SQL Server を停止し、トレース フラグ 902 なしで再起動します。

    トレース フラグ 902 なしで SQL Server が起動すると、アップグレード スクリプトが再度実行され、 DatabaseMailUserRole スキーマが再作成されます。

    • SP または CU のアップグレード スクリプトが正常に完了した場合は、SQL Server エラー ログとブートストラップ フォルダーを確認して確認します。
    • アップグレード スクリプトが再度失敗した場合は、SQL Server エラー ログで他のエラーがないか確認し、新しいエラーのトラブルシューティングを行います。

TargetServersRole ロールに関するアップグレードの問題を解決する

次の情報を確認して、 TargetServersRoleに関連するアップグレードの問題を解決します。

原因

このエラーは、アップグレード スクリプトがmsdb データベースでTargetServersRoleセキュリティ ロールを再作成できない場合に発生します。 このロールは、マルチサーバー環境で使用されます。 既定では、 TargetServersRole セキュリティ ロールは dboによって所有され、ロールは TargetServersRole スキーマを所有します。 誤ってこの関連付けを変更し、インストールする更新プログラムにこれらのロールの変更が含まれている場合、アップグレードが失敗し、エラー 2714: There is already an object named 'TargetServersRole' in the databaseが返される可能性があります。 このエラーを解決するには、次の手順に従ってください。

解決方法

  1. T902 を使用して SQL Server を停止して再起動します。

    既定のインスタンスの場合:

    NET START MSSQLSERVER /T902
    

    名前付きインスタンスの場合:

    NET START MSSQL$INSTANCENAME /T902
    
  2. msdb データベースを予防措置としてバックアップします。

    BACKUP DATABASE msdb TO disk = '<backup folder>'
    
  3. 現在、このロールの一部であるユーザーの一覧を作成します (ある場合)。 次のクエリを実行して、ロールのメンバーを一覧表示できます。

    EXEC msdb.dbo.sp_helprolemember 'TargetServersRole'
    
  4. 次のステートメントを使用して、 TargetServersRole ロールを削除します。

    EXEC msdb.dbo.sp_droprole @rolename = N'TargetServersRole'
    
  5. 問題が解決されたかどうかを確認するには、トレース フラグ 902を使用せずに SQL Server インスタンスを再起動します。

  6. 手順 3 のユーザーを TargetServersRoleに再追加します。