Errore DBCC 2570 in SQL Server 2005 e versioni successive per la risoluzione dei problemi

Traduzione articoli Traduzione articoli
Identificativo articolo: 923247 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

In questa pagina

INTRODUZIONE

In questo articolo vengono descritti 2570, qual Ŕ la causa dell'errore di SQL Server l'errore e come risolvere il problema.

Informazioni

Controlli DATA_PURITY

In SQL Server 2005, una nuova opzione, DATA_PURITY, Ŕ stato aggiunto a i comandi DBCC CHECKDB e DBCC CHECKTABLE. Quando si esegue un DBCC CHECKDB o il comando DBCC CHECKTABLE con questa opzione Ŕ attivata, eseguire il comando convalide "purezza di dati" in ogni valore della colonna in tutte le righe della tabella o tabelle del database. Questi nuovi controlli vengono eseguiti per garantire che il sono validi i valori memorizzati nelle colonne (vale a dire che i valori non sono fuori intervallo per il dominio associato al tipo di dati della colonna). Il natura della convalida eseguita varia a seconda del tipo di dati della colonna. Il elenco non esaustivo di seguito fornisce alcuni esempi:
Riduci questa tabellaEspandi questa tabella
Tipo di dati della colonnaTipo di convalida dei dati eseguita
Carattere UnicodeLa lunghezza dei dati deve essere un multiplo di 2.
Data/oraIl campo giorni deve essere compreso tra 1753 1 gen e il 31 dicembre 9999. Il campo ora deve essere antecedente a "11:59:59:999 PM".
Reale e FloatControllare l'esistenza di valido valori a virgola mobile, quali SNAN, QNAN, NINF, ND, PD, PINF.
Non tutti i tipi di dati vengono verificati la validitÓ della colonna dati. Solo quelli in cui Ŕ possibile disporre di un valore memorizzato non Ŕ compreso intervallo vengono controllati. Ad esempio, il tipo di dati tinyint compreso nell'intervallo tra 0 e 255 e memorizzato in un a byte singolo (che Ŕ possibile memorizzare solo i valori da 0 a 255), quindi controllare il valore non Ŕ necessario.

Non sono attivati i controlli di convalida dei dati di purezza automaticamente per tutti i database. I controlli sono attivati in base alle diverse fattori:
  • Per i database creati in SQL Server 2005 e versioni successive, tali controlli sono attivati per impostazione predefinita e non possono essere disabilitati in modo che l'utilizzo dell'opzione DATA_PURITY durante l'esecuzione di un comando DBCC CHECKDB o DBCC CHECKTABLE Ŕ irrilevante.
  • Per i database creati nelle versioni precedenti di SQL Server, ad esempio SQL Server 2000, SQL Server 7.0 e versioni aggiornate a SQL Server 2005, questi controlli non sono abilitati per impostazione predefinita. AffinchÚ questi controlli deve essere eseguita, Ŕ necessario specificare l'opzione DATA_PURITY in DBCC CHECKDB o Comando DBCC CHECKTABLE. Ci˛ pu˛ comportare due cose:
    • Il comando DBCC termina e segnala che il database Ŕ pulito, inclusi tutti i controlli di purezza dei dati. Questo fatto viene registrato nel intestazione del database. Tutti i comandi DBCC CHECKDB o DBCC CHECKTABLE successivi esecuzioni noteranno queste informazioni e verranno eseguita automaticamente i dati verifica la purezza, come accade per i database creati in SQL Server 2005. In altre parole, una volta un database Ŕ noto come "pulito", i controlli di purezza di dati sono eseguite sempre.
    • Il comando DBCC completa ma segnala problemi su dati incoerenti. Se questo Ŕ il caso, Ŕ necessario pulire il database rimuovere le incoerenze e quindi provare a eseguire di nuovo il comando DBCC. SarÓ necessario specificare l'opzione DATA_PURITY per il comando DBCC fino al database risulta essere pulita.
  • Se viene specificata l'opzione PHYSICAL_ONLY quando il DBCC Viene eseguito il comando CHECKDB o DBCC CHECKTABLE, i controlli di purezza di dati non sono eseguita.

