Partager via


La mise à niveau de SQL Server é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 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 cu ou un fournisseur de services, le programme d’installation peut signaler l’erreur suivante :

Échec de l’attente du handle de récupération du moteur de base de données. Pour connaître les causes potentielles, consultez le journal des erreurs de SQL Server.

Lorsque vous passez en revue le journal des erreurs SQL Server, vous remarquerez peut-être 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.

Il 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’est pas détenu par le DatabaseMailUserRole rôle ; par exemple, si le schéma est détenu par dbo.

Pour plus d’informations sur les scripts de mise à niveau de base de données qui sont exécutés lors de 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 à l’instance SQL Server et sauvegardez la msdb base de données.

  4. Développez les schémas>de sécurité>des bases de données>msdb>>système 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, vérifiez le journal des erreurs SQL Server et le dossier de démarrage pour vérifier.
    • Si le script de mise à niveau échoue à nouveau, vérifiez le journal des erreurs SQL Server pour d’autres erreurs et résolvez 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 multi-serveurs. Par défaut, le TargetServersRole rôle de sécurité appartient au dborôle de sécurité et le rôle possède le 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 une erreur 2714: There is already an object named 'TargetServersRole' in the database. Pour résoudre cette erreur, effectuez les étapes suivantes :

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. Établissez une liste d’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 vérifier si le problème est résolu, redémarrez l’instance SQL Server sans utiliser l’indicateur 902de trace.

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