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
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 au SQL Server instance et sauvegardez la
msdb
base de données.Développez Bases de données>système>
msdb
>Schémas>de sécurité>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, 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 dbo
et 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
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>'
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'
Supprimez le
TargetServersRole
rôle à l’aide de l’instruction suivante :EXEC msdb.dbo.sp_droprole @rolename = N'TargetServersRole'
Pour case activée si le problème est résolu, redémarrez le SQL Server instance sans utiliser l’indicateur
902
de trace .Rajoutez les utilisateurs de l’étape 3 à
TargetServersRole
.