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
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
Sauvegardez votre
msdb
base de données par précaution.BACKUP DATABASE msdb TO disk = '<backup folder>'
Ouvrez SQL Server Management Studio, connectez-vous à l’instance SQL Server et sauvegardez la
msdb
base de données.Développez les schémas>de sécurité>des bases de données>
msdb
>>système DatabaseMailuserRole.Supprimez le schéma nommé
DatabaseMailUserRole
.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 dbo
rô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
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
Sauvegardez votre
msdb
base de données par précaution.BACKUP DATABASE msdb TO disk = '<backup folder>'
É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'
Supprimez le
TargetServersRole
rôle à l’aide de l’instruction suivante :EXEC msdb.dbo.sp_droprole @rolename = N'TargetServersRole'
Pour vérifier si le problème est résolu, redémarrez l’instance SQL Server sans utiliser l’indicateur
902
de trace.Rajoutez les utilisateurs de l’étape 3 à
TargetServersRole
.