Odstraňování chyby DBCC 2570 SQL Server 2005

Překlady článku Překlady článku
ID článku: 923247 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

ÚVOD

Tento článek popisuje chybu aplikace SQL Server 2570, co způsobuje chyby a jak vyřešit problém.

Další informace

DATA_PURITY kontroly

SQL Server 2005 byla přidána nová možnost, DATA_PURITY, k příkazy DBCC CHECKDB a DBCC CHECKTABLE. Po spuštění DBCC CHECKDB nebo příkazu DBCC CHECKTABLE tato možnost povolena, bude provádění příkazu "data čistoty" ověření na každou hodnotu sloupce ve všech řádcích tabulky, nebo tabulky v databázi. Tyto nové kontroly se provádějí, aby jsou platné hodnoty, které jsou uloženy ve sloupcích (to znamená, že hodnoty nejsou mimo mimo rozsah pro doménu, spojené s typem dat sloupce). Na povaha ověření provést, závisí na typu dat sloupce. Na Následující nevyčerpávající seznam poskytuje několik příkladů:
Zmenšit tuto tabulkuRozšířit tuto tabulku
Typ dat sloupceTyp ověřování dat
Znak UnicodeDélka dat by měla být násobek 2.
Datum a časPole dny by měla být mezi 1. leden 1753 a 31. prosince 9999. Pole Doba musí být dřívější než "11:59:59:999 PM".
Skutečné a uvolnitKontrola existence je neplatný hodnoty s plovoucí čárkou, například SNAN, QNAN, NINF, Ks, PD, PINF.
Všechny datové typy jsou kontrolovány na platnost sloupce data. Pouze ty, kde je možné mít uloženou hodnotu, která je mimo rozsah jsou kontrolovány. Například tinyint Typ dat má platný rozsah od 0 do 255 a je uložen v jeden bajt (který lze uložit pouze hodnoty od 0 do 255), tak kontrola hodnoty není nutné.

Ověřovací kontroly čistoty dat nejsou povoleny. automaticky pro všechny databáze. Kontroly jsou povoleny v závislosti na několika faktory:
  • Pro databáze vytvořené v aplikaci SQL Server 2005 jsou tyto kontroly ve výchozím nastavení povoleno a nelze je zakázat, tak na používání možnosti DATA_PURITY Při provádění příkazu DBCC CHECKDB nebo DBCC CHECKTABLE irelevantní.
  • Pro databáze vytvořené v předchozích verzích serveru SQL Server, jako je například SQL Server 2000, SQL Server 7.0 a verze inovován na server SQL Server 2005, tyto kontroly nejsou ve výchozím nastavení povoleny. Chcete-li, aby tyto kontroly Chcete-li provést, musíte zadat možnost DATA_PURITY DBCC CHECKDB nebo Příkazu DBCC CHECKTABLE. Výsledkem může být dvě věci:
    • Dokončení příkazu DBCC a ohlásí, že databáze je čistý, včetně všech dat čistoty kontrol. Tato skutečnost je zaznamenána v záhlaví databáze. Všechny následné příkazu DBCC CHECKDB nebo DBCC CHECKTABLE zjišťování všimnout informací a automaticky provede data kontroly čistoty, jako by se stalo pro databáze vytvořené na serveru SQL Server 2005. V kontroly čistoty data jsou jiná slova, jakmile databáze je znám jako "čistou" vždy provést.
    • Dokončení příkazu DBCC, ale zprávy o potížích nekonzistentní data. Pokud se jedná o tento případ, budete muset vyčistit databázi neodstraňují a potom se pokuste o spuštění příkazu DBCC znovu. Je třeba zadat možnost DATA_PURITY příkazu DBCC až databáze je hlášena jako čisté.
  • Pokud je zadán parametr PHYSICAL_ONLY při DBCC CHECKDB nebo DBCC CHECKTABLE příkaz proveden, kontroly čistoty dat provést.

PŘÍZNAKY

Mohou mít neplatné nebo mimo rozsah dat uloženy v SQL Server databáze starší z následujících důvodů:
  • Neplatná data nebyla k dispozici ve zdroji při používání hromadných Vložte metod, jako je například nástroj bcp.
  • Byla předána neplatná data prostřednictvím události volání RPC SQL Server.
  • Jiné potenciální příčiny poškození fyzické datové vlevo Hodnota sloupce v neplatném stavu.
