Yedekleme bozulmayı algılar, ancak CHECKDB algılamaz


12

Yedekleme komutunu çalıştırdığımda bir veritabanım var

BACKUP DATABASE [MyDatabase] TO     
DISK =  'G:\Backup\MyDatabase_01_01_2018.bak'   
WITH    NOFORMAT, NOSKIP, COMPRESSION, INIT, BUFFERCOUNT = 100

Hata mesajını alıyorum

Msg 3043, Seviye 16, Durum 1, Satır 8
YEDEK 'MyDatabase', sayfadaki (1: 745345) 'F: \ Data \ MyDatabase_1.ndf' dosyasında bir hata saptadı.
Msg 3013, Seviye 16, Durum 1, Satır 8
YEDEK VERİTABANI anormal olarak sona eriyor.

Tam bir CHECKDB koştu ama geri temiz geliyor. Sayfa Doğrulama seçeneğinin YOK (yaptığım değil) olarak ayarlandığını fark ettim, bu yüzden onu CHECKSUM olarak değiştirdim ve tüm sayfalara yazmak ve sağlama toplamı oluşturmak için DB'deki tüm dizinleri yeniden oluşturdum. Bundan sonra yedekleme hala başarısız olur ve checkdb hala temiz gösterir (bu yüzden değişiklik olmaz).

DBCC CHECKDB('MyDatabase') WITH NO_INFOMSGS, ALL_ERRORMSGS,
DATA_PURITY, EXTENDED_LOGICAL_CHECKS;

SQL günlüğünden:

All_errormsgs, no_infomsgs, xxx tarafından yürütülen data_purity İLE DBCC CHECKDB (MyDatabase) 0 hata buldu ve 0 hata onardı. Geçen süre: 0 saat 21 dakika 46 saniye. Dahili veritabanı anlık görüntüsünün ayrılma noktası LSN = 000ab776: 0000112f: 0001 ve ilk LSN = 000ab776: 0000112d: 0001 vardır.

DBCC PAGE koştu ama hatalar (hatta ilk etapta doğru sayfa döndürüyor gibi görünmüyor). Baskı seçeneği 2 ile çalıştırabilir ve geri döner ama dürüst olmak gerekirse orada ne aradığımı bilmiyorum.

DBCC PAGE ('MyDatabase',1,745345,3)
SAYFA: (3: 513793)

TAMPON:


BUF @ 0x00000003811F8280

bpage = 0x00000000F2D70000 bhash = 0x0000000000000000 bpageno = (1: 745345)
bdbid = 5 ırk = 0 bcputicks = 0
bsampleCount = 0 bKullanım1 = 44283 bstat = 0x809
blog = 0x5adb215a bnext = 0x0000000000000000          

SAYFA BAŞLIĞI:


Sayfa @ 0x00000000F2D70000

m_pageId = (3: 513793) m_headerVersion = 1 m_type = 2
m_typeFlagBits = 0x4 m_level = 0 m_flagBits = 0x0
m_objId (AllocUnitId.idObj) = 1075937538 m_indexId (AllocUnitId.idInd) = 2
Meta veriler: AllocUnitId = 633462595911680 Meta veriler: PartitionId = 0
Meta veriler: IndexId = -1 Meta veriler: ObjectId = 0 m_prevPage = (3: 513795)
m_nextPage = (3: 513820) pminlen = 17 m_slotCnt = 426
m_freeCnt = 2 m_freeData = 7338 m_reservedCnt = 0
m_lsn = (608841: 643611: 411) m_xactReserved = 0 m_xdesId = (0: 0)
m_ghostRecCnt = 0 m_tornBits = 0 DB Parça Kimliği = 1

Tahsis Durumu

GAM (1: 511232) = TAHSİSLİ SGAM (1: 511233) = TAHSİS EDİLMİYOR     
PFS (1: 744096) = 0x40 TAHSİSLİ 0_PCT_FULL FARK (1: 511238) = DEĞİŞTİRİLMEDİ
ML (1: 511239) = MIN_LOGGED DEĞİL      

Msg 2514, Seviye 16, Durum 8, Satır 20
Bir DBCC PAGE hatası oluştu: Geçersiz sayfa meta veri dökümü stil 3 mümkün değil.

Bundan sonra ne deneyebilirim? Sunucu sürümü:

select @@version
Microsoft SQL Server 2014 (SP2-CU11) (KB4077063) - 12.0.5579.0 (X64) 
    21 Şub 2018 12:19:47 
    Telif Hakkı (c) Microsoft Corporation
    Windows NT 6.3 üzerinde Developer Edition (64 bit) (Derleme 9600:) (Hipervizör)

DB'nin uyumluluk düzeyi 100'dür (SQL 2008).


Bu soruya yapılan yorumlar sohbete taşındı .
Paul White 9

Yanıtlar:


9

Bu yanıt, Paul Randal tarafından yazılan ve "sayfa sağlama toplamı hataları içeren bir yedeklemede başarısız olacak, ancak bir DBCC CHECKDB" geçen bir veritabanı "ile ilgili SQLskills.com bülteninin bir sayısından alınmıştır .

Bunun gerçekleşebileceği tek zaman, bir derecenin karışık bir boyut olduğu (8 sayfanın potansiyel olarak 8 farklı tahsis birimine tahsis edilebildiği - buraya bakın ) ve bazı sayfaların ilgili PFS sayfası tarafından tahsis edildiği şekilde hatalı işaretlendiği zamandır.

Bu gerçekleştiğinde, DBCC CHECKDBbir ayırma biriminin IAM sayfalarından hangi sayfaların okunacağını türettiği için bu sayfaları okumaya çalışmaz (bunlardan ilki, karma olarak ayrılmış sayfaları listeler). Bu durum DBCC CHECKDByolsuzluk tespit mantığında bir boşluktur .

[Çünkü] DBCC CHECKDByolsuzluğu tespit edemediği için, bunları düzeltmek için gereken onarımları yapması mümkün değildi. Bu nedenle DBCC WRITEPAGE, hatalı olarak ayrılmış sayfalar için ayırma durumunda gerekli değişiklikleri doğrudan PFS sayfasında çalıştım ve işe yaradı!

Bu son derece nadir bir durumdu - DBCC CHECKDB başarısız olmasının çok daha yaygın olduğu, ancak bir yedekleme başarılı olacağı yönünde.

Kanımca, Paul'ün kararı sizin gibi verileri dışa ve içe aktarmanın çok ötesinde, bu yüzden doğru şeyi yaptığınızı düşünüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.