sql >> Base de Datos >  >> RDS >> Sqlserver

Tratar con errores de alta gravedad en SQL Server

En mi artículo anterior sobre Alertas del Agente SQL Server, brindé instrucciones paso a paso sobre cómo instalar y configurar las alertas del Agente SQL para los errores de alta gravedad 19-25, así como para el error 825. En este artículo, voy a discuta estos errores en detalle y comparta lo que debe hacer si ocurren en su entorno.

Los errores con un nivel de gravedad de 19 o superior impiden que se complete el lote actual. Los errores con una gravedad de 20 o superior son errores fatales y finalizan la conexión actual del cliente. Estos errores también pueden afectar a todos los procesos de la base de datos. Los errores fatales son exactamente lo que su nombre implica:el proceso que se está ejecutando finaliza y la conexión del cliente se cierra.

Errores de gravedad 19

Un error de gravedad 19 es un error debido a la falta de un recurso. Esto significa que se ha excedido un límite interno (que no puede configurar) y provocó que finalice el lote actual. Estos errores rara vez ocurren y es poco lo que puede hacer para corregir el problema. Si se produce un error de gravedad 19, debe comunicarse con su proveedor de soporte principal; normalmente, sería Microsoft.

En todos mis años de trabajo con SQL Server, no puedo recordar ningún incidente en el que se haya generado un error de gravedad 19. Incluso buscando en Bing, he tenido problemas para encontrar ocurrencias del error; las pocas referencias que encontré estaban relacionadas con una versión anterior de SQL Server y hacían referencia a un error dentro de SQL Server.

Errores de gravedad 20

Un error de gravedad 20 es un error fatal en el proceso actual. Esto indica que una declaración encontró un problema y se canceló. Como esto solo afecta el proceso actual, es muy poco probable que la base de datos en sí se haya dañado. Estos errores están vinculados a una declaración individual, por lo que deberá recopilar el mensaje de error completo y comunicarse con la persona o el equipo responsable de ese fragmento de código. Esto podría ser interno o posiblemente del proveedor de la aplicación. Un ejemplo de error es:

Error:18056, gravedad 20, estado:29
El cliente no pudo reutilizar una sesión con SPID 123, que se había restablecido para la agrupación de conexiones.

Para este error, me comunicaría con el desarrollador o proveedor de la aplicación, ya que el error está relacionado con una conexión agrupada que encuentra un error al intentar reiniciar. También revisaría los registros de SQL Server que pueden tener un mensaje de error más detallado con respecto a lo que realmente está sucediendo para causar el error.

Errores de gravedad 21

Un error de gravedad 21 es un error fatal en la base de datos que afecta a todos los procesos que utilizan esa base de datos.

He visto que se produce este error al intentar restaurar una base de datos con las funciones de Enterprise en una instancia de Standard Edition, así como cuando una base de datos está corrupta y el usuario intenta acceder a una página corrupta. Un ejemplo de mensaje de error de este tipo es:

Error:605, gravedad:21, estado 1
Intento de recuperar la página lógica (1:8574233) en la base de datos 'DB_NAME' pertenece al objeto '0', no al objeto 'Table01'.

Cuando intente restaurar una base de datos que utiliza funciones Enterprise a una instancia de Standard Edition, primero deberá eliminar las funciones Enterprise. Por ejemplo, si está utilizando la compresión de datos o la captura de cambios de datos, primero deberá dejar de usar y eliminar esas funciones de la base de datos, hacer una copia de seguridad de la base de datos y luego restaurarla a la instancia de Standard Edition. Puede usar el DMV sys.dm_db_persisted_sku_features para verificar si tiene alguna función solo para empresas en uso.

Para los errores de corrupción, deberá ejecutar DBCC CHECKDB para determinar el alcance de la corrupción e ir desde allí. Si tiene suerte, el error estará en un índice no agrupado que puede reconstruir y resolver el problema. Si la corrupción es más grave, podría estar buscando una operación de restauración. Para comprender mejor la corrupción y cómo resolver varios aspectos de la corrupción, lo invito a revisar las diversas publicaciones de blog de Paul Randal. Paul tiene una categoría completa sobre corrupción que puede ver aquí:

  • http://www.sqlskills.com/blogs/paul/category/corruption/

Ejecutando DBCC CHECKDB como parte de un trabajo programado regularmente en sus bases de datos, se recomienda encarecidamente detectar daños lo antes posible. Si no verifica regularmente si hay corrupción, entonces corre un gran riesgo de no poder recuperar los datos corruptos.

Errores de gravedad 22

Un error de gravedad 22 es un error fatal debido a que la integridad de la tabla es sospechosa, lo que básicamente indica que la tabla o el índice especificado en el mensaje está dañado. La corrupción sucede y sucede a menudo. Nuestra experiencia es que la mayoría de los daños ocurren debido a un problema relacionado con el subsistema de E/S. Si se encuentra con un error de gravedad 22, deberá ejecutar DBCC CHECKDB para determinar la magnitud del daño. Un ejemplo de error es:

Error:5180, gravedad:22, estado:1
No se pudo abrir XYZ para el ID de archivo no válido ## en la base de datos. La tabla o la base de datos pueden estar dañadas.

Si el error se encuentra en un índice no agrupado, simplemente podría reconstruir el índice y corregir la corrupción. Si el daño está en un montón o en un índice agrupado, deberá restaurar la base de datos a un estado coherente.

He visto informes donde la corrupción estaba en la memoria pero no en el disco. En ese caso, reiniciar la instancia o configurar la base de datos fuera de línea y luego en línea debería solucionar el error.

Errores de gravedad 23

Un error de gravedad 23 es otro error fatal que informa que la propia base de datos tiene un problema de integridad. La resolución es muy similar a la de un error de gravedad 22, donde debe ejecutar inmediatamente DBCC CHECKDB para encontrar el alcance total del daño a la base de datos.

