sql >> Base de Datos >  >> RDS >> Database

Descripción general de la función DBCC CheckDB

Introducción

El mantenimiento regular de la base de datos es una parte importante del trabajo de un administrador de base de datos que ayuda a garantizar que los sistemas de importancia crítica funcionen normalmente. Una de las formas más fáciles de lograr esto será automatizar las tareas relacionadas con DBCC CheckDB. No importa qué versión de SQL Server esté ejecutando, nunca habrá una base de datos que no requiera mantenimiento. Tendrá que planificar el mantenimiento para que se realice con regularidad de modo que pueda cubrir sus espaldas, especialmente en el momento de un escenario de desastre real.

DBA es siempre el culpable

Siempre que hay un problema con la base de datos, todos los ojos están puestos en el DBA. Ya sea que el problema haya sido causado por la lluvia o debido a que algún desarrollador escribió un código desagradable que resultó en la lentitud de la base de datos, siempre se espera que el DBA solucione el problema. Y puede imaginar el tipo de presión con la que debe lidiar si se le pide que restaure rápidamente una base de datos utilizando la última copia de seguridad disponible que, como descubrirá en el proceso, no es válida y la integridad de la base de datos ya se vio comprometida hace unos meses. atrás. Aquí radica la diferencia entre un DBA proactivo y un DBA reactivo. En realidad, su estrategia de recuperación es mucho más crítica en comparación con la estrategia de copia de seguridad. ¿Para qué sirven las copias de seguridad diarias de la base de datos si no sirven en el momento de la restauración?

¿Por qué es importante el mantenimiento?

Con el crecimiento sin precedentes de las tecnologías de bases de datos y con las nuevas características que aparecen con cada versión, es imperativo que usted, como DBA, se mantenga a la vanguardia del resto y se asegure de seguir las mejores prácticas de la industria en mantenimiento de la base de datos.

DBCC CheckDB y cómo podemos ejecutarlo

DBCC CheckDB:este nombre es bastante descriptivo de la funcionalidad. En términos simples, verifica las bases de datos. Esto es importante para garantizar que la base de datos funcione como se espera. Básicamente, DBCC CheckDB verifica la integridad lógica y física de todos los objetos en la base de datos. Esto es lo que hace DBCC CheckDB bajo el capó según el oficial Documentación de Microsoft:

  • Ejecuta DBCC CHECKALLOC en la base de datos:la consistencia de las asignaciones de espacio en disco

  • Ejecuta DBCC CHECKTABLE en cada tabla y vista de la base de datos:esta es la integridad de todas las páginas y estructuras que componen la tabla o vista indexada.

  • Ejecuta DBCC CHECKCATALOG en la base de datos; esto verifica la consistencia del catálogo dentro de la base de datos especificada.

  • Valida el contenido de cada vista indexada en la base de datos.

  • Valida la coherencia a nivel de enlace entre los metadatos de la tabla y los directorios/archivos del sistema de archivos al almacenar datos varbinary(max) en el sistema de archivos mediante FILESTREAM.

  • Valida los datos de Service Broker en la base de datos.

Cuando ejecuta el comando DBCC CheckDB explícitamente o a través de un trabajo, básicamente hace todo lo anterior.

Ejecutar DBCC CheckDB directamente en una base de datos

Puede ejecutar el comando DBCC CheckDB directamente en una base de datos y verificar los resultados. Verifique la salida del comando como se muestra en la captura de pantalla a continuación. El resultado muestra los detalles sobre las filas de las tablas y el número de páginas utilizadas por estas filas.

Si observa detenidamente, verá más detalles específicos de los objetos de la base de datos. Por ejemplo, en la base de datos "VLDB", puedo ver el siguiente resultado:

“Object ID 1179151246 (object 'Warehouse.ColdRoomTemperatures'): The operation is not supported with memory optimized tables. This object has been skipped and will not be processed.”

Como muestra este resultado, DBCC CheckDB no es compatible con tablas optimizadas para memoria. Las tablas optimizadas para memoria se introdujeron por primera vez en SQL Server 2014 como una característica exclusiva de Enterprise. Sin embargo, a lo largo de los años se han convertido en una funcionalidad popular y muy difundida en SQL Server.

También notará que DBCC Check validó los datos del agente de servicio en la base de datos como se muestra a continuación.

“DBCC results for 'VLDB'.

Service Broker Msg 9675, State 1: Message Types analyzed: 14.

Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.

Service Broker Msg 9667, State 1: Services analyzed: 3.

