0

Msg 2508, Level 16, State 1: the In-Row data %% for object %% is incorrect

twitterlinkedinmail

Un petit article pour parler de cette erreur assez courante qui se rencontre soit avec des versions antérieures à SQL Server 2005, soit à la suite d’une migration. Elle n’est pas très grave et plutôt bien décrite puisque la solution est indiquée dans le message (“Run DBCC UPDATEUSAGE”).

dbcc checkdb('MvxRef') with no_infomsgs, all_errormsgs

Msg 2508, Niveau 16, État 1, Ligne 1
Le nombre In-row data USED page pour l'objet 'Client_NULL', ID d'index 0,
ID de partition 29725599596544,ID d'unité d'allocation 29725599596544
(type In-row data) est incorrect. Exécutez DBCC UPDATEUSAGE.
CHECKDB a trouvé 0 erreurs d'allocation et 1 erreurs de cohérence
dans la table 'Client_NULL' (ID d'objet 453576654).
CHECKDB a trouvé 0 erreurs d'allocation et 1 erreurs de cohérence
dans la base de données 'MvxRef'.

Lorsque DBCC CHECKDB arrive sur un objet en particulier, il se constitue une synthèse des informations qui décrivent la table, et notamment le décompte de pages totales allouées, et de pages utilisées pour l’objet. Si une des valeurs est négative, le message 2508 est renvoyé avec en paramètre une indication sur quelle valeur est négative (RSVD pour le nombre total de pages, USED pour le nombre de pages utilisées). La valeur négative en question est remontée par la DMV sys.allocation_units:

select allocation_unit_id, type_desc, container_id,total_pages, used_pages
from sys.allocation_units AU inner join sys.partitions P on AU.container_id = P.hobt_id
and P.object_id = object_id('Client_NULL')
allocation_unit_id   type_desc        container_id         total_pages    used_pages  
-------------------- ---------------- -------------------- -------------- ------------
29725599596544       IN_ROW_DATA      29725599596544       0              -104         

Il se trouve que la table a été vidée de son contenu entre deux DBCC CHECKDB, et l’erreur n’avait pas été détectée immédiatement après la migration. Un petit coup de DBCC UPDATEUSAGE sur cette table:

dbcc updateusage('MvxRef','Client_NULL')
DBCC UPDATEUSAGE : nombre mis à jour pour la table 'Client_NULL'
(index 'Client_NULL', partition 1) :
 Pages USED (In-row Data) : changement de (-104) pages en (0) pages.
Exécution de DBCC terminée. Si DBCC vous a adressé des messages d'erreur,
contactez l'administrateur système.

Et tout est rentré dans l’ordre:

select allocation_unit_id, type_desc, container_id,total_pages, used_pages
from sys.allocation_units AU inner join sys.partitions P on AU.container_id = P.hobt_id
and P.object_id = object_id('Client_NULL')
allocation_unit_id   type_desc     container_id         total_pages   used_pages
-------------------- ------------- -------------------- ------------- ------------
29725599596544       IN_ROW_DATA   29725599596544       0             0           

A+. David B.

Continuez votre lecture sur le blog :

twitterlinkedinmail

David Baffaleuf

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.