Se detecta que este nivel de corrupción afecta a toda la base de datos. Esto podría ser corrupción dentro del propio archivo de datos o corrupción dentro del archivo de registro. Los detalles del error lo dirigirán hacia la raíz del problema. Por ejemplo, el siguiente error indica que necesitaríamos restaurar nuestra base de datos o intentar reconstruir el registro. Para mantener la coherencia, restauraría desde mi copia de seguridad más reciente y todas las copias de seguridad del registro de transacciones disponibles.

Error:9004, Gravedad:23 Estado:6
Se produjo un error al procesar el registro de la base de datos 'db_name'. Si es posible, restaure desde la copia de seguridad. Si no hay una copia de seguridad disponible, es posible que sea necesario reconstruir el registro.

Errores de gravedad 24

Un error de gravedad 24 es un error fatal relacionado con un hardware. Este mensaje aparecería debido a algún tipo de falla de los medios. Los más comunes de estos tipos de errores que he visto están relacionados con problemas de memoria y errores de E/S. Por ejemplo:

Error:832, gravedad:24, estado:1
Una página que debería haber sido constante ha cambiado (suma de verificación esperada:, suma de verificación real:, base de datos , archivo , página ). Esto generalmente indica una falla de memoria u otro hardware o corrupción del sistema operativo.

Cuando ocurren errores como este, debe comunicarse con el equipo de soporte de su sistema para ejecutar una prueba de memoria en su servidor y darle una buena verificación de estado. Este error podría ser mala memoria o un escritor de memoria (un proceso del kernel o algo que está cambiando la memoria de SQL Server).

Otro ejemplo:

Error:824, gravedad:24, estado:2
SQL Server detectó un error de E/S basado en coherencia lógica:ID de página incorrecto (esperado 1:123; real 0:0). Ocurrió durante una lectura de página (1:123) en el ID de la base de datos . Los mensajes adicionales en el registro de errores de SQL Server o el registro de eventos del sistema pueden proporcionar más detalles.

Este error indica un error de consistencia en el archivo de datos principal de la base de datos. Debería ejecutar inmediatamente DBCC CHECKDB para determinar el alcance de la corrupción y tomar las medidas adecuadas para reparar o restaurar la base de datos.

Errores de gravedad 25

Un error de gravedad 25 es un error fatal del sistema. He oído que la gravedad 25 es más o menos un cajón de sastre para varios errores fatales. Solo he visto este error cuando está relacionado con actualizaciones fallidas:algo impide que se ejecute uno de los scripts de actualización y se genera un error de gravedad 25. Obtendrá un error similar a:

La actualización del nivel de script para la base de datos 'maestra' falló porque el paso de actualización 'sqlagent90_sysdbupg.sql' encontró el error 598, estado 1, gravedad 25. Esta es una condición de error grave que podría interferir con el funcionamiento normal y la base de datos se desconectará. Si el error ocurrió durante la actualización de la base de datos 'maestra', impedirá que se inicie toda la instancia de SQL Server. Examine las entradas anteriores del registro de errores en busca de errores, tome las medidas correctivas apropiadas y reinicie la base de datos para que los pasos de actualización del script se ejecuten hasta completarse.

En este caso, los errores anteriores a este mensaje indicaron una ruta incorrecta para la ubicación de datos predeterminada para SQL Server. Una vez que se corrigió, la actualización se ejecutó correctamente.

Error 825

El error 825 a menudo se denomina advertencia de reintento de lectura, sin embargo, la condición es tanto para operaciones de lectura como de escritura. Este error le permite saber que era necesario volver a intentar la operación y cuántas veces SQL Server tuvo que volver a intentarlo antes de que tuviera éxito. SQL Server volverá a intentar las operaciones hasta cuatro veces, después de cuatro reintentos generará un error 823 o 824. Los mensajes de error 825 serán similares a los siguientes:

Una lectura del archivo 'ruta al nombre del archivo\db_name.mdf' en el desplazamiento 0x00000002000 tuvo éxito después de fallar 2 veces con el error:suma de verificación incorrecta (esperado:XYZ; ABC real). Los mensajes adicionales en el registro de errores de SQL Server y el registro de eventos del sistema pueden proporcionar más detalles. Esta condición de error amenaza la integridad de la base de datos y debe corregirse. Complete una verificación completa de consistencia de la base de datos (DBCC CHECKDB). Este error puede ser causado por muchos factores; para obtener más información, consulte los Libros en pantalla de SQL Server.

Estos mensajes son importantes ya que indican que tiene un problema mayor con su subsistema de disco. Los métodos de solución de problemas serían ejecutar DBCC CHECKDB para asegurarse de que la base de datos sea coherente, como recomienda el error, así como revisar los registros de eventos de Windows en busca de errores del sistema operativo o dispositivos de almacenamiento. Debe hacer que su equipo de soporte de almacenamiento y hardware también revise el subsistema de E/S subyacente en busca de errores.

Resumen

Tener las alertas del Agente SQL configuradas es gratis y fácil. Ser proactivo y receptivo a estas alertas es importante para ayudar a minimizar el tiempo de inactividad para usted y sus clientes. Como ha aprendido, muchas cosas pueden afectar a SQL Server y la consistencia de sus bases de datos, y la mejor defensa para poder recuperarse de estos errores es tener buenas copias de seguridad y conocer las diversas opciones de reparación para DBCC CHECKDB . Siempre se recomienda ejecutar DBCC CHECKDB regularmente contra sus bases de datos para detectar corrupción lo antes posible, ya que cuanto más rápido encuentre corrupción, más probable es que tenga una copia de seguridad de los datos para que pueda restaurar sin pérdida de datos.