Belirtiler
Microsoft SQL Server 'da wıth DTC_SUPPORT = PER_DB yan tümcesini kullanarak bir kullanılabilirlik grubu oluşturduğunuzu varsayalım. İşlem veya sp_executesqlgibi sistem tarafından depolanan yordamlardaişlemi kaydet deyimini yürütmeye çalıştığınızda,aşağıdaki hata iletilerinden birini alırsınız:
İleti 627, düzey 16, durum 0, satır LineNumber Dağıtılmış işlem içinde SAVE TRANSACTION kullanılamıyor. İleti 12324, düzey 16, durum 100, satır LineNumber Dağıtılmış işlemler (DTC) bellek için iyileştirilmiş tablolarla desteklenmez. Hata: 3933, önem derecesi: 16, durum: 1. Bu işlemde etkin bir kaydetme noktası olduğundan işlem dağıtılmış işlem olarak yükseltilemiyor.
Neden
Bir işlem birden çok veritabanı içerdiği sürece , her zaman kullanılabilirlik grubundaki bir veritabanı DTC_SUPPORT = PER_DB ile birlikteetkinleştirildiğinde, Işlem SQL Server 2016 SP2 ve SQL Server 2017 ile MSDTC işlemine yükseltilir. MSDTC işlemlerinde sınırlamalar vardır; örneğin, kayıt noktaları kullanılamaz, bellek için iyileştirilmiş tablolar kullanılamaz.
Bazı durumlarda, veritabanı işlemleri, kullanıcıların iki kullanıcı veritabanıyla ilgili işlemler olduğundan, ancak işlemler geçerli veritabanı ile sistem veritabanları (Master, tempdb, model, sistem kaynak veritabanı) içerdiğinden dolayı.Sistem kaynak veritabanı gerçekten salt okunur olduğu için, veritabanları arası işlem sistem kaynak veritabanını içeriyorsa, ancak DIĞER sistem veritabanlarından farklı olduğunda MSDTC işlemine yükseltme yapmanız gerekmez.
Çözüm
Bu KB 'de tanıtılan düzeltme, sistem kaynak veritabanı ve PER_DB DTC için etkinleştirilen bir kullanılabilirlik grubunun parçası olan bir kullanıcı veritabanı, aynı SQL Server örneğinde bir çapraz veritabanı işleminde yer alıyorsa, MSDTC işlemine yükseltmeyi atlar.
Bu nedenle, yukarıda listelenen hataların başlangıçtaki nedeni sistem kaynak veritabanıyla ilgili veritabanı işlemi Bazen Kullanıcı yukarıda listelenen hataları aynı temeldeki nedenle görebilir. Bu düzeltmenin uygulandığı koşullar aşağıda listelenmektedir:
-
Veritabanı, DTC_SUPPORT = PER_DB Ile her zaman açık olan kullanılabilirlik grubunun bir bölümüdür.
-
Bir çapraz veritabanı işlemi, aynı SQL Server örneğindeki bu veritabanını ve sistem kaynağı veritabanını içerir.
-
Veritabanı işlemi sırasında, Kaydet IŞLEMI kullanılır veya bellek için iyileştirilmiş tablolar vardır.
Bu işlem bu düzeltme olmadan yukarıda listelenen hatalarla başarısız olur. Bu düzeltmeyle ilgili işlem devam etmelidir.
Not: Bu düzeltme, sistem kaynağı veritabanını içeren veritabanları arası işlemleri giderir, ancak Kullanıcı VERITABANLARı Içeren ve işlem kaydet deyimini içeren veritabanları arası işlemler yine de başarısız olur ve yeniden yazılması gerekir.
Bu sorun, aşağıdaki SQL Server toplu güncelleştirmesinde giderilmiştir:
Ek Bilgi
DTC_SUPPORT = PER_DB, bellek için iyileştirilmiş tablolar, Kaydet işlemi hakkında ek bilgi aşağıdaki bağlantılarda bulunabilir.
Aynı SQL Server örneğindeki veritabanı işlemleri bu bölümühttps://docs.Microsoft.com/en-US/SQL/Database-Engine/Availability-Groups/Windows/Transactions-Always-on-Availability-and-Database-Mirroring?View=SQL-Server-2017#sql-server-2016-sp1-and-before-support-for-cross-database-transactions-within-the-same-sql-server-instancehafıza ile iyileştirilmiş tablolarabağlayan bu bölümü ,https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsBu bölümü https://docs.Microsoft.com/en-US/SQL/t-SQL/Language-Elements/Save-Transaction-Transact-SQL?View=SQL-Server-2017#remarks
Durum
Microsoft bu sorunun "Uygulandığı öğe" bölümünde listelenen Microsoft ürünlerinde bulunduğunu onaylamıştır.
Başvurular
Microsoft 'un yazılım güncelleştirmelerini açıklamak için kullandığı terminoloji hakkında bilgi edinin.