Gejala
Misalnya Anda membuat Grup Ketersediaan menggunakan klausul WITH DTC_SUPPORT = PER_DB di Microsoft SQL Server. Ketika mencoba menjalankan pernyataan SAVE TRANSACTION dalam prosedur transaksi atau sistem yang disimpan seperti sp_executesql, Anda menerima salah satu pesan kesalahan berikut:
Msg 627, Tingkat 16, Negara Bagian 0, LineNumber
Tidak dapat menggunakan SAVE TRANSACTION dalam transaksi yang didistribusikan. Msg 12324, Tingkat 16, Negara Bagian 100, LineNumber Transaksi terdistribusi (DTC) tidak didukung dengan tabel memori yang dioptimalkan. Kesalahan: 3933, Keparahan: 16, Negara Bagian: 1. Tidak dapat mempromosikan transaksi ke transaksi yang didistribusikan karena terdapat titik simpan aktif dalam transaksi ini.Penyebab
Ketika database dalam Always On Availability Group diaktifkan untuk WITH DTC_SUPPORT = PER_DB, selama transaksi melibatkan beberapa database, transaksi dipromosikan ke transaksi MSDTC dalam SQL Server 2016 SP2 dan SQL Server 2017. Ada batasan dalam transaksi MSDTC, misalnya titik penyimpanan tidak dapat digunakan, tabel memori yang dioptimalkan tidak dapat digunakan.
Dalam beberapa situasi transaksi lintas database terjadi bukan karena pengguna memiliki transaksi yang melibatkan dua database pengguna, tetapi karena transaksi melibatkan database sistem dan database saat ini (master, tempdb, model, database sumber daya sistem). Karena database sumber daya sistem benar-benar dibaca saja, tidak perlu mempromosikan ke transaksi MSDTC jika transaksi database silang melibatkan database sumber daya sistem tetapi tidak database sistem lainnya.
Pemecahan Masalah
Perbaikan yang diperkenalkan dalam KB ini melewati promosi ke transaksi MSDTC jika database sumber daya sistem dan database pengguna yang merupakan bagian dari Grup Ketersediaan yang diaktifkan untuk PER_DB DTC terlibat dalam transaksi database silang dalam instans SQL Server yang sama.
Oleh karena itu jika penyebab asli kesalahan yang tercantum di atas adalah transaksi database silang yang melibatkan database sumber daya sistem, perbaikan ini akan mengatasinya. Terkadang pengguna mungkin melihat kesalahan yang tercantum di atas dengan penyebab yang mendasar yang sama. Berikut ini mencantumkan kondisi di mana perbaikan ini berlaku:
-
Database adalah bagian dari Grup Ketersediaan Selalu Aktif yang diaktifkan WITH DTC_SUPPORT = PER_DB.
-
Transaksi lintas database melibatkan database ini dan database sumber daya sistem dalam contoh SQL Server yang sama.
-
Di dalam transaksi database silang, SAVE TRANSACTION digunakan, atau tabel yang dioptimalkan memori dilibatkan.
Transaksi tersebut akan gagal dengan kesalahan yang tercantum di atas tanpa perbaikan ini. Dengan perbaikan ini, transaksi tersebut harus dilanjutkan.
Catatan: Perbaikan ini membahas transaksi lintas database yang melibatkan database sumber daya sistem, tetapi setiap transaksi lintas database yang melibatkan database pengguna dan berisi pernyataan SAVE TRANSACTION masih akan gagal dan harus ditulis ulang.
Masalah ini telah diperbaiki dalam pembaruan kumulatif berikut untuk SQL Server:
Setiap pembaruan kumulatif baru untuk SQL Server berisi semua hotfix dan semua perbaikan keamanan yang disertakan dengan pembaruan kumulatif sebelumnya. Lihat pembaruan kumulatif terbaru untuk SQL Server:
Informasi Selengkapnya
Informasi tambahan tentang DTC_SUPPORT = PER_DB, tabel yang dioptimalkan memori, SIMPAN TRANSAKSI dapat ditemukan di tautan berikut.
Transaksi database dalam instans SQL Server yang sama menautkan bagian ini ke https://learn.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-instance Tabel yang Dioptimalkan Memori menautkan bagian ini ke https://learn.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/transactions-with-memory-optimized-tables?view=sql-server-2017#limitationsSIMPAN TRANSAKSI tautkan bagian ini ke https://learn.microsoft.com/en-us/sql/t-sql/language-elements/save-transaction-transact-sql?view=sql-server-2017#remarks
Status
Microsoft telah mengonfirmasi bahwa ini adalah masalah pada produk Microsoft yang tercantum di bagian "Berlaku untuk".
Referensi
Pelajari tentang terminologi yang digunakan Microsoft untuk menjelaskan pembaruan perangkat lunak.