DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 974985 - Dernière mise à jour: lundi 26 avril 2010 - Version: 2.0

 
Microsoft distribue les correctifs de Microsoft SQL Server 2005 sous la forme d'un fichier téléchargeable unique. Les correctifs étant cumulatifs, chaque nouvelle version contient tous les correctifs et tous les correctifs de sécurité inclus avec la précédente de SQL Server 2005 version du correctif.

Symptômes

Envisagez le scénario suivant :
  • Dans Microsoft SQL Server 2005, vous disposez d'une table qui contient une colonne avec le type de données XML.
  • Vous créez un index XML sur la colonne.
  • Vous exécutez une instruction ALTER INDEX avec la clause REBUILD de l'index XML.
  • Vous exécutez une instruction DBCC CHECKDB ou une instruction DBCC CHECKTABLE sur la table.
Dans ce scénario, altérations de données orphelines sont signalées et vous recevez message d'erreur suivantes :
Msg 8964, niveau 16, état 1, ligne 1
Erreur de table : objet ID 965578478, index ID 1, les ID 72057594042515456, unité d'allocation 72057594052083712 ID (type de données LOB) de partition. Le nœud de données hors ligne à page (1:569), slot 0, le texte 1881079808 ID n'est pas référencé.

Il existe des 3 lignes dans les pages 1 pour objet «sys.xml_index_nodes_ <xxxxxx>».

Résolution

Le correctif de ce problème a été publié tout d'abord en mise à jour cumulative 6 pour SQL Server 2005 Service Pack 3. Pour plus d'informations sur ce package de mise à jour cumulative, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
974648  (http://support.microsoft.com/kb/974648/LN/ ) Package de mise à jour cumulative 6 pour SQL Server 2005 Service Pack 3
Remarque Les versions étant cumulatifs, chaque nouvelle version de correctif contient l'intégralité des correctifs et tous les correctifs de sécurité inclus avec la précédente de SQL Server 2005 version du correctif. Microsoft vous recommande d'envisager l'application de la dernière version de correctif qui comprendra ce correctif. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
960598  (http://support.microsoft.com/kb/960598/LN/ ) Versions de SQL Server 2005 publiées après SQL Server 2005 Service Pack 3
Microsoft SQL Server 2005 les correctifs sont créés pour les service packs pour SQL Server spécifiques. Vous devez appliquer un correctif SQL Server 2005 Service Pack 3 à une installation de SQL Server 2005 Service Pack 3. Par défaut, aucun correctif fourni dans un service pack SQL Server est inclu dans le prochain service pack SQL Server.

Contournement

Pour contourner ce problème, appliquez l'une des méthodes suivantes :

Méthode 1

Supprimer et recréer l'index XML au lieu d'exécuter l'instruction ALTER INDEX :

--------START OF THE SCRIPT--------------

----------Drop table named temp if it exists----------------
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[temp]') AND type in (N'U'))
DROP TABLE [dbo].[temp]


------------Create a tenp table to keep the information about existing XML indexes------------
Create table Temp (object_id int, index_id int, object_name varchar(256), IndexName nvarchar(256),Name nvarchar(256),
Secondary_type_desc nvarchar (240),Secondary_type char(1),Using_Xml_index_id int)


------------Insert XML index information into temp table----------------
Insert Into Temp
SELECT i.object_id,i.index_id,object_name(i.object_id)as object_name, i.name as IndexName
,c.name,i.Secondary_type_desc,i.Secondary_type,i.using_xml_index_id 
FROM sys.xml_indexes AS i
INNER JOIN sys.index_columns AS ic 
ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns AS c 
ON ic.object_id = c.object_id AND c.column_id = ic.column_id
Order by i.index_id



-------------Adding a new column for Manipulation------------
Alter table temp add IndName varchar(256) NULL;


-------------Updating value in column for Manipulation------------

Update Temp Set Secondary_type_desc = 'APRIMARY' Where Secondary_type_desc IS NULL



-------------Updating value in column for Manupilation------------

Update a set a.IndName = b.IndexName from temp a inner join temp b on a.using_xml_index_id = b.index_id and a.object_id = b.object_id



-------------Set Ansi_padding ON to create XML indexes------------

Set Ansi_Padding ON



--------Cursor to Drop existing XML Indexes------------

DECLARE XMLIndexDrop CURSOR 
READ_ONLY
FOR select 'Drop Index '+ IndexName +' on '+Object_name from temp where Secondary_type is null
DECLARE @DropString varchar(400)

OPEN XMLIndexDrop
FETCH NEXT FROM XMLIndexDrop INTO @DropString
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
exec(@DropString)
PRINT @DropString
END
FETCH NEXT FROM XMLIndexDrop INTO @DropString
END

CLOSE XMLIndexDrop

DEALLOCATE XMLIndexDrop
GO



--------Cursor to Create XML Indexes-------------

DECLARE XMLIndexCreate CURSOR 
READ_ONLY 
FOR Select 'CREATE ' + Case when Secondary_type_desc = 'APRIMARY' then 'PRIMARY XML'
Else 'XML' END + ' INDEX ' + IndexName +' on ' + object_name + ' ('+name+')'
+ Case when Secondary_type_desc = 'APRIMARY' then ''
Else ' USING XML INDEX ' + IndName + ' FOR ' + Secondary_type_desc END 
From Temp Order By Secondary_type_desc Asc

DECLARE @CreateString varchar(400)
OPEN XMLIndexCreate

FETCH NEXT FROM XMLIndexCreate INTO @CreateString 
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
exec(@CreateString )
PRINT @CreateString 
END
FETCH NEXT FROM XMLIndexCreate INTO @CreateString 
END


CLOSE XMLIndexCreate
DEALLOCATE XMLIndexCreate
GO


--------Closing the cursor--------------


--------END OF THE SCRIPT-------------- 



Méthode 2

Supprimer tous les index XML, puis exécutez l'instruction ALTER INDEX sur les index de la table. Ensuite, recréer les index XML.

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section "S'applique à".

Références

Pour plus d'informations sur le modèle de service incrémentiel pour SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
935897  (http://support.microsoft.com/kb/935897/ ) Un modèle de service incrémentiel est disponible à partir de l'équipe SQL Server pour la fourniture des correctifs logiciels pour les problèmes signalés
Pour plus d'informations sur l'obtention de SQL Server 2005 Service Pack 3, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
913089  (http://support.microsoft.com/kb/913089/ ) Comment faire pour obtenir la dernière pack de service pour SQL Server 2005
Pour plus d'informations sur les nouvelles fonctionnalités dans SQL Server 2005 Service Pack 3 (SP3) et sur les améliorations apportées à SQL Server 2005 SP3, reportez-vous au site Web de Microsoft à l'adresse suivante :
http://go.microsoft.com/fwlink/?LinkId=131442 (http://go.microsoft.com/fwlink/?LinkId=131442)
Pour plus d'informations sur le modèle d'affectation de noms pour les mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
822499  (http://support.microsoft.com/kb/822499/ ) Nouveau modèle d'affectation de noms pour les packages de mise à jour logicielle de Microsoft SQL Server
Pour plus d'informations sur la terminologie de mise à jour de logiciel, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
824684  (http://support.microsoft.com/kb/824684/ ) Description de la terminologie standard utilisée pour décrire les mises à jour logicielles Microsoft

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
Mots-clés : 
kbmt kbsurveynew kbexpertiseadvanced kbqfe kbfix KB974985 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 974985  (http://support.microsoft.com/kb/974985/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store