KB2938828 - DÜZELTME: Veritabanı yansıtma onaylama işlemine isabet etti ve yansıtma oturumu SQL Server 2012 veya SQL Server 2014'te askıya alındı durumunu gösteriyor

Uygulandığı Öğe
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Belirtiler

Microsoft SQL ServerSQL Server 2012 veya Microsoft SQL ServerSQL Server 2014'te veritabanı yansıtması kullandığınızda, bir onaylama koşuluna çarpabilirsiniz ve veritabanı yansıtması askıya alındı durumuna geçer.

Neden

Bu sorun, yeni bir sayfa ayrılırken SQL Server yeni sayfada bir X kilidi alması nedeniyle oluşur. SQL Server, yeni sayfanın ait olduğu hobt_id (Yığın veya B-Ağacı Kimliği) kilit isteğine yerleştirir. Ancak SQL Server, hobt_id Yansıtma Günlüğü'ne koyamaz ve birincil ile yansıtma arasında farklı kilit davranışlarına neden olur.

Bu ayrıntılı olarak şu şekilde açıklanabilir:

  1. T1, Sayfa P1'de bir IX kilidi tutun.
  2. T2, P1'de bir sayfa bölme yapar, yeni bir sayfa P2 tahsis eder, burada bir sistem işlemi TX kullanılır, P2'de bir X kilidi tutar. Burada SQL Server hobt_id Yansıtma Günlüğü'ne koymadı.
  3. TX, IX kilidini P1'den P2'ye taşımak için T1 için bir kilit geçişi yapar.
  4. TX taahhüt etti, artık T2 Sayfa P2'yi kullanabilir ve T2 sayfa P2'de başka bir IX kilidi alabilir.
  5. T1 taahhüt etti, şimdi T2, P2'de IX kilidi tutan tek kişi.
  6. Çok sayıda yerleştirmeden sonra, bir kilit yükseltmesi meydana gelir, birincilde T2, P2'de IX'i serbest bırakır, ancak aynada, kilit yükseltme sırasında T2, IX kilidini serbest bırakmaz.
  7. Birçok silme işleminden sonra Sayfa P2 boşaldı ve yeniden konumlandırıldı.
  8. T3'ün yeni bir sayfaya ihtiyacı vardır ve P2'yi ayırır, bunun için bir X kilidi gerekir, ancak aynada bu adım 6. adım nedeniyle başarısız oldu.

Aynada, Adım 6, kilit bloğundaki hobt_id yanlış olduğu için IX kilidini serbest bırakmaz. Bu yanlış hobt_id 2. adımda ortaya çıkar ve SQL Server nedenle hobt_id Yansıtma Günlüğü'ne koymaz.
Genellikle 2. adımdaki TX çok kısa olduğundan herhangi bir sorun görmezsiniz ve yanlış hobt_id içeren kilit bloğu işlendiğinde serbest bırakılır. Ancak, adım 3'teki ve sonraki adımlardaki (4 ve 5) kilit geçişi nedeniyle, yanlış hobt_id sahip bu kilit bloğu korunur ve sonuç olarak soruna neden olur.
Birincil, 2. adımda doğru bir hobt_id kullandığından bu soruna sahip değildir. Ancak günlük kaydında doğru hobt_id yoktur.

Çözüm

Sorun ilk olarak aşağıdaki toplu SQL Server güncelleştirmesinde düzeltilmiştir.

SQL Server 2014 için Toplu Güncelleştirme 1 /en-us/help/2931693

SQL Server 2012 SP1 için Toplu Güncelleştirme 9 /en-us/help/2931078

SQL Server toplu güncelleştirmeleri hakkında

SQL Server için her yeni toplu güncelleştirme, önceki toplu güncelleştirmeye dahil edilen tüm düzeltmeleri ve tüm güvenlik düzeltmelerini içerir. SQL Server için en son toplu güncelleştirmelere göz atın:

      

Geçici çözüm

Bu sorunu geçici olarak çözmek için yansıtmayı yeniden başlatarak askıya alma durumunu sona erdirin.

Durum

Microsoft bunun, "Şunlar için geçerlidir" bölümünde listelenen Microsoft ürünlerinde sorun olduğunu doğrulamıştır.