SINTOMI

Dati non validi o all'intervallo potrebbero sono stati archiviati nella SQL Database di server nelle versioni precedenti per i seguenti motivi:
  • Dati non validi sono presenti nell'origine durante l'utilizzo di massa inserire i metodi, ad esempio l'utilitÓ bcp.
  • Dati non validi Ŕ stati passati tramite chiamate RPC evento a SQL Server.
  • Altre potenziali cause di danneggiamento di dati fisici a sinistra il valore della colonna in uno stato non valido.
Se si dispone di dati non validi in una colonna di una tabella, si potrebbero verificare problemi in base al tipo di operazione che viene eseguita con i dati non validi. Tuttavia, Ŕ anche possibile che non verrÓ visualizzato alcun problema e i dati non validi non verranno individuati fino all'esecuzione di un comando DBCC CHECKDB o DBCC CHECKTABLE in SQL Server 2005 e versioni successive.

Alcuni dei sintomi Ŕ possibile che si verifichi a causa della presenza di dati non validi includono (ma non limitato a):
  • Le violazioni di accesso o altri tipi di eccezioni durante l'esecuzione di query su colonna interessata.
  • Risultati non corretti restituiti dalla query eseguite il colonna interessata.
  • Errori o problemi quando vengono create statistiche contro le colonne interessate.
  • Messaggi di errore simile al seguente:
    MSG 9100, Livello 23, stato 2, riga 1 possibile danneggiamento dell'indice rilevato. Eseguire DBCC CHECKDB.

Report di problema DATA_PURITY

Quando si esegue un comando DBCC CHECKDB o DBCC CHECKTABLE con l'opzione DATA_PURITY (o la purezza dei dati vengono eseguiti controlli automaticamente), e dati non validi non esistono nelle tabelle selezionate per il DBCC comandi, l'output DBCC include altri messaggi che indicano il problemi con i dati. Alcuni messaggi di errore di esempio che indicano la purezza dei dati i problemi sono illustrati di seguito:
Risultati DBCC per "account_history".
MSG 2570, livello 16, stato 2, riga 1
Pagina (1:1073) slot 33 nell'oggetto ID 1977058079, ID di indice 0, partizione ID 129568478265344, unitÓ di allocazione ID 129568478265344 (tipo "dei dati nella riga"). Colonna "account_name_japan" valore non rientra nell'intervallo per il tipo di dati "nvarchar". Aggiornare la colonna a un valore valido.
MSG 2570, livello 16, stato 2, riga 1
Pagina (1:1156), slot 120 nell'oggetto ID 1977058079, ID di indice 0, partizione ID 129568478265344, ID unitÓ di allocazione 129568478265344 (tipo "Nella riga dei dati"). Valore della colonna "account_name_japan" Ŕ fuori nell'intervallo valido per il tipo di dati "nvarchar". Aggiornare la colonna a un valore valido.
Non esiste sono 153137 righe nelle pagine di 1080 per oggetto "account_history".
CHECKDB trovato 0 errori di allocazione e 338 coerenza nella tabella "account_history" (oggetto ID 1977058079).
CHECKDB trovato 338 e gli errori di allocazione 0 errori di coerenza nel database 'BadUnicodeData'.
Esecuzione di DBCC completata. Se sono stati creati messaggi di errore, contattare l'amministratore di sistema.
Risultati DBCC per 'table1'.
MSG 2570, livello 16, Stato 3, riga 1
Pagina (1:154), slot 0 nell'oggetto 2073058421 ID, ID di indice 0, partizione ID 72057594038321152, ID 72057594042318848 (tipo di unitÓ di allocazione "Nella riga dati"). Valore della colonna "col2" non rientra nell'intervallo per il tipo di dati "reale". Aggiornare la colonna a un valore valido.
Esistono quattro righe in 2 pagine per oggetto "table1".
CHECKDB trovato errori di allocazione 0 e 1 coerenza in tabella "table1" (object ID 2073058421).
CHECKDB trovato 0 errori di allocazione e gli errori di 1 coerenza nel database 'realdata'. Esecuzione di DBCC completata. If Errore di stampa DBCC messaggi, contattare l'amministratore di sistema.
Risultati DBCC per "table2".
MSG 2570, livello 16, Stato 3, riga 1
Pagina (1:155), slot 0 nell'oggetto 2105058535 ID, ID di indice 0, partizione ID 72057594038452224, ID 72057594042449920 (tipo di unitÓ di allocazione "Nella riga dati"). Valore della colonna "col2" non rientra nell'intervallo per il tipo di dati "decimale". Aggiornare la colonna a un valore valido.
Vi sono 4 righe in 1 pagine per oggetto "table2".
CHECKDB trovato errori di allocazione 0 e 1 coerenza in tabella "table2" (object ID 2105058535).
CHECKDB trovato 0 errori di allocazione e gli errori di 1 coerenza nel database 'realdata'. Esecuzione di DBCC completata. If Errore di stampa DBCC messaggi, contattare l'amministratore di sistema.
Risultati DBCC per "tabella3".
MSG 2570, livello 16, Stato 3, riga 1
Pagina (1:157), slot 0 nell'oggetto 2121058592 ID, ID di indice 0, partizione ID 72057594038517760, ID 72057594042515456 (tipo di unitÓ di allocazione "Nella riga dati"). Valore della colonna "col2" non rientra nell'intervallo per il tipo di dati "datetime". Aggiornare la colonna a un valore valido.
Vi sono 3 righe in 1 pagine per oggetto "tabella3".
CHECKDB trovato errori di allocazione 0 e 1 coerenza in tabella 'tabella3' (object ID 2121058592).
CHECKDB trovato 0 errori di allocazione e gli errori di 1 coerenza nel database 'realdata'. Esecuzione di DBCC completata. If Errore di stampa DBCC messaggi, contattare l'amministratore di sistema.
Per ogni riga che contiene un valore di colonna non valido, un errore 2570 viene generato.

