Cómo automatizar DBCC CHECKDB después de una restauración de base de datos

¿Por qué correr DBCC CHECKDB?

DBCC CHECKDB revisa la integridad lógica y física de todos los objetos en una base de datos y provee información de cualquier corrupción.

Como correr DBCC CHECKDB es una tarea exhaustiva en recursos es recomendado correrlo en un servidor de producción cuando haya tan poco tráfico como sea posible, o incluso mejor, una de las maneras de acelerar el proceso DBCC CHECKDB es transferir el trabajo a un servidor diferente automatizando un proceso y corriendo CHECKDB después de una restauración de base de datos. Como el proceso de respaldo es una copia de una base de datos y una base de datos restaurada será exactamente la misma que una base de datos en línea y una base de datos restaurada será exactamente la misma que una en línea, por lo tanto si hubiera alguna inconsistencia o problema, estará en la copia de seguridad, y será encontrado en una restauración. Usando este enfoque ambas restauraciones serán probadas y las copias de seguridad verificadas sin ningún impacto en una base de datos de producción.

Correr DBCC CHECKDB después de una restauración puede ser también una buena práctica si la calidad de la copia de seguridad es desconocida.

En este artículo describiremos cómo automatizar un DBCC CHECKDB después de una restauración de base de datos automatizando DBCC CHECKDB después de una restauración de base de datos usando un trabajo de SQL Server Agent, Planes de Mantenimiento y ApexSQL Backup, y explicaremos algunas de las opciones de DBCC CHECKDB disponibles en ApexSQL Backup.

Cómo automatizar DBCC CHECKDB después de una restauración de base de datos usando un trabajo de SQL Server Agent

Para automatizar DBCC CHECKDB después de una restauración de base de datos usando SQL Server Agent:

  1. Seleccione New Job desde el nodo SQL Server Agent ➜ Jobs
  2. Cree un primer paso y especifique una copia de seguridad de base de datos usando el siguiente script:

    RESTORE DATABASE AdventureWorks2014CheckDB 
    FROM DISK = 'E:\EncBackup\AdventureWorks2014_Full_20150612_1916.bak' 
    WITH RECOVERY
    GO
    

  3. Añada un segundo paso para realizar DBCC CHECKDB en una base de datos restaurada añadiendo el siguiente script T-SQL:

    DBCC CHECKDB (AdventureWorks2014CheckDB)
    

    Para usar diferentes opciones de DBCC CHECKDB use los siguientes scripts T-SQL:

    Para revisar valores de columna y verificar si hay valores fuera de rango:

    DBCC CHECKDB (AdventureWorks2014CheckDB) WITH DATA_PURITY
    

    Para apagar los mensajes de información innecesarios:

    DBCC CHECKDB (AdventureWorks2014CheckDB) WITH NO_INFOMSGS
    

    Para revisar vistas indexadas e índices espaciales y XML:

    DBCC CHECKDB (AdventureWorks2014CheckDB) WITH EXTENDED_LOGICAL_CHECKS
    

    Para revisar solo la estructura física de una base de datos:

    DBCC CHECKDB (AdventureWorks2014CheckDB) WITH PHYSICAL_ONLY
    

    Para establecer el bloqueo de tablas:

    DBCC CHECKDB (AdventureWorks2014CheckDB) WITH TABLOCK
    

    Estas opciones pueden ser combinadas, excepto la opción WITH PHYSICAL_ONLY que no puede ser combinada con algunas de las opciones, lo cual será explicado más adelante en este artículo.

  4. Programe un trabajo con una frecuencia deseada de ejecución.

Aunque es relativamente de configurar, usar un trabajo de SQL Server Agent para estas operaciones requiere escribir scripts T-SQL y un conocimiento de la sintaxis de las opciones DBCC CHECKDB así como un conocimiento de la funcionalidad de daca opción y las posibilidades de combinarlas.

Cómo automatizar DBCC CHECKDB después de una restauración de bases de datos usando un Plan de Mantenimiento

Los Planes de Mantenimiento pueden ser también usados para realizar esta acción. Aunque la barra de herramientas de Planes de Mantenimiento no contiene una tarea de restauración, la tarea T-SQL puede ser usada.

Para automatizar DBCC CHECKDB después de una restauración de base de datos usando Planes de Mantenimiento:

  1. Desde el nodo Management en el panel Object Explorer, debajo de Maintenance Plans seleccione New Maintenance Plan.
  2. En new Maintenance Plan, nombre un nuevo plan.
  3. Desde la barra de herramientas Maintenance Plan Tasks seleccione Execute T-SQL Statement Task

  4. Haga doble clic en la tarea y pegue un script T-SQL:

  5. Añada Check Databse integrity desde la barra de herramientas Maintenance Plan Tasks:

  6. Haga doble clic en una tarea y seleccione una base de datos en dónde correr la tarea:

  7. Cuando el plan de mantenimiento esté configurado, prográmelo como un trabajo de SQL Server Agent:

La desventaja de este enfoque aparte de ser más complicado de configurar es que actualmente Check Database Integrity Task ofrece sólo la revisión de índices como una opción adicional y realiza una revisión DBCC CHECKDB completa.

