sql Server 2005 ve sonraki sürümlerinde, 2570 dbcc hata giderme

Makale çevirileri Makale çevirileri
Makale numarası: 923247 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

GİRİŞ

Bu makalede, sql Server hata nedeni nedir, 2570 hata ve sorunun nasıl giderileceği.

Daha fazla bilgi

DATA_PURITY denetimleri

sql Server 2005'te DATA_PURITY, yeni bir seçenek eklendi dbcc checkdb ve dbcc checktable komutlarının. dbcc checkdb çalıştırmak ya da bu seçeneği etkin dbcc checktable komutunu, komut gerçekleştirir her tablonun tüm satırlar sütun değeri "veri purity" doğrulamalarını veya veritabanındaki tablolar. Emin olmak için bu yeni denetimleri gerçekleştirilmez Geçerli değerler sütunlarında depolanan (yani değerleri olmayan Giden Aralık bu sütunun veri türüyle ilişkili etki alanı). , sütunun veri türünü doğrulaması doğasına bağlıdır. , kapsamlı olmayan liste aşağıdaki birkaç örnek verir:
Bu tabloyu kapaBu tabloyu aç
Sütun veri türüVeri doğrulaması türü
Unicode karakterVeri uzunluğu olması gereken bir 2 katı.
DateTimeGün alanı 1 Oca 1753 arasında olmalıdır ve Ara 31 9999. Saat alanı '11:59:59:999 pm' önce olması gerekir.
Gerçek ve FloatGeçersiz varlığını denetle Kayan nokta değerleri, snan, qnan, NINF, nd, pd, PINF ister.
Tüm veri türleri, sütun geçerliliği için denetlenir veri. Yalnızca dışında saklanan bir değer mümkün olduğu aralık denetlenir. Örneğin, tinyint veri türü geçerli aralığı 0 ile 255 arasında olan ve içinde saklanan bir Bu nedenle değer denetimi (Bu, yalnızca 0 ile 255 arasında değerleri saklayabilirsiniz) tek bayt, gerekli değildir.

Veri purity doğrulama denetimlerini etkin değil otomatik olarak tüm veritabanları için. Birkaç bağlı denetimleri etkin Etkenler:
  • sql Server 2005 ve sonraki sürümlerinde oluşturulmuş veritabanları için bu denetimler varsayılan olarak etkinleştirilir ve dbcc checkdb veya dbcc checktable komutunu yürütürken DATA_PURITY seçeneğin kullanılması, ilgisiz, bu nedenle, devre dışı olamaz.
  • ' SQL'ın önceki sürümlerinde oluşturulmuş veritabanları için sql Server 2000, sql Server 7.0 ve sql için yükseltilmiş sürümleri gibi sunucu Server 2005, bu denetimlerin varsayılan olarak etkinleştirilmemiştir. Bu denetimler için sırada gerçekleştirilmesi için dbcc checkdb DATA_PURITY seçeneğini belirtmelisiniz veya dbcc checktable komutunu. Bu iki şey neden olabilir:
    • dbcc komutu tamamlandıktan ve raporları, veritabanı tüm veri purity denetimleri de dahil olmak üzere temiz olur. Bu gerçeği kaydedilir Veritabanı başlığı. Tüm sonraki dbcc checkdb veya dbcc checktable komutunu yürütmeler bu bilgileri görürsünüz ve verileri otomatik olarak gerçekleştirir purity gibi sql Server 2005'te oluşturulan veritabanları için olacağını denetler. İçinde bir kez bir veritabanı "temiz" olarak bilinen diğer, veri purity denetimleri sözcüklerdir her zaman gerçekleştirdi.
    • dbcc komutu tamamlandığında, ancak sorunları hakkında raporlar veri tutarsızlığına. Bu durumda, veritabanı temizlemek zorundasınız tutarsızlıklar kaldırın ve sonra dbcc komutu yeniden çalıştırmayı deneyebilirsiniz. dbcc komutu kadar DATA_PURITY seçeneği belirlemek sahip Veritabanı temiz olarak bildirilir.
  • PHYSICAL_ONLY seçeneği belirtilirse, dbcc checkdb veya dbcc checktable komut yürütülür, veri purity denetler. gerçekleştirilen.

BELİRTİLER

SQL'de geçersiz veya aralık dışı veri saklanmış olabilir Önceki sürümlerinde aşağıdaki nedenlerle Sunucu Veritabanı:
  • Geçersiz veri kaynağında mevcut toplu kullanırken bcp yardımcı programı gibi bir yöntem ekleyin.
  • Geçersiz verileri üzerinden yapılan rpc olayı çağrıları geçildi sql Server.
  • Diğer olası fiziksel veri bozulması sol neden olur. sütun değeri geçersiz bir durumda.