Risoluzione del problema di purezza di dati

Gli errori 2570 non possono essere riparati utilizzando DBCC repair opzioni. PerchÚ Ŕ Impossibile per DBCC determinare il valore deve utilizzato per sostituire il valore della colonna non valido. Pertanto, deve essere il valore della colonna aggiornata manualmente.

Per eseguire un aggiornamento manuale, Ŕ necessario individuare la riga che presenta il problema. Esistono due modi per ottenere questo risultato.
  • Eseguire una query sulla tabella che contiene il valori non validi per trovare le righe che contengono valori non validi.
  • Utilizzare le informazioni di errore 2570 per identificare il righe che presentano un valore non valido.
Verranno illustrati entrambi i metodi in dettaglio di seguito, utilizzando esempi per trovare le righe contenenti dati non validi.

Una volta individuato il riga corretta, deve essere effettuata sul nuovo valore che verrÓ utilizzato per una decisione sostituire i dati esistenti non validi. La presente decisione deve essere effettuata con molta attenzione in base all'intervallo di valori validi per l'applicazione, nonchÚ le senso logico che tale riga di dati. Sono disponibili opzioni che si dispone di:
  • Se si conosce il valore deve essere, impostarlo su che valore specifico.
  • Impostare un valore predefinito accettabile.
  • Impostare il valore della colonna su NULL.
  • Impostare il valore della colonna al valore massimo o minimo per che tipo di dati della colonna.
  • Se si ritiene che la riga specifica non Ŕ di qualsiasi uso senza un valore valido per la colonna, Ŕ possibile eliminare tale riga completamente.

Ricerca di righe con valori non validi mediante query T-SQL

Il tipo di query Ŕ necessario eseguire per trovare le righe che presentano i valori non validi varia a seconda del tipo di dati della colonna che ha segnalato un problema. Se si osserva il messaggio di errore 2570, si noteranno due elementi importanti dell' informazioni che verranno a tale scopo. Nell'esempio seguente, la colonna "account_name_japan" valore non rientra nell'intervallo per il tipo di dati "nvarchar." Siamo in grado di Consente di identificare facilmente la colonna con il problema, nonchÚ il tipo di dati di colonna coinvolto. In questo modo, una volta si conoscono i dati di tipo e la colonna coinvolti, si possibile formulare la query per trovare le righe che contengono valori non validi per tale colonna, selezionare le colonne necessarie per identificare la riga (come predicati una clausola WHERE) per qualsiasi ulteriore aggiornamento o eliminazione.

