La mise à niveau de SQL Server échoue et retourne l’erreur 15173 ou 15559
Cet article vous aide à résoudre les erreurs 15173 ou 15559 qui se produisent lors de l’installation d’une mise à jour cumulative (CU) ou d’un Service Pack (SP) pour Microsoft SQL Server. L’erreur se produit lorsque des scripts de mise à niveau de base de données sont exécutés.
Symptômes
Lorsque vous appliquez une cu ou un fournisseur de services pour SQL Server, le programme d’installation signale 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 vérifiez le journal des erreurs SQL Server, vous remarquez l’une des entrées d’erreur suivantes.
Jeu de messages d’erreur 1 :
Error: 15173, Severity: 16, State: 1.
Server principal '##MS_PolicyEventProcessingLogin##' has granted one or more permission(s). Revoke the permission(s) before dropping the server principal.
Error: 912, Severity: 21, State: 2.
Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 15173, state 1, severity 16. 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.
EventID 3417
Cannot recover the master database. SQL Server is unable to run. 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.
Jeu de messages d’erreur 2 :
Dropping existing Agent certificate ...
Error: 15559, Severity: 16, State: 1.
Cannot drop certificate '##MS_AgentSigningCertificate##' because there is a user mapped to it.
Error: 912, Severity: 21, State: 2.
Script level upgrade for database 'master' failed because upgrade step 'sqlagent100_msdb_upgrade.sql' encountered error 15559, state 1, severity 16. 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.
Error: 3417, Severity: 21, State: 3.
Cannot recover the master database. SQL Server is unable to run. 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.</br>
SQL Trace was stopped due to server shutdown. Trace ID = '1'. This is an informational message only; no user action is required.
Cause
Ce problème se produit parce qu’un script de mise à niveau cesse d’être en cours d’exécution, car il ne peut pas supprimer le principal du serveur (ou ##MS_PolicyEventProcessingLogin##
##MS_AgentSigningCertificate##
). Cette erreur se produit parce qu’un utilisateur est mappé au principal du serveur.
Pour plus d’informations sur les scripts de mise à niveau de base de données qui s’exécutent pendant l’installation de la mise à niveau de la mise à jour, consultez Résoudre les problèmes de script de mise à niveau lors de l’application d’une mise à jour.
Résolution
Pour résoudre l’erreur 15173 ou 15559, procédez comme suit :
Démarrez SQL Server avec l’indicateur de trace (TF) 902. Pour plus d’informations, consultez Étapes de démarrage de SQL avec l’indicateur de trace 902.
Connectez-vous à SQL Server et exécutez l’une des requêtes suivantes, en fonction du principal du serveur mentionné dans le message d’erreur :
SELECT a.name, b.permission_name FROM sys.server_principals a INNER JOIN sys.server_permissions b ON a.principal_id = b.grantee_principal_id INNER JOIN sys.server_principals c ON b.grantor_principal_id = c.principal_id WHERE c.name = '##MS_PolicyEventProcessingLogin##'
SELECT a.name, b.permission_name FROM sys.server_principals a INNER JOIN sys.server_permissions b ON a.principal_id = b.grantee_principal_id INNER JOIN sys.server_principals c ON b.grantor_principal_id = c.principal_id WHERE c.name = '##MS_AgentSigningCertificate##'
Pour chacune des connexions affichées dans les résultats de la requête, exécutez une instruction telle que la suivante pour révoquer ces autorisations.
Par exemple, si l’une des requêtes retourne les résultats suivants :
Nom : Nom de l’autorisation NT SERVICE\MSSQL$TEST : CONTROL
Dans ce cas, exécutez l’une des instructions suivantes :
REVOKE CONTROL ON LOGIN::[##MS_PolicyEventProcessingLogin##] TO [NT SERVICE\MSSQL$TEST] AS [##MS_PolicyEventProcessingLogin##]
REVOKE CONTROL ON LOGIN::[##MS_AgentSigningCertificate##] TO [NT SERVICE\MSSQL$TEST] AS [##MS_AgentSigningCertificate]
Supprimez TF 902 des paramètres de démarrage, puis redémarrez SQL Server. Une fois SQL Server démarré sans TF 902, le script de mise à niveau s’exécute à nouveau.
Si le script de mise à niveau se termine correctement, la mise à niveau du fournisseur de services ou de la cu est terminée. Vous pouvez vérifier le journal des erreurs SQL Server et le dossier de démarrage pour vérifier l’installation terminée.
Si le script de mise à niveau échoue à nouveau, vérifiez le journal des erreurs SQL Server pour obtenir des entrées d’erreur supplémentaires, puis résolvez les nouvelles erreurs.