Más opciones serán añadidas en SQL Server versión 2016.

Cómo automatizar DBCC CHECKDB después de una restauración de base de datos usando ApexSQL Backup

ApexSQL Backup es un administrador de restauración y copias de seguridad SQL ofrece una opción para ejecutar el comando DBCC CHECKDB automáticamente durante una restauración y permite al usuario elegir entre opciones para incluir in en una revisión.

ApexSQL Backup permite al usuario automatizar el proceso en sólo unos cuantos clics sin la necesidad de escribir un script T-SQL y comando adicionales para opciones adicionales explicadas más adelante, ya que las ofrece por defecto.

ApexSQL Backup también deshabilita automáticamente las opciones que no pueden ser combinadas si una de ellas es seleccionada, por tanto previniendo que el usuario experimente errores, por ejemplo:

Msg 2532, Level 16, State 2, Line 8
One or more WITH options specified are not valid for this command.

Para automatizar DBCC CHECKDB después de una restauración de una base de datos usando ApexSQL Backup:

  1. Seleccione la opción Restore del menú ApexSQL Backup.
  2. En el diálogo Restore wizard seleccione un servidor para conectarse e ingrese un nombre de base de datos:

  3. Especifique un archivo de copia de base de datos exacto para restaurar o use la opción Folder scan:

  4. En la ventana Options de Restore wizard seleccione la opción Run database integrity check after restore (DBCC CHECKDB) , y seleccione las opciones adicionales deseadas:

Eligiendo las opciones

La opción WITH PHYSICAL_ONLY DBCC CHECKDB

Seleccionar la opción WITH PHYSICAL_ONLY forza a DBCC CHECKDB a saltar las verificaciones de consistencia que son costosas para la CPU, proveyendo una verificación de la consistencia física con poca carga adicional, permitiendo que el proceso DBCC CHECKDB corra significativamente más rápido. La opción PHYSICAL_ONLY se cambia en la opción NO_INFOMSGS.

Esta opción apaga otras opciones de DBCC CHECKDB (la opción DATA_PURITY y cualquier opción de reparación) que podrían ser útiles para una inspección de corrupción más profunda.

La opción WITH DATA_PURITY DBCC CHECKDB

SQL Server 2005 introdujo la opción DATA_PURITY que es añadida al comando DBCC CHECKDB. Esta opción revisa los valores de columna y detecta los problemas si un valor de columna está fuera de rango o es no válido. Para bases de datos creadas en versiones 2005 o más antiguas, DATA_PURITY no tiene que ser especificada, ya que es seleccionada automáticamente. Esto no aplica en bases de datos que son actualizadas desde una versión más antigua, y en esos casos esta opción debería ser especificada cuando se corre DBCC CHECKDB.

La opción WITH EXTENDED_LOGICAL_CHECKS DBCC CHECKDB

Esta opción es usada para realizar revisiones de consistencia en vistas indexadas, índices espaciales e índices XML. Para realizar una revisión de consistencia en estos tipos de índices, esta opción tiene que ser añadida porque esta revisión no es realizada por defecto desde SQL Server 2008.

Cuando se revisa la consistencia de una vista indexada, DBCC CHECKDB compara la vista indexada con la definición de la vista y reporta si hay algunas filas perdidas o si hay filas adicionales. Las revisiones de consistencia de índices XML e índices espaciales es similar a la revisión de consistencia de vistas indexadas con pequeñas diferencias.

Las filas adicionales para los tres tipos de índices están indicadas con errores 8907, y las filas perdidas están indicadas con errores 8908.

Esta revisiones son muy caras en tiempo y espacio para correr, y dependen de definiciones de índices, porque mientras más compleja es una definición de índice, más tiempo es requerido para generar una copia de un índice en la base de datos tempdb, y más espacio consumirá en la base de datos tempdb.

La opción WITH TABLOCK DBCC CHECKDB

DBCC CHECKDB usa el esquema de bloqueo, lo que significa que mientras los datos son leídos, otras transacciones no pueden modificarlos, pero los datos bloqueados sí pueden ser leídos. El bloqueo compartido es levantado después de que el proceso de leer los datos bloqueados finaliza.

Si la opción WITH TABLOCK está seleccionada, reducirá el nivel de bloqueo y forzará DBCC CHECKDB a usar bloqueo de tabla compartido.

La opción WITH NO_IFOMSGS DBCC CHECKDB

Cuando se realiza DBCC CHECKDB, esto provee al usuario con una cantidad substancial de información en la salida. Seleccionar la opción NO_INFOMSGS reducirá la cantidad de información a solamente errores que son encontrados y permitirá al usuario identificar los errores reportados más rápida y fácilmente.

  1. Después de que todas las opciones deseadas estén configuradas en la ventana Options del diálogo Restore wizard, programe un trabajo con una frecuencia deseada de ocurrencia y opcionalmente seleccione si desea ser notificado por correo electrónico:

  2. Envíe un programa haciendo clic en el botón Next:

  3. Finalice el proceso haciendo clic en el botón Finish:

Traductor: Daniel Calbimonte

agosto 16, 2016