Service Broker Msg 9668, State 1: Service Queues analyzed: 3.

Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.

Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.

Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.

Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.”

Finalmente, una vez que el comando DBCC CheckDB se complete con éxito, verá el siguiente resultado:

¿Qué sucede si se informan errores después de ejecutar DBCC CheckDB?

En el ejemplo anterior, puede ver que DBCC CheckDB se completó sin errores. Sin embargo, si no tiene tanta suerte, es posible que se encuentre con errores de consistencia, y ese será el momento en el que deberá tomar algunas decisiones críticas. Si se encontró con problemas en una base de datos de producción, es mejor informar a los propietarios de la empresa o a su Gerente de operaciones para que pongan sus cartas sobre la mesa. Puede darles la opción de restaurar la base de datos desde la última copia de seguridad disponible o puede experimentar ejecutando comandos DBCC CheckDB con opciones adicionales.

Los mensajes de error de DBCC pueden parecerse al siguiente:

Table error: Object ID 36, index ID 1, partition ID, alloc unit ID (type In-row data).

Keys out of order on page (1:107), slots 6 and 9.
CHECKDB found 0 allocation errors and 1 consistency errors in table 'sys.syk' (object ID 36).
CHECKDB found 0 allocation errors and 1 consistency errors in database 'VLDB'.
repair_rebuild is the minimum repair level for the errors found by DBCC CHECKDB (VLDB).

En el mensaje de error, puede ver un mensaje de error cuidadosamente redactado:"repair_rebuild es el mínimo nivel de reparación de los errores encontrados por DBCC CHECKDB ” – sugiriéndote que ejecutes DBCC CheckDB con la opción repair_rebuild. Solo mire la palabra resaltada:"mínimo". Esto significa que, con la opción repair_rebuild, no existe una posibilidad real de pérdida de datos y SQL Server realiza algunos arreglos rápidos bajo el capó. Consulte el siguiente comando para ejecutar DBCC CheckDB con la opción repair_rebuild. Asegúrese de colocar la base de datos en modo de usuario único.

Según la documentación de Microsoft, la opción REPAIR_REBUILD es la versión más inofensiva ya que no puede haber pérdida de datos. Sin embargo, si REPAIR_REBUILD aún no corrige los errores de consistencia, existe otra opción:habilitar REPAIR_ALLOW_DATA_LOSS. Mirando el nombre, sabemos que existiría la posibilidad de alguna pérdida de datos si activamos esta opción. Debido a esto, Microsoft nos advierte que usemos esto con extrema precaución ya que puede haber consecuencias inesperadas al ejecutar DBCC CheckDB con REPAIR_ALLOW_DATA_LOSS. El comando DBCC CheckDB en este caso se verá de la siguiente manera:

Puntos a considerar antes de usar la opción Reparar con DBCC CheckDB

  • ¿Qué importancia tiene la base de datos en cuestión?

  • ¿La base de datos se encuentra en producción o en un entorno de prueba?

  • ¿Qué tan grande es la base de datos?

  • ¿Tiene una buena estrategia de recuperación en caso de que surjan problemas?

  • ¿Ha validado las copias de seguridad de su base de datos?

Basándose en la situación y las respuestas a las preguntas anteriores, intente tomar una decisión teniendo en cuenta los mejores intereses del cliente.

Automatización de las tareas DBCC CheckDB en SQL Server mediante planes de mantenimiento de bases de datos

Bueno, no tienes que ejecutar todos estos comandos manualmente en tus servidores. Por eso contamos con planes de mantenimiento. Asegúrese de programar un ciclo de mantenimiento regular para todas sus bases de datos utilizando los planes de mantenimiento de bases de datos. Es una tarea bastante simple y directa. En "Tareas del plan de mantenimiento", seleccione la "Tarea de verificación de integridad de la base de datos".

Esto agregará una subtarea a su plan de mantenimiento para programar verificaciones de integridad para sus bases de datos. Asegúrese de seleccionar las bases de datos requeridas como se muestra.

Asegúrese de ejecutar todas las comprobaciones de la base de datos fuera de las horas pico de la semana. Por lo general, las ventanas de mantenimiento son los fines de semana cuando el servidor está menos ocupado en comparación con los otros días de la semana. Sin embargo, esto variará de un servidor a otro y depende de la aplicación. En los sistemas de bases de datos críticos, las alertas generalmente se muestran cada vez que se pierden DBCC CheckDB o verificaciones de integridad. De esta forma, los administradores de bases de datos pueden comprobar de forma proactiva y asegurarse de que se completan las comprobaciones de integridad para evitar sorpresas más adelante.

