DBCC (Transact-SQL)

El lenguaje de programación Transact-SQL proporciona instrucciones DBCC que actúan como comandos de consola de base de datos en SQL Server 2005.

Las instrucciones de comandos de consola de base de datos se dividen en las siguientes categorías.

Categoría de comando Acciones

Mantenimiento

Tareas de mantenimiento en las bases de datos, los índices o los grupos de archivos.

Varias

Tareas varias como habilitar marcas de traza o quitar una DLL de la memoria.

Informativa

Tareas que recopilan y muestran diversos tipos de información.

Validación

Operaciones de validación en una base de datos, tabla, índice, catálogo, grupo de archivos o asignación de páginas de base de datos.

Los comandos DBCC reciben parámetros de entrada y devuelven valores. Todos los parámetros de los comandos DBCC pueden aceptar literales Unicode y DBCS.

Utilizar salidas de conjuntos de resultados DBCC

Muchos comandos DBCC pueden producir salidas en formato tabular utilizando la opción WITH TABLERESULTS. Esta información se puede cargar en una tabla para su uso posterior. A continuación se muestra un ejemplo de secuencia de comandos:

-- Create the table to accept the results.
CREATE TABLE #tracestatus (
   TraceFlag int,
   Status int
   )

-- Execute the command, putting the results in the table.
INSERT INTO #tracestatus 
   EXEC ('DBCC TRACESTATUS (-1) WITH NO_INFOMSGS')

-- Display the results.
SELECT * 
FROM #tracestatus
GO

Uso de comandos DBCC en instantáneas internas de bases de datos

Los siguientes comandos DBCC operan en una instantánea de base de datos interna de sólo lectura que crea el SQL Server Database Engine (Motor de base de datos de SQL Server). Así se evitan problemas de bloqueo y simultaneidad cuando se ejecutan estos comandos. Para obtener más información, vea Instantáneas de base de datos.

DBCC CHECKALLOC

DBCC CHECKDB

DBCC CHECKCATALOG

DBCC CHECKFILEGROUP

DBCC CHECKTABLE

 

Cuando se ejecuta uno de estos comandos DBCC, el Database Engine (Motor de base de datos) crea una instantánea de base de datos y la pone en un estado coherente desde el punto de vista transaccional. El comando DBCC ejecuta entonces las comprobaciones de esta instantánea. Una vez completado el comando DBCC, la instantánea se quita.

Algunas veces no es necesaria una instantánea de base de datos interna o no se puede crear. Cuando esto ocurre, el comando DBCC se ejecuta de nuevo en la base de datos real. Si la base de datos está conectada, el comando DBCC utiliza el bloqueo de tabla para garantizar la coherencia de los objetos que está comprobando. Este comportamiento es el mismo que si se especificara la opción WITH TABLOCK.

No se crea ninguna instantánea de base de datos interna al ejecutar un comando DBCC:

  • En master y cuando la instancia de SQL Server se está ejecutando en el modo de usuario único.
  • En una base de datos distinta de master, pero cuando la base de datos se haya puesto en el modo de usuario único mediante la instrucción ALTER DATABASE.
  • En una base de datos de sólo lectura.
  • En una base de datos que se ha establecido en modo de emergencia mediante la instrucción ALTER DATABASE.
  • En tempdb. En este caso, no se puede crear una instantánea de base de datos debido a restricciones internas.
  • Utilizando la opción WITH TABLOCK. En este caso, DBCC respeta la solicitud no creando ninguna instantánea de base de datos.

Los comandos DBCC utilizan bloqueos de tabla en lugar de instantáneas de base de datos internas cuando el comando se ejecuta en:

  • Un grupo de archivos de sólo lectura
  • Un sistema de archivos FAT
  • Un volumen que no admite "secuencias con nombre"
  • Un volumen que no admite "secuencias alternativas"

[!NOTA] Intentar ejecutar DBCC CHECKALLOC, o la parte equivalente de DBCC CHECKDB, utilizando la opción WITH TABLOCK requiere un bloqueo X de base de datos. Este bloqueo de base de datos no se puede definir ni en tempdb ni en master y probablemente dé error en todas las demás bases de datos.

[!NOTA] DBCC CHECKDB da error cuando se ejecuta en master si no se puede crear una instantánea de base de datos interna.

Generación de informes de progreso para comandos DBCC

