Cierto día, al aplicar mantenimiento a una Base de Datos, me apareció el siguiente error:

Executed as user: NT AUTHORITY\SYSTEM. The In-row data RSVD page count for object "TABLA", index ID 0, partition ID 2372087250944, alloc unit ID 2372087250944 (type In-row data) is incorrect. Run DBCC UPDATEUSAGE. [SQLSTATE 42000] (Error 2508)

Como sucede cuando pensamos «es mi primera vez» no supe que hacer, mas que investigar, como preámbulo debo decir que se había ejecutado un defrag y reindex sobre la base de datos en cuestión.

 

Definición de Microsoft: DBCC UPDATEUSAGE 'BaseData'

«Informa sobre imprecisiones de recuento de filas y páginas de las vistas de catálogo y las corrige. Estas imprecisiones pueden causar la devolución de informes incorrectos sobre uso de espacio por parte del procedimiento almacenado del sistema sp_spaceused

DBCC UPDATEUSAGE corrige los recuentos de las filas, las páginas usadas, las páginas reservadas, las páginas hoja y las páginas de datos de cada partición en una tabla o índice. Si no hay imprecisiones en las tablas del sistema, DBCC UPDATEUSAGE no devuelve datos. Si se encuentran y se corrigen imprecisiones y no se usa WITH NO_INFOMSGS, DBCC UPDATEUSAGE devuelve las filas y las columnas que se están actualizando en las tablas del sistema.

Después de ejecutar nos mostro las tablas y sus cambios en paginado

        DATA pages (In-row Data): changed from (43) to (47) pages.
        USED pages (In-row Data): changed from (46) to (50) pages.

y localizando la tabla que marco error

DBCC UPDATEUSAGE:
Usage counts updated for table ‘TABLA’ (index ‘TABLA’, partition 1):
RSVD pages (In-row Data): changed from (-1) to (0) pages.
Donde aparece PAGES(-1) corrigiendo a PAGES(0)
y con esos se soluciono el detalle.

Corrigiendo asignacion de espacio

Para ejecutar en SQL Management

DBCC UPDATEUSAGE (DBName,'Schema.TableName'); GO

para un simple objeto

DBCC UPDATEUSAGE (0); GO

Recomendaciones Microsoft

  • No ejecute DBCC UPDATEUSAGE de forma rutinaria, ya que SQL Server mantiene los metadatos en la mayoría de las circunstancias. DBCC UPDATEUSAGE debe ejecutarse según sea necesario, por ejemplo, si sospecha que sp_spaceused devuelve valores incorrectos. DBCC UPDATEUSAGEEl parámetro puede tardar algún tiempo en ejecutarse en tablas o bases de datos de gran tamaño.
  • Considere ejecutar DBCC UPDATEUSAGE habitualmente, por ejemplo cada semana, solo si la base de datos sufre con frecuencia modificaciones del Lenguaje de definición de datos (DDL), por ejemplo, con las instrucciones CREATE, ALTER o DROP.