Bagikan melalui


Transaksi Lintas Database Tidak Didukung Untuk Pencerminan Database atau Grup Ketersediaan AlwaysOn (SQL Server)

Transaksi lintas database dan transaksi terdistribusi tidak didukung oleh Grup Ketersediaan AlwaysOn atau dengan pencerminan database. Ini karena atomitas/integritas transaksi tidak dapat dijamin karena alasan berikut:

  • Untuk transaksi lintas database: Setiap database berkomitmen secara independen. Oleh karena itu, bahkan untuk database dalam satu grup ketersediaan, failover dapat terjadi setelah satu database melakukan transaksi tetapi sebelum database lain melakukannya. Untuk database yang mencerminkan masalah ini diperparah karena setelah failover, database yang dicerminkan biasanya berada pada instans server yang berbeda dari database lain, dan bahkan jika kedua database dicerminkan antara dua mitra yang sama, tidak ada jaminan bahwa kedua database akan gagal pada saat yang sama.

  • Untuk transaksi terdistribusi: Setelah failover, server utama/replika utama baru tidak dapat terhubung ke koordinator transaksi terdistribusi pada server utama/replika utama sebelumnya. Oleh karena itu, server utama baru/replika utama tidak dapat memperoleh status transaksi.

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 yang gagal. Ini akan terjadi 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 menghentikan transaksi apa pun yang "bersiap untuk berkomitmen," yang dianggap diterapkan dalam database lain.

Penting

Menggunakan Pencerminan Database atau Grup Ketersediaan bersama dengan DTC tidak menghasilkan penginstalan SQL Server yang tidak didukung. Namun, jika database adalah bagian dari sesi Pencerminan Database atau Grup Ketersediaan dan DTC juga digunakan dalam database, masalah dukungan akan diselidiki oleh Microsoft hanya jika tidak terkait dengan penggunaan gabungan Pencerminan Database atau Grup Ketersediaan dengan DTC.