FIX: Istruzione A "DBCC CHECKDB" o un'istruzione "DBCC CHECKTABLE" Segnala errori dopo ricostruire un indice XML in SQL Server 2005

Traduzione articoli Traduzione articoli
Identificativo articolo: 974985 - Visualizza i prodotti a cui si riferisce l?articolo.
Microsoft distribuisce le correzioni Microsoft SQL Server 2005 come un unico file scaricabile. Poiché le correzioni sono cumulative, ogni nuova versione contiene tutti gli hotfix e tutte le correzioni di protezione fornite con SQL Server 2005 precedente correggere rilascio.
Espandi tutto | Chiudi tutto

Sintomi

Si consideri il seguente scenario:
  • In SQL Server 2005, si dispone di una tabella contenente una colonna con il tipo di dati XML.
  • Creare un indice XML nella colonna.
  • Si esegue un'istruzione ALTER INDEX con la clausola REBUILD sull'indice XML.
  • È necessario eseguire un'istruzione DBCC CHECKDB o un'istruzione DBCC CHECKTABLE nella tabella.
In questo scenario, vengono segnalati dati orfano danneggiamenti e viene visualizzato il seguente messaggio di errore:
Msg 8964, livello 16, stato 1, riga 1
Errore di tabella: oggetto 965578478 ID, ID 1 l'indice, partizionare 72057594042515456 ID, alloc unit ID 72057594052083712 (tipo di dati LOB). Il nodo dati disattivare righe alla pagina (1:569), slot 0, testo 1881079808 ID non viene fatto riferimento.

Non esistono 3 righe in 1 pagine per l'oggetto "sys.xml_index_nodes_ <xxxxxx>".

Risoluzione

La correzione di questo problema è stata rilasciata prima nell'aggiornamento cumulativo 6 per SQL Server 2005 Service Pack 3. Per ulteriori informazioni su questo pacchetto di aggiornamento cumulativo, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
974648Pacchetto di aggiornamento cumulativo 6 per SQL Server 2005 Service Pack 3
Nota Poiché le generazioni sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e tutte le correzioni di protezione fornite con SQL Server 2005 precedente correggere rilascio. Si consiglia di considerare l'applicazione alla versione più recente di correzione che contiene questo aggiornamento rapido (hotfix). Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
960598Versioni di SQL Server 2005 rilasciate dopo il rilascio di SQL Server 2005 Service Pack 3
Microsoft SQL Server 2005 gli hotfix vengono creati per specifici i service pack di SQL Server. È necessario applicare un hotfix di SQL Server 2005 Service Pack 3 per un'installazione di SQL Server 2005 Service Pack 3. Per impostazione predefinita, qualsiasi hotfix fornito in un service pack di SQL Server è incluso nel prossimo service pack di SQL Server.

Workaround

Per ovviare al problema, utilizzare uno dei metodi descritti di seguito:

Metodo 1

Eliminare e quindi ricreare l'indice XML anziché eseguire l'istruzione 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-------------- 



Metodo 2

Eliminare tutti gli indici XML e quindi eseguire l'istruzione ALTER INDEX degli indici nella tabella. Quindi, ricreare gli indici XML.

Status

Microsoft ha confermato che si tratta di un problema con i prodotti elencati nella sezione "Si applica a".

Riferimenti

Per ulteriori informazioni su modello di manutenzione incrementale per SQL Server, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
935897Un modello di manutenzione incrementale è disponibile dal team di SQL Server per distribuire gli aggiornamenti rapidi per i problemi segnalati
Per ulteriori informazioni su come ottenere SQL Server 2005 Service Pack 3, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
913089Come ottenere il service pack più recente per SQL Server 2005
Per ulteriori informazioni sulle nuove funzionalità di SQL Server 2005 Service Pack 3 (SP3) e sui miglioramenti apportati in SQL Server 2005 SP3, visitare il seguente sito Web Microsoft:
http://go.microsoft.com/fwlink/?LinkId=131442
Per ulteriori informazioni su schema di denominazione degli aggiornamenti di SQL Server, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
822499Nuovo schema di denominazione per i pacchetti di aggiornamento software Microsoft SQL Server
Per ulteriori informazioni sulla terminologia di aggiornamento software, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
824684Descrizione della terminologia standard utilizzata per descrivere gli aggiornamenti software Microsoft

Proprietà

Identificativo articolo: 974985 - Ultima modifica: lunedì 26 aprile 2010 - Revisione: 2.0
Le informazioni in questo articolo si applicano a:
  • 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
Chiavi: 
kbmt kbsurveynew kbexpertiseadvanced kbqfe kbfix KB974985 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 974985
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com