Niveaux de gravité des erreurs du moteur de base de données

S’applique à :SQL Server

Lorsqu’une erreur est générée par le moteur de base de données SQL Server, la gravité de l’erreur indique le type de problème rencontré par SQL Server.

Niveaux de gravité

Le tableau suivant répertorie et décrit les niveaux de gravité des erreurs générées par le moteur de base de données SQL Server.

Niveau de gravité Description
0-9 Messages d’information qui retournent des informations d’état ou signalent des erreurs qui ne sont pas graves. Le moteur de base de données ne génère pas d’erreurs système avec des gravités comprises entre 0 et 9.
10 Messages d’information qui retournent des informations d’état ou signalent des erreurs qui ne sont pas graves. Pour des raisons de compatibilité, le moteur de base de données convertit la gravité 10 en gravité 0 avant de renvoyer les informations d’erreur à l’application appelante.
11-16 Indique les erreurs pouvant être corrigées par l'utilisateur.
11 Indique que l’objet ou l’entité donné n’existe pas.
12 Gravité spéciale pour les requêtes qui n’utilisent pas de verrouillage en raison d’indicateurs de requête spéciaux. Dans certains cas, les opérations de lecture effectuées par ces instructions peuvent entraîner des données incohérentes, car les verrous ne sont pas pris pour garantir la cohérence.
13 Indique des erreurs de blocage de transaction.
14 Indique des erreurs liées à la sécurité, par exemple le refus d'une autorisation.
15 Indique les erreurs de syntaxe dans la commande Transact-SQL.
16 Indique des erreurs générales qui peuvent être corrigées par l'utilisateur.
17-19 Indiquez les erreurs logicielles qui ne peuvent pas être corrigées par l’utilisateur. Informez votre administrateur système de l'existence du problème.
17 Indique que l’instruction a provoqué l’exécution de SQL Server en dehors des ressources (telles que la mémoire, les verrous ou l’espace disque de la base de données) ou dépasser une limite définie par l’administrateur système.
18 Indique un problème dans le logiciel du moteur de base de données, mais l’instruction termine l’exécution et la connexion à l’instance du moteur de base de données est conservée. L'administrateur système doit être informé chaque fois qu'un message s'affiche avec le niveau de gravité 18.
19 Indique qu’une limite de moteur de base de données non configurée a été dépassée et que le processus de traitement par lots actuel a été arrêté. Les messages d'erreur dont le niveau de gravité est supérieur ou égal à 19 arrêtent l'exécution du traitement actuel. Les erreurs dont le niveau de gravité est 19 se produisent rarement ; elles doivent être résolues par l'administrateur système ou votre support technique. Contactez votre administrateur système en cas de déclenchement d'un message dont le niveau de gravité est 19. Les messages d’erreur dont le niveau de gravité est compris entre 19 et 25 sont inscrits dans le journal des erreurs.
20-24 Indiquez les problèmes système et sont des erreurs irrécupérables, ce qui signifie que la tâche du moteur de base de données qui exécute une instruction ou un lot n’est plus en cours d’exécution. La tâche enregistre des informations sur ce qui s'est produit, puis se termine. Dans la plupart des cas, la connexion de l’application à l’instance du moteur de base de données peut également se terminer. Si cela se produit, selon la nature du problème, l'application risque de ne pas pouvoir se reconnecter.

Les messages d'erreur de ce niveau peuvent affecter tous les processus qui accèdent aux données de la même base de données et indiquer la détérioration d'une base de données ou d'un objet. Les messages d'erreur dont le niveau de gravité est compris entre 19 et 24 sont inscrits dans le journal des erreurs.
20 Indique qu'une instruction a rencontré un problème. Dans la mesure où le problème affecte uniquement la tâche actuelle, il est improbable que la base de données elle-même soit endommagée.
21 Indique qu'un problème a été rencontré et qu'il affecte toutes les tâches de la base de données actuelle ; toutefois, il est improbable que la base de données elle-même soit endommagée.
22 Indique que la table ou l'index spécifié dans le message a été endommagé à la suite d'un problème logiciel ou matériel.