Automatización de tareas DBCC CheckDB en SQL Server mediante scripts personalizados u otros scripts populares

Los planes de mantenimiento de SQL Server no necesitan usarse todo el tiempo para realizar tareas de mantenimiento en su instancia de SQL Server. Hay otros scripts personalizados disponibles que puede usar. Una de las herramientas de mantenimiento gratuitas populares es la solución de mantenimiento de Ola Hallengren. Puede instalar la solución de mantenimiento completa, que incluye tareas de copias de seguridad, optimización, etc., o puede descargar solo los scripts relevantes relacionados con las comprobaciones de integridad. En esta demostración, intentaremos instalar los scripts específicos para las comprobaciones de integridad de la base de datos.

Haga clic en la opción DatabaseIntegrityCheck.sql como se muestra para descargar los procedimientos almacenados que verifican la integridad de la base de datos. Después de ejecutar estos procedimientos almacenados en la base de datos maestra, encontré estos mensajes de advertencia:

“The module 'DatabaseIntegrityCheck' depends on the missing object 'dbo.CommandExecute'. The module will still be created; however, it cannot run successfully until the object exists.”

Si ejecuta el procedimiento almacenado para realizar comprobaciones de integridad, obtendrá el siguiente error:

Como indica el error, puede descargar el código que falta aquí. Una vez hecho esto, puede comenzar a probar las comprobaciones de integridad de la base de datos.

Puede ajustar varias opciones utilizando los parámetros de comando DBCC adicionales. Puede encontrar más detalles y ejemplos aquí.

Sin embargo, en esta demostración, revisaremos algunos ejemplos para ver cuán fáciles y fáciles de usar son realmente estos scripts.

Para ejecutar DBCC CheckDB en todas las bases de datos de usuario , deberá ejecutar lo siguiente:

EXECUTE dbo.DatabaseIntegrityCheck

@Databases = 'USER_DATABASES',

@CheckCommands = 'CHECKDB'

Puede ver el comando que se ejecutó y el estado del resultado que confirma que DBCC CheckDB se completó correctamente.

Para ejecutar DBCC Check solo para las bases de datos del sistema, ejecuta este comando:

EXECUTE dbo.DatabaseIntegrityCheck

@Databases = 'SYSTEM_DATABASES',

@CheckCommands = 'CHECKDB'

En la captura de pantalla, puede ver que DBCC CheckDB se completó correctamente para las bases de datos del sistema.

Para ejecutar DBCC CheckDB solo para una base de datos específica, ejecuta lo siguiente:

EXECUTE dbo.DatabaseIntegrityCheck

@Databases = 'VLDB', -- your specific DB Name

@CheckCommands = 'CHECKDB'

En el ejemplo anterior, vio algunas formas en que podemos usar parámetros. Sin embargo, hay una serie de otros filtros que puede seleccionar según sus preferencias. Además, como ya se mencionó, puede consultar este enlace para una mayor comprensión de los guiones de Ola Hallengren. Solo para reiterar, estoy usando los scripts de Ola Hallengren en los servidores que administro y es altamente recomendado y reconocido dentro de la comunidad de SQL Server. Puede programar los procedimientos almacenados en función de sus parámetros preferidos y ejecutarlos como un trabajo de SQL durante las horas de menor actividad. De esta manera, realmente no necesita ejecutar ninguno de estos scripts manualmente, por lo que puede concentrarse en otras tareas importantes.

Conclusión

  • De este artículo, aprendió sobre DBCC CheckDB y cómo se puede usar
  • También entendió la importancia de ejecutar DBCC CheckDB regularmente en todas sus bases de datos importantes
  • También aprendió sobre la importancia de tener una estrategia de copia de seguridad probada:se recomienda restaurar sus bases de datos utilizando una buena copia de seguridad en lugar de resolver cualquier error de coherencia utilizando las opciones de reparación de DBCC
  • También vio lo fácil que es configurar y automatizar secuencias de comandos, ya sea utilizando planes de mantenimiento de SQL Server o secuencias de comandos personalizadas, por ejemplo, la de Ola Hallengren
  • También aprendió los riesgos de no programar DBCC CheckDB en su infraestructura compatible
  • También aprendió que, sin importar en qué servidor se encuentre o qué infraestructura ejecute, no puede haber una base de datos que no requiera mantenimiento
  • Finalmente, asegúrese de mantener sus bases de datos en buen estado y, en cualquier caso, esté preparado para esos días de descanso que pueden no estar bajo su control.