Pokud máte neplatná data ve sloupci tabulky, může problémy v závislosti na typu operace, která bude provedena Neplatná data. Je však také možné, že nebude zobrazovat žádný problém, a Neplatná data nebudou vyhledána až do provedení DBCC CHECKDB nebo Příkaz DBCC CHECKTABLE serveru SQL Server 2005.

Některé z příznaků je kvůli přítomnosti neplatná data všimnout zahrnuje (ale není omezen do):
  • Narušení přístupu nebo jiné typy výjimek při spuštění dotazů proti příslušném sloupci.
  • Nesprávné výsledky dotazů, které jsou prováděny ovlivněný sloupec.
  • Chyby nebo problémy v případě, že statistiky jsou vytvářeného proti ovlivněné sloupce.
  • Například následující chybové zprávy:
    Zpráva 9100, Úroveň 23, stav 2 řádek 1 možná bylo zjištěno poškození indexu. Spustit DBCC CHECKDB.

Hlášení problému DATA_PURITY

Po spuštění příkazu DBCC CHECKDB nebo DBCC CHECKTABLE s povolena možnost DATA_PURITY (nebo spuštění kontroly čistoty dat automaticky) a existuje neplatná data v tabulkách, kontroluje DBCC příkazy DBCC zahrnuje další zprávy, které označují problémy s daty. Některé chybové zprávy vzorku, které označují čistota dat problémy, jsou uvedeny níže:
Výsledky DBCC "account_history".
Msg 2570, úroveň 16, stav 2, řádek 1
Stránky (1:1073) v objektu ID 1977058079 ID indexu 0, oddíl ID 129568478265344, patice 33 jednotka ALLOC ID 129568478265344 (typ "V řádku dat"). Sloupec "account_name_japan" hodnota je mimo rozsah datového typu "nvarchar". Aktualizujte sloupec právní hodnotu.
Msg 2570, úroveň 16, stav 2, řádek 1
Stránky (1:1156), slot 120 v objektu ID 1977058079, ID indexu 0, oddíl ID 129568478265344, alloc ID jednotky 129568478265344 (typ "V řádku dat"). "Account_name_japan" hodnota sloupce je mimo rozsah datového typu "nvarchar". Aktualizujte sloupec právní hodnotu.
Existuje jsou 153137 řádky na stránkách 1080 pro objekt "account_history".
CHECKDB nalezen 0 přidělení chybám a 338 konzistence v tabulce "account_history" (objekt ID 1977058079).
CHECKDB nalezené chyby alokace 0 a 338 konzistence chyby v databázi 'badunicodedata'.
Provádění DBCC dokončeno. DBCC tisku zprávy došlo k chybě, obraťte se na vašeho správce systému.
Výsledky DBCC "Tabulka1".
Msg 2570, úroveň 16, Stav 3, řádek 1
Stránky (1:154), v objektu ID 2073058421 patice 0, ID indexu 0, oddíl ID 72057594038321152, alloc jednotky ID 72057594042318848 (typ "V řádku dat"). "Sloupec2" hodnota sloupce je mimo rozsah datového typu "reálný". Aktualizujte sloupec právní hodnotu.
2 Stránky pro objekt neobsahuje 4 řádky "Tabulka1".
CHECKDB nalezené chyby přidělení 0 a 1 konzistence chyby v tabulky "Tabulka1" (objekt ID 2073058421).
CHECKDB nalezené chyby 0 alokace a 1 konzistence chyby v databázi 'realdata'. Provádění DBCC dokončeno. Pokud DBCC vytištěny chybové zprávy, obraťte se na vašeho správce systému.
Výsledky DBCC "Tabulka2".
Msg 2570, úroveň 16, Stav 3, řádek 1
Stránky (1:155), v objektu ID 2105058535 patice 0, ID indexu 0, oddíl ID 72057594038452224, alloc jednotky ID 72057594042449920 (typ "V řádku dat"). "Sloupec2" hodnota sloupce je mimo rozsah datového typu "desetinné". Aktualizujte sloupec právní hodnotu.
Existují 4 řádky 1 stránek pro objekt "Tabulka2".
CHECKDB nalezené chyby přidělení 0 a 1 konzistence chyby v Tabulka "Tabulka2" (objekt ID 2105058535).
CHECKDB nalezené chyby 0 alokace a 1 konzistence chyby v databázi 'realdata'. Provádění DBCC dokončeno. Pokud DBCC vytištěny chybové zprávy, obraťte se na vašeho správce systému.
Výsledky DBCC "Tabulka3".
Msg 2570, úroveň 16, Stav 3, řádek 1
Stránky (1:157), v objektu ID 2121058592 patice 0, ID indexu 0, oddíl ID 72057594038517760, alloc jednotky ID 72057594042515456 (typ "V řádku dat"). "Sloupec2" hodnota sloupce je mimo rozsah datového typu "datetime". Aktualizujte sloupec právní hodnotu.
Existují 3 řádky 1 stránek pro objekt "Tabulka3".
CHECKDB nalezené chyby přidělení 0 a 1 konzistence chyby v Tabulka "Tabulka3" (objekt ID 2121058592).
CHECKDB nalezené chyby 0 alokace a 1 konzistence chyby v databázi 'realdata'. Provádění DBCC dokončeno. Pokud DBCC vytištěny chybové zprávy, obraťte se na vašeho správce systému.
Pro Každý řádek, který obsahuje hodnotu sloupce je neplatné, chyba 2570 je generována.