Tipo di dati Unicode:
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan 
FROM account_history
WHERE DATALENGTH(account_name_japan) % 2 != 0

Tipo di dati float:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from the CHECKDB output

SELECT col1, col2 FROM table1
WHERE col2<>0.0 AND (col2 < 2.23E-308 OR col2 > 1.79E+308) AND (col2 < -1.79E+308 OR col2 > -2.23E-308)

Tipo di dati real:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from -- the CHECKDB output

SELECT col1, col2 FROM testReal 
WHERE col2<>0.0 AND (col2 < CONVERT(real,1.18E-38) OR col2 > CONVERT(real,3.40E+38)) AND (col2 < CONVERT(real,-3.40E+38) OR col2 > CONVERT(real,-1.18E-38)) 
ORDER BY col1; -- checks for real out of range
Decimal e Numeric tipo di dati:
SELECT col1 FROM table2
WHERE col2 > 9999999999.99999 
OR col1 < -9999999999.99999
Tenere presente che Ŕ necessario regolare i valori in base al precisione e scala con cui Ŕ stata definita la colonna decimal o numeric. Nell'esempio precedente, la colonna Ŕ stata definita come col2 decimal(15,5).

Data ora tipo:
╚ necessario eseguire due query diverse per identificare le righe che contengono valori non validi per colonna di data/ora.
SELECT col1 FROM table3
WHERE col2 < '1/1/1753 12:00:00 AM' OR col2 > '12/31/9999 11:59:59 PM'

SELECT col1 FROM table3 WHERE
((DATEPART(ms,col2)+ (1000*DATEPART(s,col2)) + (1000*60*DATEPART(mi,col2)) + (1000*60*60*DATEPART(hh,col2)))/(1000*0.00333)) 
> 25919999

Ricerca di righe con valore non valido, utilizzando il percorso fisico:

╚ possibile utilizzare questo metodo se non riesci a trovare le righe di interesse utilizzando il metodo SQL T, indicato in precedenza. Nel messaggio di errore 2570 il viene stampata la posizione fisica della riga che contiene il valore non valido. Per esempio, osservare il seguente messaggio:
Pagina (1:157) slot 0 nell'oggetto ID 2121058592, ID di indice 0, partizione ID 72057594038517760, unitÓ di allocazione ID 72057594042515456 (tipo "dei dati nella riga"). Valore della colonna "col2" Ŕ fuori dell'intervallo per il tipo di dati "datetime". Aggiornare la colonna a un legale valore.
In questo messaggio, si noterÓ che le informazioni: pagina (1:157) slot 0. Si tratta di informazioni necessarie identificare la riga. Il FileId Ŕ 1. il PageInFile Ŕ 157 e il valore SlotId Ŕ 0. Dopo aver ottenuto queste informazioni si sarÓ necessario eseguire il comando, come illustrato di seguito:
DBCC TRACEON ( 3604 )
DBCC PAGE ( realdata , 1 , 157 , 3 )
Questo comando verrÓ stampato l'intero contenuto di una pagina. I parametri per la Comando DBCC PAGE sono:
  • nome del database
  • ID file
  • PageInFile
  • opzione di stampa