Les erreurs dont le niveau de gravité est 22 se produisent rarement. Si l’un se produit, exécutez DBCC CHECKDB pour déterminer si d’autres objets de la base de données sont également endommagés. Il est possible que le problème provienne uniquement du cache des tampons et non du disque lui-même. Dans ce cas, le redémarrage de l’instance du moteur de base de données corrige le problème. Pour continuer à fonctionner, vous devez vous reconnecter à l’instance du moteur de base de données ; sinon, utilisez cette option DBCC pour réparer le problème. Dans certains cas, vous pouvez être amené à restaurer la base de données.

Si le redémarrage de l’instance du moteur de base de données ne corrige pas le problème, le problème se trouve sur le disque. Dans certains cas, il peut être résolu en détruisant l'objet spécifié dans le message d'erreur. Par exemple, si le message signale que l’instance du moteur de base de données a trouvé une ligne dont la longueur est 0 dans un index non cluster, supprimez l’index et régénérez-le.
23 Indique que l'intégrité de la totalité de la base de données est douteuse en raison d'un problème matériel ou logiciel.

Les erreurs dont le niveau de gravité est 23 se produisent rarement. Si l’un se produit, exécutez DBCC CHECKDB pour déterminer l’étendue des dommages. Il est possible que le problème provienne uniquement du cache et non du disque lui-même. Dans ce cas, le redémarrage de l’instance du moteur de base de données corrige le problème. Pour continuer à fonctionner, vous devez vous reconnecter à l’instance du moteur de base de données ; sinon, utilisez DBCC pour réparer le problème. Dans certains cas, vous pouvez être amené à restaurer la base de données.
24 Indique une défaillance du support. L'administrateur système peut être obligé de restaurer la base de données. Vous pouvez également être amené à contacter le fournisseur de votre matériel.

Gravité du message d’erreur défini par l’utilisateur

Vous pouvez utiliser sp_addmessage pour ajouter des messages d’erreur définis par l’utilisateur avec des gravités comprises entre 1 et 25 à l’affichage sys.messages catalogue. Ces messages d’erreur définis par l’utilisateur peuvent être utilisés par RAISERROR. Pour plus d’informations, consultez sp_addmessage (Transact-SQL).

RAISERROR peut être utilisé pour générer des messages d’erreur définis par l’utilisateur avec des gravités comprises entre 1 et 25. RAISERROR peut référencer un message d’erreur défini par l’utilisateur stocké dans l’affichage sys.messages catalogue ou générer un message dynamiquement. Lorsque vous utilisez le message sys.messages d’erreur défini par l’utilisateur lors de la génération d’une erreur, la gravité spécifiée en RAISERROR substitue la gravité spécifiée dans sys.messages. Pour plus d'informations, consultez RAISERROR (Transact-SQL).

Gravité de l’erreur et TRY... CATCH

UN ESSAI... La construction CATCH intercepte toutes les erreurs d’exécution avec une gravité supérieure à 10 qui ne terminent pas la connexion de base de données.

Les erreurs de gravité comprises entre 0 et 10 sont des messages d’information et n’entraînent pas l’exécution à partir du bloc CATCH d’un TRY... Construction CATCH.

Les erreurs qui arrêtent la connexion de base de données, généralement avec une gravité comprise entre 20 et 25, ne sont pas gérées par le bloc CATCH, car l’exécution est abandonnée lorsque la connexion se termine.

Pour plus d’informations, consultez TRY...CATCH (Transact-SQL).

Récupérer la gravité de l’erreur

La fonction système ERROR_SEVERITY permet de récupérer le niveau de gravité de l’erreur qui a causé l’exécution du bloc CATCH d’une construction TRY...CATCH. ERROR_SEVERITY retourne NULL s'il est appelé en dehors de la portée d'un bloc CATCH. Pour plus d’informations, consultez ERROR_SEVERITY (Transact-SQL).

Voir aussi