Niveles de gravedad de error del motor de base de datos
Cuando el SQL Server Database Engine (Motor de base de datos de SQL Server) muestra un error, la gravedad del error indica el tipo de problema detectado por SQL Server.
Niveles de gravedad
En la siguiente tabla se enumeran y describen los niveles de gravedad de los errores mostrados por el SQL Server Database Engine (Motor de base de datos de SQL Server).
Nivel de gravedad | Descripción |
---|---|
0-9 |
Mensajes informativos que devuelven información de estado o informan sobre errores que no son graves. El Database Engine (Motor de base de datos) no muestra errores del sistema con gravedades de 0 a 9. |
10 |
Mensajes informativos que devuelven información de estado o informan sobre errores que no son graves. Por razones de compatibilidad, el Database Engine (Motor de base de datos) convierte la gravedad 10 en gravedad 0 antes de devolver la información de errores a la aplicación que hace la llamada. |
11-16 |
Indica errores que pueden ser corregidos por el usuario. |
11 |
Indica que un objeto o una entidad determinados no existen. |
12 |
Una gravedad especial para consultas que no utilizan bloqueo debido a sugerencias de consulta especiales. En algunos casos, las operaciones de lectura realizadas por estas instrucciones podrían producir datos incoherentes, ya que no se adoptan bloqueos para garantizar la coherencia. |
13 |
Indica errores de interbloqueo de transacciones. |
14 |
Indica errores relacionados con la seguridad, como es el caso de permisos denegados. |
15 |
Indica errores de sintaxis en el comando Transact-SQL. |
16 |
Indica errores generales que pueden ser corregidos por el usuario. |
17-19 |
Indica errores de software que no pueden ser corregidos por el usuario. Informe al administrador del sistema sobre el problema. |
17 |
Indica que la instrucción ha hecho que SQL Server se quede sin recursos (como, por ejemplo, memoria, bloqueos o espacio en disco para la base de datos) o ha superado alguno de los límites establecidos por el administrador del sistema. |
18 |
Indica un problema en el software de Database Engine (Motor de base de datos) pero la instrucción completa su ejecución y la conexión con la instancia del Database Engine (Motor de base de datos) se mantiene. El administrador del sistema debe ser informado cada vez que se produce un mensaje con un nivel de gravedad 18. |
19 |
Indica que se ha superado un límite de Database Engine (Motor de base de datos) no configurable y el proceso por lotes actual ha finalizado. Los mensajes de error con nivel de gravedad 19 o superior detienen la ejecución del lote actual. Los errores de nivel de gravedad 19 son poco frecuentes y deben ser corregidos por el administrador del sistema o por el proveedor principal de asistencia técnica. Póngase en contacto con el administrador del sistema cuando se produzca un mensaje con nivel de gravedad 19. Los mensajes de error con nivel de gravedad entre 19 y 25 se escriben en el registro de errores. |
20-25 |
Indica problemas del sistema y son errores graves, lo que significa que ya no está en ejecución la tarea de Database Engine (Motor de base de datos) que esté ejecutando una instrucción o lote. La tarea registra información sobre lo acontecido y, a continuación, finaliza. En la mayoría de los casos, puede que también finalice la conexión de la aplicación a la instancia del Database Engine (Motor de base de datos). Si esto ocurre, dependiendo del problema, la aplicación podría no conseguir volver a conectarse. Los mensajes de error incluidos en este intervalo pueden afectar a todos los procesos que tienen acceso a los datos de la misma base de datos y pueden indicar que una base de datos u objeto está dañado. Los mensajes de error con nivel de gravedad entre 19 y 25 se escriben en el registro de errores. |
20 |
Indica que una instrucción ha encontrado un problema. Puesto que el problema ha afectado sólo a la tarea actual, no es probable que la propia base de datos haya sido dañada. |
21 |
Indica que se ha encontrado un problema que afecta a todas las tareas de la base de datos actual, pero es poco probable que se haya dañado la base de datos. |
22 |
Indica que la tabla o índice especificado en el mensaje ha sido dañado por un problema de software o hardware. Los errores de nivel de gravedad 22 se producen en raras ocasiones. Si se produce uno de ellos, ejecute DBCC CHECKDB para determinar si hay otros objetos de la base de datos dañados. Es posible que el problema se encuentre sólo en la caché del búfer y no en el propio disco. Si es así, al reiniciar la instancia del Database Engine (Motor de base de datos) se corregirá el problema. Para seguir trabajando, deberá volver a conectarse a la instancia del Database Engine (Motor de base de datos); en caso contrario, utilice DBCC para solucionar el problema. En algunas ocasiones, puede que tenga que restaurar la base de datos. Si al reiniciar la instancia del Database Engine (Motor de base de datos) no se corrige el problema, el problema estará en el disco. Algunas veces se puede resolver si se destruye el objeto especificado en el mensaje de error. Por ejemplo, si el mensaje le indica que la instancia del Database Engine (Motor de base de datos) ha encontrado una fila con longitud 0 en un índice no agrupado, elimine el índice y vuelva a generarlo. |
23 |
Indica que se sospecha de la integridad de toda la base de datos debido al daño causado por un problema de hardware o software. Los errores de nivel de gravedad 23 se producen en raras ocasiones. Si se produce alguno, ejecute DBCC CHECKDB para determinar la magnitud de los daños. Es posible que el problema se encuentre sólo en la caché y no en el propio disco. Si es así, al reiniciar la instancia del Database Engine (Motor de base de datos) se corregirá el problema. Para seguir trabajando, deberá volver a conectarse a la instancia del Database Engine (Motor de base de datos); en caso contrario, utilice DBCC para solucionar el problema. En algunas ocasiones, puede que tenga que restaurar la base de datos. |
24 |
Indica un error en los medios. Puede que el administrador del sistema tenga que restaurar la base de datos. Puede que también tenga que llamar al distribuidor de hardware. |
Gravedad de mensaje de error definida por el usuario
sp_addmessage se puede utilizar para agregar a la vista de catálogo sys.messages mensajes de error definidos por el usuario con niveles de gravedad de 1 a 25. Estos mensajes de error definidos por el usuario pueden ser utilizados por RAISERROR. Para obtener más información, vea sp_addmessage (Transact-SQL).
RAISERROR se puede utilizar para generar mensajes de error definidos por el usuario con niveles de gravedad de 1 a 25. RAISERROR puede hacer referencia a un mensaje de error definido por el usuario almacenado en la vista de catálogo sys.messages o generar dinámicamente un mensaje. Si se utiliza el mensaje de error creado por el usuario en sys.messages mientras se genera un error, la gravedad especificada por RAISERROR reemplazará a la gravedad especificada en sys.messages. Para obtener más información, vea RAISERROR (Transact-SQL).
Gravedad de error y TRY…CATCH
Una construcción TRY...CATCH detecta todos los errores de ejecución con una gravedad mayor de 10 que no finalizan la conexión de la base de datos.
Los errores con gravedad de 0 a 10 son mensajes informativos y no hacen que la ejecución salte desde el bloque CATCH de un constructor TRY…CATCH.
Los errores que finalizan la conexión de la base de datos, normalmente con una gravedad de 20 a 25, no son controlados por el bloque CATCH porque la ejecución se anula al finalizar la conexión.
Para obtener más información, vea TRY...CATCH (Transact-SQL).
Recuperar la gravedad del error
La función del sistema ERROR_SEVERITY se puede utilizar para recuperar la gravedad del error que provocó la ejecución del bloque CATCH de un constructor TRY…CATCH. Si se le llama fuera del ámbito de un bloque CATCH, ERROR_SEVERITY devuelve el valor NULL. Para obtener más información, vea ERROR_SEVERITY (Transact-SQL).
Vea también
Referencia
Descripción de errores del motor de base de datos
Otros recursos
Recuperar información de errores en Transact-SQL
Controlar errores y mensajes en las aplicaciones
sys.messages (Transact-SQL)
Funciones del sistema (Transact-SQL)
Usar TRY...CATCH en Transact-SQL