En SQL Server 2005, la vista de catálogo sys.dm_exec_requests contiene información acerca del progreso y la fase actual de ejecución de los comandos DBCC CHECKDB, CHECKFILEGROUP y CHECKTABLE. La columna percent_complete indica el porcentaje del comando que se ha completado, y la columna command informa de la fase actual de ejecución del mismo.

La definición de una unidad de progreso depende de la fase actual de ejecución del comando DBCC. En ocasiones, se informa del progreso con la granularidad de una página de base de datos; en otras fases, se informa del mismo con la granularidad de una sola base de datos o reparación de asignaciones. En la siguiente tabla se describe cada una de las fases de ejecución y la granularidad con la que el comando informa del progreso.

Fase de ejecución

Descripción

Granularidad de informe de progreso

DBCC TABLE CHECK

Durante esta fase se comprueba la coherencia lógica y física de los objetos de la base de datos.

Informe de progreso en el nivel de página de la base de datos.

El valor del informe de progreso se actualiza para cada 1000 páginas de base de datos comprobadas. 

DBCC TABLE REPAIR

Durante esta fase de realizan reparaciones de base de datos si se especifican REPAIR_FAST, REPAIR_REBUILD o REPAIR_ALLOW_DATA_LOSS y existen errores de objeto que necesiten ser reparados.

Informe de progreso para cada reparación individual.

El contador se actualiza para cada reparación finalizada.

DBCC ALLOC CHECK

Durante esta fase se comprueban las estructuras de asignación de la base de datos.

ms188796.note(es-es,SQL.90).gifNota:

DBCC CHECKALLOC realiza las mismas comprobaciones.

No se informa del progreso.

DBCC ALLOC REPAIR

Durante esta fase de realizan reparaciones de base de datos si se especifican REPAIR_FAST, REPAIR_REBUILD o REPAIR_ALLOW_DATA_LOSS y existen errores de asignación que necesiten ser reparados.

No se informa del progreso.

DBCC SYS CHECK

Durante esta fase se comprueban las tablas de sistema de la base de datos.

Informe de progreso en el nivel de página de la base de datos.

El valor del informe del progreso se actualiza para cada 1000 páginas de base de datos comprobadas. 

DBCC SYS REPAIR

Durante esta fase de realizan reparaciones de base de datos si se especifican REPAIR_FAST, REPAIR_REBUILD o REPAIR_ALLOW_DATA_LOSS y existen errores de tabla del sistema que necesiten ser reparados.

Informe de progreso para cada reparación individual.

El contador se actualiza para cada reparación finalizada.

DBCC SSB CHECK

Durante esta fase se comprueban los objetos de SQL Server Service Broker.

ms188796.note(es-es,SQL.90).gifNota:

Esta fase no se ejecuta cuando DBCC CHECKTABLE se ejecuta.

No se informa del progreso.

DBCC CHECKCATALOG

Durante esta fase se comprueba la coherencia de los catálogos de la base de datos.

ms188796.note(es-es,SQL.90).gifNota:

Esta fase no se ejecuta cuando DBCC CHECKTABLE se ejecuta.

No se informa del progreso.

DBCC IVIEW CHECK

Durante esta fase se comprueba la coherencia lógica de cualquier vista indizada presente en la base de datos.

Informe de progreso en el nivel de la vista de base de datos individual que se está comprobando.

Instrucciones informativas

DBCC CONCURRENCYVIOLATION

DBCC SHOW_STATISTICS

DBCC INPUTBUFFER

DBCC SHOWCONTIG

DBCC OPENTRAN

DBCC SQLPERF

DBCC OUTPUTBUFFER

DBCC TRACESTATUS

DBCC PROCCACHE

DBCC USEROPTIONS

Instrucciones de validación

DBCC CHECKALLOC

DBCC CHECKFILEGROUP

DBCC CHECKCATALOG

DBCC CHECKIDENT

DBCC CHECKCONSTRAINTS

DBCC CHECKTABLE

DBCC CHECKDB

 

Instrucciones de mantenimiento

DBCC CLEANTABLE

DBCC INDEXDEFRAG

DBCC DBREINDEX

DBCC SHRINKDATABASE

DBCC DROPCLEANBUFFERS

DBCC SHRINKFILE

DBCC FREEPROCCACHE

DBCC UPDATEUSAGE

Instrucciones varias

DBCC dllname (FREE)

DBCC TRACEOFF

DBCC HELP

DBCC TRACEON