Desde SolidQ solemos realizar chequeos de las instancias de bases de datos de muchos clientes (grandes, medianos y pequeños) y seguimos encontrándonos servidores de SQL donde no se realiza la tarea de chequeo de base de datos. Por otro lado, se piensa que cuando subimos nuestras bases de datos a la nube esta tarea ya no es necesaria. Por lo que he pensado en crear esta entrada de blog para recordar la importancia de esta tarea.

Microsoft SQL server tiene varios métodos de verificación de las páginas de datos para comprobar que no hay ningún tipo de corrupción, vamos a recordarlos:

Verificación de página (CHECKSUM)

CHECKSUM es una opción para la verificación de la página que está disponible individualmente para cada base de datos.  Podemos ver qué nivel de verificación utiliza actualmente cada una de nuestras bases de datos mediante la siguiente consulta:

SELECT name, page_verify_option_desc FROM sys.databases

En la mayoría de los casos, notaremos que la opción verificación de página está configurada en CHECKSUM y eso es porque hoy en día esta es la opción predeterminada para todas las bases de datos. Para las versiones anteriores a SQL 2005, este no era el caso, por lo que ocasionalmente, al revisar instancias de bases de datos que se han migrado de versiones anteriores, podríamos ver las otras opciones de Verificación de páginas: TORN PAGE y  NONE.

IMPORTANTE
En motores SQL superiores a 2005 todas las bases de datos deben tener la opción de verificación de página en CHECKSUM.

DBCC CHECKDB

Una idea común con respecto a la opción CHECKSUM que se tiene, es que reemplaza la necesidad de comprobación de coherencia de las bases de datos (CHECKDB). Esto es incorrecto; CHECKSUM solo informa en la operación de lectura de una página incoherente, si la página no se lee, no se informa del error. Sin embargo, DBCC CHECKDB realiza una verificación mucho más exhaustiva a nivel de la base de datos e incluye comprobaciones que un CHECKSUM simplemente no cubre, por lo tanto, la mejor práctica es combinar la verificación de la página CHECKSUM y las comprobaciones de consistencia regulares.
DBCC CHECKDB comprueba la integridad física y lógica de todos los objetos de la base de datos especificada mediante la realización de las siguientes operaciones:

  • Ejecuta DBCC CHECKALLOC en la base de datos.
  • Ejecuta DBCC CHECKTABLE en todas las tablas y vistas de la base de datos.
  • Ejecuta DBCC CHECKCATALOG en la base de datos.
  • Valida el contenido de cada vista indizada de la base de datos.
  • Valida la coherencia de nivel de vínculo entre los metadatos de la tabla y los directorios y 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.

Esto significa que los comandos DBCC CHECKALLOC, DBCC CHECKTABLE o DBCC CHECKCATALOG no tienen que ejecutarse por separado de DBCC CHECKDB.

IMPORTANTE
Muchas veces también nos encontramos entornos donde no se lanza el chequeo de base de datos porque las bases de datos son muy grandes y la ventana de mantenimiento no es suficiente, en este caso, se recomienda utilizar la opción PHYSICAL_ONLY. El uso de PHYSICAL_ONLY puede reducir mucho el tiempo de ejecución de DBCC CHECKDB en bases de datos grandes.
He visto bases de datos corruptas funcionando durante años sin problemas, porque los datos que están dañados son tan antiguos que nadie está accediendo a ellos y solo son visible cuando ejecutas el DBCC CHECKDB. Es por eso que DBCC CHECKDB es tan crítico ya que interroga a toda la base de datos.

DBCC CHECKDB en AZURE

En Azure tenemos dos tipos de servicios: PaaS e IaaS.

Dentro de IaaS la opción que tenemos de SQL es instalar SQL en una máquina virtual, en este caso Microsoft no va a gestionar lo que hay instalado dentro de la máquina virtual por lo que queda en nuestro debe realizar los chequeos de las bases de datos.
Para la parte de PaaS Microsoft nos ofrece dos sabores:
Azure SQL , aquí Microsoft se encarga de monitorizar y chequear la base de datos, en cuanto a las operaciones de chequeo que realiza hay una entrada en un blog que nos lo explica https://azure.microsoft.com/en-gb/blog/data-integrity-in-azure-sql-database/. Aun así, yo sigo recomendando que hay que lanzar de forma periódica un DBCC CHECKDB sobre estas bases de datos.
Instancia Manejada, aquí Microsoft te gestiona y monitoriza el motor relacional pero lo que no hace es chequear la integridad de las bases de datos, por lo menos a día de hoy, entonces, también es necesario ejecutar periódicamente el comando DBCC CHECKDB.

 

X Edición Executive Máster en BI & Advanced Analytics con Tecnologías Microsoft. Conviértete en un año en un experto en BI con un seguimiento personalizado de los mentores y MVPs de SolidQ y con el nuevo temario del máster en BI & Advanced Analytics , introduciendo Modern Data Warehouse, analítica y visualización avanzada.

¡Empezamos en octubre! Inscríbete ahora y aprovecha el descuento que hay disponible hasta finales de julio o completar inscripciones. Toda la información aquí.

José Antonio Pineda
Últimas entradas de José Antonio Pineda (ver todo)