El comando de la consola de la base de datos CHECKDB (DBCC CHECKDB)se utiliza para comprobar la integridad (física & lógica) de los objetos de una base de datos de SQL Server.El comando es compatible con las bases de datos que contienen tablas optimizadas para la memoria, pero la validación sólo es compatible con las tablas basadas en el disco. La opción de reparación DBCC no está disponible en las tablas optimizadas para memoria y, por lo tanto, conduce a la necesidad de una copia de seguridad regular de la base de datos.En caso de que surja un problema en una tabla optimizada para memoria, los datos pueden ser restaurados desde la última copia de seguridad realizada.
Las distintas operaciones que realiza CHECKDB son:
- DBCC CHECKALLOC ejecución en la base de datos SQL.
- DBCC CHECKTABLE ejecución en cada tabla y vista de la base de datos SQL.
- DBCC CHECKCATALOG ejecución en la base de datos SQL.
- Validación del contenido en la vista indexada de la base de datos.
- Validación de la consistencia a nivel de enlaces entre los directorios de archivos y los metadatos de las tablas.
- Validación de los datos del broker de servicios.
Dado que DBCC CHECKDB ejecuta todos los demás comandos no será necesario ejecutar los comandos CHECKALLOC, CHECKTABLE y CHECKCATALOG por separado.
Sintaxis de DBCC CHECKDB
Los argumentos utilizados en la sintaxis anterior significan lo siguiente:
nombre_base_de_datos | id_base_de_datos | 0 Es el nombre de la base de datos.En caso de que no se signifique el nombre o sólo se escriba 0, se está utilizando la base de datos actual. NOINDEX Especifica que no se debe realizar la comprobación de integridad de las tablas de índices no agrupados. Esta sintaxis no afecta a los datos que residen en las tablas. REPAIR_ALLOW_DATA_LOSS Esta sintaxis repara los errores que se encuentran en la base de datos.Esto puede llevar a la pérdida de algunos datos.
Nota: Esta sintaxis está soportada por Microsoft y no siempre resulta ser una solución ideal para dejar la base de datos en buen estado físico. Esto se debe a que borra todos los datos que se encuentran corruptos y puede conducir a una mayor pérdida de datos, de lo que se hizo originalmente a la base de datos.Por lo tanto, se debe adoptar como último recurso.
REPAIR_FAST Este argumento sólo mantiene la compatibilidad con versiones anteriores y no realiza ninguna reparación. REPAIR REBUILD Este argumento incluye un proceso de reparación más rápido que no supone una amenaza de pérdida de datos. ALL_ERRORMSGS Muestra todos los errores que se generan en todos los objetos. Incluir o excluir esta sintaxis no tendrá ningún efecto ya que los mensajes de error suelen estar ordenados por el ID del objeto. El número máximo de mensajes de error que se generan puede llegar a 1000. EXTENDED_LOGICAL_CHECKS Este argumento ejecuta una comprobación lógica consistente en las vistas e índices, sólo si el nivel de compatibilidad es 100. NO_INFOMSGS Elimina todos los mensajes informativos. TABLOCK Esta sintaxis obtiene un bloqueo exclusivo en la base de datos y aumentará la velocidad de DBCC CHECKDB en una base de datos en momentos de mucha carga. Pero disminuye la disponibilidad de la base de datos para operaciones concurrentes. ESTIMATEONLY Especifica o estima la cantidad de espacio que necesitaría la base de datos para ejecutar el comando CHECKDB. PHYSICAL_ONLY Establece una limitación para comprobar sólo la estructura física de la base de datos. Una breve comprobación de la base de datos física va acompañada de la detección de páginas rotas, fallos y problemas comunes a los que se enfrentan los usuarios. PUREZA DE DATOS Esta sintaxis comprueba los valores de las columnas que están fuera de rango o no son válidos. Las comprobaciones de integridad de los valores de las columnas están activadas por defecto y no necesitan la sintaxis DATA_PURITY.
Cosas a tener en cuenta
- Los índices deshabilitados no pueden ser comprobados por DBCC CHECKDB.
- Los tipos definidos por el usuario y ordenados por bytes necesitan ser serializados si se necesita ejecutar DBCC CHECKDB. En cualquier otro caso, se produce el error 2537.
- DBCC CHECKDB no puede ejecutarse directamente en la base de datos de recursos, ya que sólo puede modificarse en modo único.
Mensajes de error generados por DBCC CHECKDB
Cuando el comando CHECKDB termina de ejecutarse, se escribe un mensaje en el registro de errores SQL. En caso de éxito, se genera un mensaje indicando el éxito y el tiempo total de ejecución del comando. En caso de fallo, se termina el proceso debido a la aparición de algún error, indicado por un mensaje. Los distintos valores de estado que representan el mensaje de error son:
Informe de error
Cuando se detecta una corrupción por parte del comando CHECKDB, se crea un archivo de volcado llamado SQLDUMPNNNN.txt en el directorio de registro del servidor SQL. En caso de que la recopilación de datos de uso de características y la notificación de errores estén habilitadas en SQL, el informe de errores se envía a Microsoft con fines de mejora.
Restauración de la base de datos
En el escenario de generación de errores en SQL server, se recomienda restaurar la base de datos desde la última copia de seguridad creada en lugar de reparar la base de datos.En caso de que no exista ninguna copia de seguridad, puede optar por las opciones de reparación. Pero optar por la reparación con REPAIR_ALLOW_DATA_LOSS puede conducir a la eliminación de algunos datos.
Resolución alternativa para la recuperación de la base de datos
Básicamente el comando DBCC CHECKDB comprueba las consistencias de la base de datos, incluyendo la física o lógica. Este comando comprueba las páginas, el índice y algunos otros componentes de la base de datos del servidor SQL, pero en algunos puntos críticos este opta por negarse a recuperar la base de datos SQL. En caso de ausencia de copia de seguridad de la base de datos de MS SQL Server, las opciones de reparación optado puede eliminar una cantidad apreciable de data.Therefore, con el fin de recuperar la base de datos sin comprometer con la integridad de los datos, se puede optar por la solución de recuperación de base de datos de Microsoft SQL. Garantizan la recuperación completa de la base de datos sin borrar ninguna cantidad de datos.