Partager via


SQL Server mise à niveau échoue avec le code d’erreur 2714 lors de l’exécution de scripts de base de données de mise à jour

Cet article résout un problème où une mise à jour cumulative (CU) ou un Service Pack (SP) signale l’erreur 2714 lorsque vous exécutez des scripts de mise à niveau de base de données.

Symptômes

Lorsque vous appliquez une mise à jour cumulative ou un fournisseur de services, le programme d’installation peut signaler l’erreur suivante :

Attendez que le handle de récupération du moteur de base de données ait échoué. Vérifiez les causes potentielles dans le journal des erreurs SQL Server.

Lorsque vous passez en revue le journal des erreurs SQL Server, vous pouvez remarquer l’un des groupes suivants de messages d’erreur :

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.

Résoudre le problème de mise à niveau avec le schéma DatabaseMailUserRole

Passez en revue les informations suivantes pour résoudre le problème de mise à niveau associé au DatabaseMailUserRole.

Cause

Cette erreur se produit si un schéma système, un utilisateur ou un rôle est mal configuré dans la msdb base de données.

Elle se produit également lorsque le script de mise à niveau ne parvient pas à recréer le DatabaseMailUserRole schéma dans la msdb base de données. Ce problème peut se produire lorsque le DatabaseMailUserRole schéma n’appartient pas au DatabaseMailUserRole rôle ; par exemple, si le schéma appartient à dbo.

Pour plus d’informations sur les scripts de mise à niveau de base de données qui sont exécutés pendant l’installation de CU ou de SP, consultez Résolution des échecs de script de mise à niveau lors de l’application d’une mise à jour.

Résolution

  1. Arrêtez et redémarrez SQL Server à l’aide de T902. Par exemple, vous pouvez exécuter cette commande à partir d’une invite de commandes :

    Pour une instance par défaut :

    NET START MSSQLSERVER /T902
    

    Pour les instances nommées :

    NET START MSSQL$INSTANCENAME  /T902
    
  2. Sauvegardez votre msdb base de données par précaution.

    BACKUP DATABASE msdb TO disk = '<backup folder>'
    
  3. Ouvrez SQL Server Management Studio, connectez-vous au SQL Server instance et sauvegardez la msdb base de données.

  4. Développez Bases de données>système>msdb>Schémas>de sécurité>DatabaseMailuserRole.

  5. Supprimez le schéma nommé DatabaseMailUserRole.

  6. Arrêtez SQL Server et redémarrez-le sans l’indicateur de trace 902.

    Une fois SQL Server démarré sans indicateur de trace 902, le script de mise à niveau est réexécuté et le DatabaseMailUserRole schéma est recréé.

    • Si le script de mise à niveau sp ou CU se termine correctement, case activée le journal des erreurs SQL Server et le dossier bootstrap à vérifier.
    • Si le script de mise à niveau échoue à nouveau, case activée le journal des erreurs SQL Server pour d’autres erreurs et résoudre les nouvelles erreurs.

Résoudre le problème de mise à niveau avec le rôle TargetServersRole

Passez en revue les informations suivantes pour résoudre le problème de mise à niveau associé au TargetServersRole.

Cause

Cette erreur se produit lorsque le script de mise à niveau ne parvient pas à recréer le TargetServersRole rôle de sécurité dans la msdb base de données. Ce rôle est utilisé dans les environnements multiserveurs. Par défaut, le rôle de TargetServersRole sécurité appartient au dboet le rôle est propriétaire du TargetServersRole schéma. Si vous modifiez par inadvertance cette association et que la mise à jour que vous installez inclut des modifications apportées à l’un de ces rôles, la mise à niveau peut échouer et retourner l’erreur 2714: There is already an object named 'TargetServersRole' in the database. Pour résoudre l’erreur, procédez comme suit :

Résolution

  1. Arrêtez et redémarrez SQL Server à l’aide de T902.

    Pour une instance par défaut :

    NET START MSSQLSERVER /T902
    

    Pour les instances nommées :

    NET START MSSQL$INSTANCENAME /T902
    
  2. Sauvegardez votre msdb base de données par précaution.

    BACKUP DATABASE msdb TO disk = '<backup folder>'
    
  3. Dressez la liste des utilisateurs (le cas échéant) qui font actuellement partie de ce rôle. Vous pouvez répertorier les membres du rôle en exécutant la requête suivante :

    EXEC msdb.dbo.sp_helprolemember 'TargetServersRole'
    
  4. Supprimez le TargetServersRole rôle à l’aide de l’instruction suivante :

    EXEC msdb.dbo.sp_droprole @rolename = N'TargetServersRole'
    
  5. Pour case activée si le problème est résolu, redémarrez le SQL Server instance sans utiliser l’indicateur 902de trace .

  6. Rajoutez les utilisateurs de l’étape 3 à TargetServersRole.