Una volta che si esegue questo comando, si noterÓ che di output contiene informazioni simili al seguente formato:
Slot 0 Offset 0x60 Length 19 Record Type = PRIMARY_RECORD Record
		  Attributes = NULL_BITMAP Memory Dump @0x44D1C060 00000000: 10001000 01000000
		  ffffffff ffffffff ?................ 00000010:
		  0200fc???????????????????????????????... Slot 0 Column 0 Offset 0x4 Length 4 col1 = 1Slot 0 Column 1 Offset 0x8 Length 8 col2 = Dec 31 1899 19:04PM Slot 1 Offset 0x73 Length 19 Record Type = PRIMARY_RECORD Record
		  Attributes = NULL_BITMAP Memory Dump @0x44D1C073 00000000: 10001000 02000000
		  0ba96301 f8970000 ?..........c..... 00000010:
		  0200fc???????????????????????????????... Slot 1 Column 0 Offset 0x4 Length 4
		  col1 = 2 Slot 1 Column 1 Offset 0x8 Length 8 col2 = Jul 8 2006 9:34PM Slot 2
		  Offset 0x86 Length 19 Record Type = PRIMARY_RECORD Record Attributes =
		  NULL_BITMAP Memory Dump @0x44D1C086 00000000: 10001000 03000000 0ba96301
		  f8970000 ?..........c..... 00000010: 0200fc???????????????????????????????...
		  Slot 2 Column 0 Offset 0x4 Length 4 col1 = 3 Slot 2 Column 1 Offset 0x8 Length
		  8 col2 = Jul 8 2006 9:34PM 
In questo output Ŕ possibile vedere chiaramente i valori della colonna per la riga di interesse. In questo caso, si necessario riga memorizzata nello slot 0 della pagina. Nel messaggio di errore si Ŕ certi tale col2 Ŕ quello con il problema. Pertanto, si pu˛ assumere il valore di col1 per Slot 0 e utilizzarlo come il predicato nella clausola WHERE dell'istruzione update istruzione o delete.

Avviso Si consiglia di utilizzare il primo metodo (ovvero, utilizzare T-SQL query per trovare le informazioni richieste). Utilizzare la pagina di DBCC comando solo come un ultima risorsa. Richiedere la massima cura durante l'utilizzo di questo comando in una produzione ambiente. Si consiglia di ripristinare il database di produzione in un test Server, quindi ottenere tutte le informazioni necessarie tramite DBCC PAGE e quindi eseguire il aggiornamenti sul server di produzione. Come sempre, accertarsi di mantenere una copia di backup pronta nel caso in cui qualcosa non funziona ed Ŕ necessario ripristinare una copia precedente di database.

Riferimenti

Per ulteriori informazioni sull'istruzione DBCC CHECKDB, vedere l'argomento "DBCC CHECKDB (Transact-SQL)" nel seguente Microsoft Developer Sito Web Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms176064.aspx
Per ulteriori informazioni sulla risoluzione dei problemi in SQL Server 2000, fare clic sul numero dell'articolo riportato di seguito per visualizzare il articolo della Microsoft Knowledge Base:
900335FIX: L'operazione di ripristino automatici del database SQL Server 2000 potrebbe non riuscire se l'indice contiene un tipo di dati FLOAT o un tipo di dati reali e questo tipo di dati contiene un valore NaN
Per ulteriori informazioni sugli eventi RPC, vedere il Argomento "Calling a Stored Procedure (OLE DB)" sul seguente sito Web MSDN:
aspx http://msdn2.microsoft.com/en-us/library/aa198358 (SQL.80)
Per ulteriori informazioni sui tipi di dati diversi, vedere il Argomento "Calling a Stored Procedure (OLE DB)" sul seguente sito Web MSDN:
http://msdn2.microsoft.com/en-us/library/ms187752.aspx
Per ulteriori informazioni sulle convenzioni di valore punto mobile, visitare il seguente sito Web Intel:
http://www.Intel.com/design/pentiumii/Manuals/243191.htm
Microsoft fornisce informazioni di contatto di terze parti per facilitare l'individuazione del supporto tecnico. Le informazioni di contatto modifica senza preavviso. Microsoft non garantire l'accuratezza delle informazioni per contattare altri produttori.

ProprietÓ

Identificativo articolo: 923247 - Ultima modifica: giovedý 22 marzo 2012 - Revisione: 1.0
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Standard Edition for Small Business
Chiavi:á
kbtshoot kbexpertiseadvanced kbsql2005engine kbinfo kbmt KB923247 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: 923247
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