Transaksi - grup ketersediaan dan pencerminan database
Berlaku untuk: SQL Server
Artikel ini menjelaskan dukungan transaksi lintas database dan terdistribusi untuk grup ketersediaan AlwaysOn dan pencerminan database.
Dukungan untuk transaksi terdistribusi
SQL Server 2017 mendukung transaksi terdistribusi untuk database dalam grup ketersediaan. Dukungan ini mencakup database pada instans SQL Server atau database yang sama pada instans SQL Server yang berbeda. Transaksi terdistribusi tidak didukung untuk database yang dikonfigurasi untuk pencerminan database.
Catatan
Paket Layanan SQL Server 2016 (13.x) 2 dan yang lebih baru memberikan dukungan penuh untuk transaksi terdistribusi dalam grup ketersediaan.
Dalam versi SQL Server 2016 (13.x) sebelum Paket Layanan 2, transaksi terdistribusi lintas database (yaitu transaksi menggunakan database pada instans SQL Server yang sama) yang melibatkan database dalam grup ketersediaan tidak didukung.
Untuk mengonfigurasi grup ketersediaan untuk transaksi terdistribusi, lihat Mengonfigurasi Grup Ketersediaan untuk Transaksi Terdistribusi.
Lihat informasi selengkapnya di:
SQL Server 2016 SP1 dan sebelumnya: Dukungan untuk transaksi lintas database dalam instans SQL Server yang sama
Di SQL Server 2016 SP1 dan sebelumnya, transaksi lintas database dalam instans SQL Server yang sama tidak didukung untuk grup ketersediaan. Tidak ada dua database dalam transaksi lintas database yang dapat dihosting oleh instans SQL Server yang sama jika salah satu atau kedua database berada dalam grup ketersediaan. Batasan ini juga berlaku ketika database tersebut adalah bagian dari grup ketersediaan yang sama.
Transaksi lintas database juga tidak didukung untuk pencerminan database.
SQL Server 2016 SP1 dan sebelumnya: Dukungan untuk transaksi terdistribusi
Transaksi terdistribusi didukung dengan grup ketersediaan saat database dihosting oleh instans SQL Server yang berbeda. Ini juga berlaku untuk transaksi terdistribusi antara instans SQL Server dan server lain yang mematuhi DTC.
Koordinator Transaksi Terdistribusi Microsoft (MSDTC atau DTC) adalah layanan Windows yang menyediakan infrastruktur transaksi untuk sistem terdistribusi. MSDTC mengizinkan aplikasi klien untuk menyertakan beberapa sumber data dalam satu transaksi, yang kemudian dilakukan di semua server yang termasuk dalam transaksi. Misalnya, Anda dapat menggunakan MSDTC untuk mengoordinasikan transaksi yang mencakup beberapa database di server yang berbeda.
SQL Server 2016 memperkenalkan kemampuan untuk menggunakan transaksi terdistribusi di mana satu atau beberapa database dalam transaksi berada dalam grup ketersediaan. Sebelum transaksi terdistribusi SQL Server 2016 tidak didukung untuk database dalam grup ketersediaan. SQL Server 2016 dapat mendaftarkan manajer sumber daya per database. Kemampuan baru inilah sebabnya transaksi terdistribusi dapat menyertakan database dalam grup ketersediaan.
Persyaratan berikut harus dipenuhi:
Grup ketersediaan harus berjalan pada Windows Server 2012 R2 atau yang lebih baru. Untuk Windows Server 2012 R2, Anda harus menginstal pembaruan di KB3090973 tersedia di https://support.microsoft.com/kb/3090973.
Grup ketersediaan harus dibuat dengan perintah CREATE AVAILABILITY GROUP dan klausa WITH DTC_SUPPORT = PER_DB . Saat ini Anda tidak dapat mengubah grup ketersediaan yang ada.
Semua instans SQL Server yang berpartisipasi dalam grup ketersediaan harus SQL Server 2016 atau yang lebih baru.
Non-dukungan untuk transaksi terdistribusi
Kasus tertentu di mana transaksi terdistribusi tidak didukung meliputi:
Di SQL Server 2016 SP1 dan sebelumnya, di mana lebih dari satu database yang terlibat dalam transaksi berada dalam grup ketersediaan yang sama.
Di SQL Server 2016 SP1 dan sebelumnya, di mana setidaknya satu database berada dalam grup ketersediaan dan database lain berada pada instans SQL Server yang sama.
Di mana grup ketersediaan tidak dibuat dengan aktifkan transaksi terdistribusi.
Pencerminan database.
Penting
Tentukan hasil default transaksi yang sesuai yang tidak dapat diselesaikan DTC untuk lingkungan Anda. Untuk informasi tentang cara mengonfigurasi hasil default, lihat Opsi Konfigurasi Server resolusi xact yang meragukan.
Contoh skenario dengan pencerminan database
Contoh pencerminan database berikut menggambarkan bagaimana inkonsistensi logis dapat terjadi. Dalam contoh ini, aplikasi menggunakan transaksi lintas database untuk menyisipkan dua baris data: satu baris dimasukkan ke dalam tabel dalam database cermin, A, dan baris lainnya dimasukkan ke dalam tabel di database lain, B. Database A sedang dicerminkan dalam mode keamanan tinggi dengan failover otomatis. Saat transaksi sedang dilakukan, database A menjadi tidak tersedia, dan sesi pencerminan secara otomatis gagal ke cermin database A.
Setelah failover, transaksi lintas database mungkin berhasil dilakukan pada database B tetapi tidak pada database failover. Misalnya, jika server utama asli untuk database A belum mengirim log untuk transaksi lintas database ke server cermin sebelum kegagalan. Setelah failover, transaksi tersebut tidak akan ada di server utama baru. Database A dan B akan menjadi tidak konsisten, karena data yang disisipkan dalam database B tetap utuh, tetapi data yang disisipkan dalam database A telah hilang.
Skenario serupa dapat terjadi saat menggunakan transaksi MS DTC. Misalnya, setelah failover, prinsipal baru menghubungi MS DTC. Tetapi MS DTC tidak memiliki pengetahuan tentang server utama baru, dan mengakhiri transaksi apa pun yang "bersiap untuk diterapkan," yang dianggap diterapkan dalam database lain.
Catatan
Menggunakan Pencerminan Database dengan DTC atau menggunakan grup ketersediaan dengan DTC dengan cara yang tidak disetujui dalam artikel ini tidak didukung. Ini tidak menyiratkan bahwa aspek produk yang tidak terkait dengan DTC tidak didukung; namun, masalah apa pun yang timbul dari penggunaan transaksi terdistribusi yang tidak tepat tidak didukung.