Bir tablo sütununda geçersiz veri varsa, geçersiz veri karşı gerçekleştirilen işlem türüne göre sorunlarla karşılaşabilirsiniz. Ancak, ayrıca hiçbir sorun görünür ve sql Server 2005 ve sonraki sürümlerinde ya da dbcc checktable dbcc checkdb komutu çalıştırana kadar geçersiz veri bulunamaz mümkündür.

Bazı belirtileri, Geçersiz veri varlığı nedeniyle görebilirsiniz içerecek (ancak sınırlı değildir Son):
  • Erişim ihlalleri veya diğer türde özel durum Etkilenen sütun sorguları yürütme.
  • Karşı yürütülen sorgu tarafından döndürülen yanlış sonuçlar Etkilenen sütun.
  • Hatalar veya sorunlar istatistikleri karşı oluşturulmakta Etkilenen sütun.
  • Aşağıdakine benzer hata iletileri:
    Msg 9100, Düzey 23 durum 2 satır 1 olası dizini bozukluğu algılandı. dbcc çalıştırın CHECKDB.

DATA_PURITY sorun raporu

dbcc checkdb veya dbcc checktable komutunu yürütmek DATA_PURITY seçeneği etkin (ya da veri purity denetimlerini çalıştır otomatik olarak) ve dbcc tarafından denetlenen tablolardaki geçersiz veri var. komutları dbcc çıktı gösteren ek iletiler içerir veri sorunları. Veri purity gösteren bazı hata iletileri sorunları aşağıda gösterilmiştir:
dbcc sonuçları "account_history".
Msg 2570, Düzey 16, durum 2, satır 1
Sayfa (1:1073) 33 nesne kimliği 1977058079, dizin kimliği 0, bölüm kimliği 129568478265344 yuva, ayırma birimi kimliği 129568478265344 ("satır data" türü). Sütun "account_name_japan" veri türü "nvarchar" için aralığın dışında bir değerdir. Sütun için geçerli bir değer güncelleştirin.
Msg 2570, Düzey 16, durum 2, satır 1
Sayfa (1:1156), nesnenin 120 yuvasında Kimlik 1977058079, dizin kimliği 0, bölüm kimliği 129568478265344, ayırma birimi kimliği 129568478265344 ("İçinde veri satır" yazın). Sütun "account_name_japan" dışarı değerdir veri türü "nvarchar" aralığı. Sütun için geçerli bir değer güncelleştirin.
Orada 153137 "account_history" nesne 1080 sayfalarındaki satırlarıdır.
checkdb bulundu 0 ayırma hataları ve 338 tutarlılığı hataları tablosunda "account_history" (nesne kimliği 1977058079).
0 Ayırma hataları ve 338 checkdb bulundu 'BadUnicodeData' veritabanı tutarlılığı hataları.
dbcc yürütme tamamlandı. dbcc hata iletileri yazdırılır, sistem yöneticinize başvurun.
dbcc 'tablo1'için oluşur.
Msg 2570, düzeyi 16, Durum 3, 1 satır
Sayfa (1:154), 0 nesne kimliği 2073058421 yuva, dizin kimliği 0, bölüm kimliği 72057594038321152, ayırma birimi (tür kimliği 72057594042318848 "Satır data"). Sütun "col2", "gerçek" veri türü aralık dışında değerdir. Sütun için geçerli bir değer güncelleştirin.
Vardır 4 satır nesnesi için 2 sayfa "tablo1".
checkdb 0 ayırma hataları ve 1 tutarlılığı hataları bulundu. Tablo 'tablo1' (nesne kimliği 2073058421).
checkdb 0 ayırma hataları bulundu. ve 'realdata' veritabanı 1 tutarlılığı hataları. dbcc yürütme tamamlandı. Eğer dbcc yazdırılan hata iletileri, sistem yöneticinize başvurun.
dbcc 'tablo2'için oluşur.
Msg 2570, düzeyi 16, Durum 3, 1 satır
Sayfa (1:155), 0 nesne kimliği 2105058535 yuva, dizin kimliği 0, bölüm kimliği 72057594038452224, ayırma birimi (tür kimliği 72057594042449920 "Satır data"). Sütun "col2" "ondalık" veri türü aralık dışında değerdir. Sütun için geçerli bir değer güncelleştirin.
Vardır 4 satır nesnesi için 1 sayfa "tablo2".
checkdb 0 ayırma hataları ve 1 tutarlılığı hataları bulundu. Tablo 'tablo2' (nesne kimliği 2105058535).
checkdb 0 ayırma hataları bulundu. ve 'realdata' veritabanı 1 tutarlılığı hataları. dbcc yürütme tamamlandı. Eğer dbcc yazdırılan hata iletileri, sistem yöneticinize başvurun.
dbcc 'Tablo3'için oluşur.
Msg 2570, düzeyi 16, Durum 3, 1 satır
Sayfa (1:157), 0 nesne kimliği 2121058592 yuva, dizin kimliği 0, bölüm kimliği 72057594038517760, ayırma birimi (tür kimliği 72057594042515456 "Satır data"). Sütun "col2" "DATETIME" veri türü aralık dışında değerdir. Sütun için geçerli bir değer güncelleştirin.
Vardır 3 satır nesnesi için 1 sayfa "Tablo3".
checkdb 0 ayırma hataları ve 1 tutarlılığı hataları bulundu. Tablo 'Tablo3' (nesne kimliği 2121058592).
checkdb 0 ayırma hataları bulundu. ve 'realdata' veritabanı 1 tutarlılığı hataları. dbcc yürütme tamamlandı. Eğer dbcc yazdırılan hata iletileri, sistem yöneticinize başvurun.
İçin Geçersiz sütun değer, 2570 hatası içeren her satır oluşturulur.