Řešení problémů čistota dat

2570 Chyby nelze opravit pomocí libovolné opravě DBCC možnosti. Je to proto, že je nemožné pro DBCC určit, jaká hodnota by lze nahradit hodnotu sloupce je neplatné. Proto musí být hodnota sloupce aktualizovat ručně.

Chcete-li provést ruční aktualizaci, je nutné nalézt řádek která má problém. Existují dva způsoby, jak toho dosáhnout.
  • Spustit dotaz na tabulku, která obsahuje neplatné hodnoty najít řádky, které obsahují neplatné hodnoty.
  • Informace z chyby 2570 používat k identifikaci řádky, které mají neplatnou hodnotu.
Jsme projedná obě tyto metody podrobně níže, použití Příklady najít řádky, které obsahují neplatná data.

Jakmile naleznete správný řádek rozhodnutí musí být stanovena na novou hodnotu, která bude použita k nahradíte existující neplatná data. Toto rozhodnutí musí provádět velice opatrně na základě rozsahu hodnot, které pracují pro použití jako co logický smysl pro tento řádek dat. Možnosti jsou:
  • Pokud víte, jaké hodnoty by mělo být, na který určitou hodnotu.
  • Nastavte ji na přijatelné výchozí hodnotu.
  • Hodnota sloupce nastavena na hodnotu NULL.
  • Hodnota sloupce nastavena na maximální nebo minimální hodnotu Tento typ dat sloupce.
  • Pokud se domníváte, že určitý řádek není bez jakékoli užití platná hodnota pro sloupec, můžete odstranit řádku zcela.

Hledání řádky s neplatnými hodnotami pomocí T-SQL dotazů

Typ dotazu, který je nutné provést na najít řádky, které mají neplatné hodnoty závisí na typu dat sloupce, který hlášen problém. Prohlédněte si chybovou zprávu 2570, si všimnout dvě důležité součásti informace, které vám pomohou s tímto. V následujícím příkladu, ve sloupci "account_name_japan" hodnota je mimo rozsah datového typu "nvarchar." Můžeme snadno identifikovat sloupec, který má problém, stejně jako typ dat související sloupce. Tedy jednou víte, zadejte data a zahrnutých ve sloupci, který najít řádky, které obsahují neplatné hodnoty, pro které dotaz můžete formulovat. Výběr sloupce potřebné pro identifikaci tohoto řádku (jako predikáty ve sloupci klauzule WHERE) pro všechny další aktualizace nebo odstranění.

Data ve formátu Unicode, zadejte:
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan 
FROM account_history
WHERE DATALENGTH(account_name_japan) % 2 != 0
Skutečné a typ dat Float:
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)
Desítkové a číselný typ dat:
SELECT col1 FROM table2
WHERE col2 > 9999999999.99999 
OR col1 < -9999999999.99999
Mějte na paměti, který budete muset upravit hodnoty na základě Precision a scale, se kterou jste definovali decimal nebo numeric sloupce. Ve výše uvedeném příkladu byl sloupec definován jako Sloupec2 decimal(15,5).

