lunes, 16 de octubre de 2017

SQL Server DBCC CHECKTABLE

Comando DBCC CHECKTABLE


Ya he indicado, en Comandos DBCC de validación, que este comando comprueba la integridad de todas las páginas y estructuras que constituyen la tabla o vista indexada. En términos generales el comando comprueba las siguientes estructuras en la tabla especificada:

·      Las páginas de índice, consecutivas, de objetos grandes (LOB) y de datos de desbordamiento de fila están vinculadas correctamente. 
·      Los índices se encuentran en el orden correcto. 
·      Los índices son coherentes. 
·      Los datos de cada página son razonables, incluidas las columnas calculadas. 
·      Los desplazamientos de página son razonables. 
·      Cada renglón de la tabla base tiene un renglón correspondiente en cada índice no clúster y viceversa. 
·      Todos los renglones de un índice o tabla con particiones están en la partición correcta. 
·      Coherencia a nivel de vínculo entre el sistema de archivos y la tabla al almacenar datos  de tipo varbinary (max) del sistema de archivos con FILESTREAM.

Este comando tiene como sintaxis básica la siguiente:
USE database_name;
GO

DBCC CHECKTABLE ([table_name]);

Con este comando se lleva a cabo la comprobación de la integridad de páginas y estructuras de la tabla indicada, es posible que sea indicado el nombre de una vista que esté indexada. Debe tenerse en cuenta que los nombres de tabla o de vista deben cumplir con las reglas de los identificadores.
La sintaxis que se utiliza a menudo es:

USE database_name;
GO
 
DBCC CHECKTABLE ([table_name], NOINDEX);

Con este comando se lleva a cabo la comprobación de integridad de las páginas sin comprobaciones intensivas de índices no clúster para las tablas de usuario, solo para las tablas de sistema, esto con el objeto de reducir el tiempo de ejecución. 

Existen algunos argumentos opcionales que pueden ser utilizadas con el comando, estos son:

NOINDEX
Como se indicó anteriormente, se especifica que no se deben realizar comprobaciones intensivas de índices no clúster para las tablas de usuario. Esto reduce el tiempo total de ejecución.
index_id
Es el número de identificación (Id.) del índice para el que se van a ejecutar las comprobaciones de integridad, solo en ese índice, junto con el índice clúster.
REPAIR_ALLOW_DATA_LOSS
Intenta reparar todos los errores indicados. Estas reparaciones pueden ocasionar alguna pérdida de datos.
REPAIR_FAST
La sintaxis solo se mantiene por razones de compatibilidad con versiones anteriores. No se realizan acciones de reparación.
REPAIR_REBUILD
Realiza reparaciones que no tienen ninguna posibilidad de pérdida de datos. Pueden ser reparaciones rápidas, como la reparación de las filas que faltan en índices no clúster, y reparaciones que consumen más tiempo, como regenerar un índice. Este argumento no repara los errores que implican datos de FILESTREAM.
ALL_ERRORMSGS
De forma predeterminada, se muestran todos los mensajes de error. Especificar u omitir esta opción no tiene ningún efecto.
EXTENDED_LOGICAL_CHECKS
Si el nivel de compatibilidad es 100 (correspondiente a Microsoft SQL Server 2008) o superior, realiza comprobaciones de coherencia lógica en una vista indizada, en índices XML y en índices espaciales, en caso de que los haya.
NO_INFOMSGS
Suprime todos los mensajes de información.
TABLOCK
Hace que se reciba un bloqueo de tabla compartido en vez de utilizar una instantánea de base de datos interna. Este argumento hará que el comando se ejecute más rápido en una tabla con mucha carga, pero disminuirá la simultaneidad disponible sobre la tabla mientras el comando  está ejecutándose.
ESTIMATEONLY
Muestra la cantidad estimada de espacio de tempdb necesario para ejecutar el comando con todas las demás opciones especificadas.
PHYSICAL_ONLY
Limita la comprobación de la integridad a la estructura física de la página, los encabezados de registro y la estructura física de árboles b. Este argumento es excluyente de DATA_PURITY
DATA_PURITY
Hace que se compruebe si la tabla contiene valores de columna que no son válidos o están fuera del intervalo correcto. Este argumento es excluyente de PHYSICAL_ONLY
MAXDOP = number_of_processors
Invalida el grado máximo de paralelismo de la opción de configuración de sp_configure para la instrucción. (Este argumento funciona para Microsoft SQL Server 2014 SP 2 y superior)

Ejemplos de DBCC CHECKTABLE

Mostraré algunos ejemplos de uso de este comando:

USE database_name;
GO

DBCC CHECKTABLE ('table_name’) WITH PHYSICAL_ONLY;   

En el ejemplo anterior se realiza una comprobación de carga baja de la tabla table_name de la base de datos actual.

USE databse_name;
GO

DBCC CHECKTABLE ('table_name', 1); 

En el ejemplo se indica que se lleve a cabo la comprobación de un índice específico. El valor de la identificación de un índice es posible obtenerlo mediante un acceso a sys.indexes.

Nota de Microsoft
Para ejecutar DBCC CHECKTABLE en todas las tablas de la base de datos, utilice DBCC CHECKDB.

Comentarios

Siempre se ha recomendado que se utilice las opciones REPAIR solo como último recurso, ya que es preferible restaurar a partir de una copia de seguridad. Cuando se efectúan las operaciones de reparación éstas no tienen en cuenta ninguna de las restricciones que puede haber en las tablas o entre ellas. Si no existe una copia de seguridad, la ejecución de REPAIR puede corregir los errores indicados. La opción REPAIR que se debe utilizar se especifica al final de la lista de errores indicados.
Si fuera necesario usar REPAIR, ejecute el comando DBCC CHECKTABLE sin una opción de reparación para localizar el nivel de reparación que se va a utilizar. En caso de que se llegue a utilizar la reparación con el nivel de REPAIR_ALLOW_DATA_LOSS, se recomienda realizar una copia de seguridad de la base de datos antes de ejecutar DBCC CHECKTABLE con esta opción.  Una vez finalizadas todas las reparaciones, realice una copia de seguridad de la base de datos.

No hay comentarios.:

Publicar un comentario