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

Mardi, mai 10, 2011
By David Baffaleuf in SQL Server (dbaffaleuf@capdata-osmozium.com) [71 article(s)]

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 :




Cliquer pour partager cet article sur Viadeo
Cliquer sur "CAPTURER" pour sauvegarder cet article dans Evernote Clip to Evernote

Tags: ,

Leave a Reply