Datum časového datového typu:
Budete muset spustit dva různé dotazy k identifikaci řádky, které obsahují neplatné hodnoty pro sloupec Datum čas.
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

Hledání řádky s neplatnou hodnotu pomocí fyzického umístění:

Tuto metodu můžete použít, pokud nelze najít řádky úroky, které výše popsanou metodou T-SQL. V chybové zprávě 2570 Vytiskne se fyzické umístění řádek, který obsahuje neplatnou hodnotu. Pro například zobrazit následující zpráva:
Stránky (1:157) v objektu ID 2121058592 ID indexu 0, oddíl ID 72057594038517760, patice 0 jednotka ALLOC ID 72057594042515456 (typ "V řádku dat"). Hodnota sloupce "Sloupec2." mimo rozsah datového typu "datetime". Aktualizovat sloupec do právního hodnota.
V této zprávě zjistíte informace: stránky (1:157) Slot 0. Toto je informace potřebné k identifikaci řádku. Identifikátor souboru je 1, PageInFile je 157 a Id_patice je 0. Jakmile máte tyto informace, které bude třeba provést příkaz, takto:
DBCC TRACEON ( 3604 )
DBCC PAGE ( realdata , 1 , 157 , 3 )
Tento příkaz vytiskne celý obsah stránky. Parametry Příkazu DBCC stránky jsou:
  • Název databáze
  • Identifikátor souboru
  • PageInFile
  • možnost tisku
Po spuštění tohoto příkazu si všimnete, výstup obsahuje informace podobné následujícímu formátu:
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 
Tento výstup můžete Viz jasně hodnot sloupců v řádku, které vás zajímají. V takovém případě je je třeba řádek uložené v patici 0 stránky. Z chybové zprávy víte že Sloupec2 je vyřešit. To může trvat hodnotu sloupci Sloupec1 pro Patice 0 a jeho použití predikátů v klauzuli WHERE v příkazu update nebo příkaz delete.

UPOZORNĚNÍ Doporučujeme použít první metodu (to znamená použít T-SQL dotazy k vyhledání požadovaných informací). Použití příkazu DBCC stránky pouze jako poslední možnost. Přijmout nejvyšší pozornost při použití tohoto příkazu můžete ve výrobním prostředí. Doporučuje se obnovení databáze produkce v testu pak získat všechny požadované informace pomocí stránky DBCC serveru a poté proveďte aktualizace na produkční server. Jako vždy nezapomeňte na zálohu připraven v případě závady a je třeba se vrátit k předchozí kopii databáze.

Odkazy

Další informace o příkazu DBCC CHECKDB naleznete v tématu téma "dbcc checkdb (Transact-sql)" na následující Microsoft Developer Webový server společnosti Network (MSDN):
http://msdn2.microsoft.com/en-us/library/ms176064.aspx
Další informace o známých problémy v aplikaci SQL Server 2000, klepněte na tlačítko následujícím článku znalostní báze článek znalostní báze Microsoft Knowledge Base:
900335Oprava: Operace obnovení automatického databáze serveru SQL Server 2000 nemusí být úspěšný rejstřík obsahuje-li typ dat FLOAT nebo typ dat REAL a tento datový typ obsahuje hodnota NaN
Další informace o událostech RPC naleznete Téma "Volání uložené procedury (OLE DB)" na následujícím webu MSDN:
http://msdn2.microsoft.com/en-us/library/aa198358 (SQL.80) .aspx
Další informace o různých datových typů naleznete Téma "Volání uložené procedury (OLE DB)" na následujícím webu MSDN:
http://msdn2.microsoft.com/en-us/library/ms187752.aspx
Další informace o plovoucí bod hodnotu konvencích naleznete na následujícím webovém serveru společnosti Intel:
http://www.Intel.com/design/pentiumii/Manuals/243191.htm
Microsoft poskytuje informací o technické podpory. Tyto kontaktní informace mohou změnit bez předchozího upozornění. Společnost Microsoft tak nečiní zaručit přesnost kontaktních informací jiných výrobců.

Vlastnosti

ID článku: 923247 - Poslední aktualizace: 22. května 2011 - Revize: 4.0
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbtshoot kbexpertiseadvanced kbsql2005engine kbinfo kbmt KB923247 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:923247

Dejte nám zpětnou vazbu

 

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