Veri Purity sorun giderme

2570 Hatalar herhangi dbcc onarım onarılamıyor. Seçenekleri. Bunun nedeni, hangi değerini belirlemek için dbcc imkansız Geçersiz sütun değeri değiştirmek için kullanılmalıdır. Bu nedenle, sütun değeri olmalıdır el ile güncelleştirildi.

El ile güncelleştirme gerçekleştirmek için bir satır bulmak olması sorun olan. Bunu gerçekleştirmenin iki yolu vardır.
  • İçeren bir tabloya karşı sorgu yürütme Geçersiz bir değer içeren satırları bulmak için geçersiz değer.
  • 2570 Hata bilgilerini tanımlamak için kullanın Geçersiz bir değere sahip satırlar.
Biz her iki yöntem de aşağıda ayrıntılı kullanarak tartışılacak Geçersiz veri içeren satırları bulmak için örnekler.

Bulduğunuz bir kez doğru satır bir karar için kullanılan yeni bir değer yapılması gerekiyor. Varolan geçersiz verileri değiştirin. Bu karar çok dikkatli yapılması gerekir uygulamada aral??? esas olarak ne belirli satır veri mantıksal olarak anlamlıdır. Sahip olduğunuz seçenekler şunlardır:
  • Olması gereken hangi değeri biliyorsanız, için ayarlama Belirli bir değer.
  • Bir kabul edilebilir bir varsayılan değer olarak ayarlayın.
  • Sütun değeri null olarak ayarlayın.
  • Sütun değeri için maksimum veya minimum değer ayarlayın. Bu sütunun veri türü.
  • Belirli satır herhangi bir kullanım olduğunu düşünüyorsanız sütun için geçerli bir değer, bu satırı tamamen silebilirsiniz.

t-sql sorguları kullanarak geçersiz değerlere sahip satırlar bulma

Bulmak için yürütmek için gereken sorgu türü olan satırları geçersiz değerler bildirilen bir sorun sütun veri türüne bağlıdır. 2570 Hata iletisinde bakarsanız, iki önemli parçalarını göreceksiniz. Bu konuda yardımcı olacak bilgiler. Aşağıdaki örnekte, sütun "account_name_japan" değerini "nvarchar" veri türü aralık dışında olduğundan Biz olabilir kolayca sorunun yanı sıra veri türüne sahip bir sütun tanımlamak sütun dahil. Bu nedenle, bir kez veri tipini bilmeniz ve sütun dahil, Geçersiz bir değer içeren satırları bulmak için sorgu formülle sütun, satır (Do?rulamalarda tanımlamak için gerekli sütunları seçme where yan tümcesi) herhangi başka güncelleştirmek veya silmek için.

Unicode veri türü:
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan 
FROM account_history
WHERE DATALENGTH(account_name_japan) % 2 != 0

Float veri türü:
-- 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)

Gerçek veri türü:
-- 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
Ondalık ve sayısal veri türü:
SELECT col1 FROM table2
WHERE col2 > 9999999999.99999 
OR col1 < -9999999999.99999
Temel değerlerini ayarlamak gerekir unutmayın duyarlık ve ölçeği ondalık veya sayısal sütun tanımladınız. Yukarıdaki örnekte sütun Sütun2 decimal(15,5) tanımlanmıştır.

Tarih Saat veri türü:
Tanımlamak için iki farklı sorgu yürütme gerekecektir. Tarih Saat sütunu için geçersiz değerler içeren satırlar.
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

