KB4135113 - DÜZELTME: SQL Server'de kümelenmiş veya benzersiz bir dizine sahip bir tabloda güncelleştirme sırasında değişiklik izleme kaydı tutarsız

Uygulandığı Öğe
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

Belirtiler

Kümelenmiş veya benzersiz dizini olan bir tabloda güncelleştirme çalıştırdığınızda ve güncelleştirme birincil olmayan benzersiz bir sütunda gerçekleştirildiğinde, değişiklik izleme kaydı güncelleştirme deyimiyle tutarsız olur.

Örneğin, kümelenmiş dizine veya benzersiz dizine "sütun1" adlı bir sütunun eklendiğini varsayalım. Sütun değeri büyük bir değerden daha küçük bir değere değiştirildiğinde (20 olan değeri 16 olarak değiştirmek gibi), silme işleminden önce değişiklik izleme yan tablosu ekleme işlemini alır. Örneğin, işlem günlüğü satır kaydı ekleme işlemi satır silme işleminden önce alınır veya "I" "D"den önce eklenir.

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1116 19 I NULL NULL 5639485628
1116 20 D NULL NULL 5639485628

Sütun değeri daha küçük bir değerden daha büyük bir değere değiştirildiğinde (örneğin, değeri 16'dan 20'ye değiştirdiğinde), "I"den önce "D" eklenir.

Sys_change_version sys_change_create_version sys_change_operation sys_change_column sys_change_context PK_column
1126 32 D NULL NULL 5639485628
1126 33 I NULL NULL 5639485628

Neden

Bu sorun, değişiklik izleme yan tablosundaki silme/ekleme çiftleri arasındaki yanlış sıralama nedeniyle oluşur.

Çözüm

Bu sorunun düzeltmesi aşağıdaki SQL Server güncelleştirmelerinde bulunmaktadır:

Cumulative Update 8 for SQL ServerSQL Server 2017

SQL Server 2016 Service Pack 1 için Toplu Güncelleştirme 9

SQL Server 2014 SP2 için Toplu Güncelleştirme 12

SQL Server derlemeleri hakkında

SQL Server için her yeni derleme, bir önceki derlemede yer alan tüm düzeltmeleri ve güvenlik düzeltmelerini içerir. SQL Server için en son derlemeyi yüklemenizi öneririz:

En son toplu güncelleştirme SQL ServerSQL Server 2017

SQL Server 2016 için en son derleme

SQL Server 2014 için en son toplu güncelleştirme

Durum

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

Daha fazla bilgi

Değişiklik izleme etkinleştirilmiş bir tabloda, benzersiz olarak tanımlanmış birincil olmayan bir sütunda güncelleştirme yapıldığında, değişiklik izleme yan tablosuna iki giriş eklenir: Bölme eylemlerinin her biri için bir girdi, Ekle ve Sil.

Değişiklikleri listelemek için CHANGETABLE işlevi çağrıldığında, bu girişler birincil anahtar değerlerine göre sıralanır ve ardından işlemler toplanır. Güncelleştirme daha düşük bir değer eklerse, önce yan tabloda bir "I" işlemi, ardından bir "D" işlemi çalıştırılır. Bu, bu satır için yanlış bir işlemin döndürülmesine neden olur. Bunun nedeni, "I" ve ardından "D" harfinin "D" olarak toplanmasıdır.

Yan tablolarda yalnızca birincil anahtar değerleri korunduğundan, iki ayrı giriş olması gerekmez. Birincil anahtar sütunu güncelleştirilmediği sürece bu durum geçerlidir.

Birincil olmayan benzersiz sütunlar için bu sorun düzeltilmiştir. Bu durumda, güncelleştirme gerçekleştiğinde, "D" ve "I" içeren iki giriş yerine güncelleştirme işlemi olarak "U" ile yalnızca bir satır eklenir.

Başvurular

Microsoft'un yazılım güncelleştirmelerini tanımlamak için kullandığı terminoloji hakkında bilgi edinin.