Fiziksel konumu kullanarak geçersiz değer içeren satırları bulma:

Satırları bulmak için, bu yöntemi kullanabilirsiniz. Yukarıda açıklanan t-sql yöntemini kullanarak faiz. 2570 Hata iletisi fiziksel konumunu geçersiz değer içeren satır yazdırılır. İçin Örneğin, aşağıdaki ileti bakın:
Sayfa (1:157) 0 nesne kimliği 2121058592, dizin kimliği 0, bölüm kimliği 72057594038517760 yuva, ayırma birimi kimliği 72057594042515456 ("satır data" türü). Sütun "col2" değeridir. "DATETIME" veri türü aralık dışında. Sütun bir hukuk Güncelleştir değer.
Bu iletide bilgileri görürsünüz: sayfa (1:157) Yuva 0. Bu satırı belirlemek gereken bilgilerdir. FileId 1'dir, PageInFile 157 ve YuvaKimliği 0. Bu bilgilere sahip olduktan sonra Aşağıdaki komut yürütme gerekebilir:
DBCC TRACEON ( 3604 )
DBCC PAGE ( realdata , 1 , 157 , 3 )
Bu komut, bir sayfanın tüm içeriğini yazdırır. Parametreleri dbcc page komutu şunlardır:
  • Veritabanı adı
  • FileId
  • PageInFile
  • yazdırma seçeneği
Bu komutu çalıştırmak sonra çıkış göreceksiniz aşağıdaki biçime benzer bilgiler içerir:
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 
Bu çıkış yapabilirsiniz ilginizi çeken satır sütun değerlerini açıkça görmek. Bu durumda, Sayfa 0 yuvasında saklanan satır gerekir. Hata iletisinden biliyor o col2 sorunlu olur. Bu nedenle col1 için değer alabilir. 0 Yuva ve sizin update deyiminin where yan tümcesinde yüklemi olarak kullanın veya delete deyimi.

UYARI İlk yöntemi kullanmanızı öneririz (yani, t-sql kullanın sorguları) için gerekli bilgileri bulmak amacıyla kullanılır. Kullanım dbcc page komutu yalnızca bir son çare. Bu komut bir üretimde kullanırken utmost dikkatli ortamı. Test üretim veritabanını geri yüklemek için tavsiye edilir Sunucu, daha sonra dbcc page kullanarak gerekli bilgileri almak ve yapın üretim sunucusundaki güncelleştirmeleri. Her zaman, bir yedekleme hazır tutmak emin olun bir aksilik ve bir önceki kopyasına geri dönmeniz gereklidir diye Veritabanı.

Referanslar

dbcc checkdb deyimi hakkında daha fazla bilgi için bkz: aşağıdaki Microsoft Developer "dbcc checkdb (Transact-sql)" konusuna bakın Network (msdn) Web sitesi:
http://msdn2.microsoft.com/en-us/library/ms176064.aspx
Bilinen hakkında daha fazla bilgi için sql Server 2000'de sorunları görüntülemek üzere aşağıdaki makale numarasını tıklatın Microsoft Bilgi Bankası'ndaki makaleyi:
900335Düzeltme: sql Server 2000 otomatik veritabanı kurtarma işlemi float veri türü veya gerçek veri türü dizin içerir ve bu veri türü NaN değeri varsa başarılı olmayabilir
rpc olayları hakkında daha fazla bilgi için bkz: Aşağıdaki msdn Web sitesinde "Çağıran bir saklı yordam (ole db)" konusu:
http://msdn2.microsoft.com/en-us/library/aa198358 (sql.80) .aspx
Farklı veri türleri hakkında daha fazla bilgi için bkz: Aşağıdaki msdn Web sitesinde "Çağıran bir saklı yordam (ole db)" konusu:
http://msdn2.microsoft.com/en-us/library/ms187752.aspx
Kayan nokta değeri kuralları hakkında daha fazla bilgi için ziyaret edin aşağıdaki Intel Web sitesi:
http://www.intel.com/Design/pentiumii/manuals/243191.htm
Microsoft üçüncü taraf iletişim bilgilerini teknik destek bulmanıza yardımcı olmak için alan sağlar. Bu kişi bilgi verilmeden değişebilir. Microsoft yok Bu üçüncü taraf iletişim bilgilerinin doğruluğunu garanti.

Özellikler

Makale numarası: 923247 - Last Review: 22 Mart 2012 Perşembe - Gözden geçirme: 1.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL 2005 Server Workgroup
  • 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
Anahtar Kelimeler: 
kbtshoot kbexpertiseadvanced kbsql2005engine kbinfo kbmt KB923247 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:923247

Geri Bildirim Ver

 

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