MSSQLSERVER_7391
Berlaku untuk: SQL Server
Atribut | Nilai |
---|---|
Produk | SQL Server |
ID Peristiwa | 7391 |
Sumber Kejadian | MSSQLSERVER |
Komponen | SQLEngine |
Nama Simbolis | RMT_TRANS_JOIN_FAIL |
Teks Pesan | Operasi tidak dapat dilakukan karena penyedia OLE DB "%ls" untuk server tertaut "%ls" tidak dapat memulai transaksi terdistribusi. |
Penjelasan
Kesalahan ini terjadi karena layanan Koordinator Transaksi Terdistribusi Microsoft (MSDTC) tidak berjalan atau telah menonaktifkan akses jaringan.
Dalam beberapa kasus, Anda mungkin juga menerima kesalahan 8522:
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
Nomor kesalahan yang berada dalam rentang 7300 hingga 7399 menunjukkan masalah yang memengaruhi penyedia. Karena setiap penyedia mungkin memiliki kemampuan yang berbeda dan menampilkan detail yang berbeda, Anda mungkin tidak menerima pesan kesalahan lengkap. Untuk mengambil pesan kesalahan lengkap dari penyedia, jalankan perintah berikut sebelum Anda menjalankan kueri yang menghasilkan kesalahan:
DBCC TRACEON (3604, 7300)
Jika Anda menerima kesalahan 7391 dari proses seperti replikasi SQL Server atau SQL Server Integration Services (SSIS), Anda mungkin juga menerima pesan kesalahan jika kode berisi BEGIN DISTRIBUTED TRAN
pernyataan.
Tindakan pengguna
Catatan
Ini adalah praktik terbaik untuk membatasi kode Anda dalam transaksi yang melibatkan kueri terdistribusi yang dibuat hanya untuk server jarak jauh.
Dukungan
Untuk memeriksa apakah driver mendukung transaksi terdistribusi, hubungi vendor driver yang Anda gunakan dalam kueri server tertaut Anda.
Periksa apakah objek pada server tujuan menunjuk kembali ke server pertama. Ini dikenal sebagai situasi loopback. Server tertaut loopback ditujukan untuk pengujian dan tidak didukung untuk banyak operasi, seperti transaksi terdistribusi.
Komunikasi server
Untuk memastikan bahwa komunikasi antar server berhasil, ikuti langkah-langkah berikut:
Periksa apakah resolusi nama jaringan Anda berfungsi. Pastikan bahwa server dapat berkomunikasi satu sama lain berdasarkan nama dan tidak hanya dengan alamat IP. Periksa kedua arah (misalnya, dari server A ke server B dan dari server B ke server A). Atasi semua masalah resolusi nama pada jaringan sebelum Anda menjalankan kueri terdistribusi. Ini mungkin melibatkan pembaruan file WINS, DNS, atau LMHost.
Jika Anda memiliki firewall, pastikan port Panggilan Prosedur Jarak Jauh (RPC) Anda dibuka dengan benar. Untuk informasi lebih lanjut, baca artikel berikut:
Periksa objek yang Anda arahkan ke server tujuan. Jika objek adalah tampilan atau prosedur tersimpan, atau jika menyebabkan pemicu berjalan, periksa apakah objek secara implisit menunjuk ke server lain. Jika demikian, server ketiga adalah sumber masalah. Jalankan kueri langsung di server ketiga. Jika Anda tidak dapat melakukan ini, kueri server yang ditautkan bukan masalahnya. Atasi masalah yang mendasar terlebih dahulu.
Periksa apakah Anda menggunakan Server Akses Jarak Jauh (RAS) untuk mengakses server jarak jauh. Jika demikian, pastikan Anda telah menerapkan Routing RAS (RRAS). Server tertaut tidak berfungsi pada RAS karena RAS hanya mengizinkan komunikasi satu arah.
Konfigurasi server
Ikuti langkah-langkah berikut untuk mengonfigurasi server:
Mulai Koordinator Transaksi Terdistribusi (DTC atau MS DTC) di semua server yang terlibat dalam transaksi terdistribusi. Untuk informasi tentang mengaktifkan akses DTC jaringan, lihat Pesan kesalahan penyedia OLE DB - SQL Server.
Atur opsi XACT_ABORT ke AKTIF untuk pernyataan modifikasi data dalam transaksi implisit atau eksplisit terhadap sebagian besar penyedia OLE DB, termasuk SQL Server. Anda bisa melakukan ini dengan menjalankan perintah berikut sebelum menjalankan kueri Anda.
SET XACT_ABORT ON
Catatan
Opsi ini tidak diperlukan jika penyedia mendukung transaksi berlapis.
Periksa apakah salah satu server berada di Kluster Failover Windows Server. Layanan MSDTC pada kluster harus memiliki alamat IP sendiri. Pastikan bahwa resolusi nama yang benar dari layanan DTC terjadi di setiap server. Alamat IP DTC harus didefinisikan dalam sistem resolusi nama Anda (seperti WINS, DNS, atau LMHosts). Verifikasi bahwa setiap server dapat berkomunikasi dengan MSDTC di server lain berdasarkan nama dan tidak hanya dengan alamat IP. Periksa kedua arah. Misalnya, periksa dari server A ke layanan MSDTC server B, lalu periksa dari server B ke MSDTC server A. Anda harus mengatasi semua masalah resolusi nama pada jaringan sebelum menjalankan kueri terdistribusi. Untuk mengonfigurasi MSDTC pada kluster, lihat Rekomendasi MSDTC di Kluster Failover SQL - Microsoft Community Hub.
Jika Anda menggunakan teknologi server jarak jauh yang lebih lama alih-alih server tertaut yang direkomendasikan, atur opsi konfigurasi trans proc jarak jauh ke
OFF
untuk server, atau jalankanSET REMOTE_PROC_TRANSACTIONS OFF
pernyataan sebelum Anda menjalankan kueri terdistribusi apa pun. Jika pengaturan ini diatur keON
, panggilan prosedur jarak jauh dilakukan dalam transaksi lokal. Untuk informasi selengkapnya, lihat Mengonfigurasi trans proc jarak jauh (opsi konfigurasi server) - SQL Server.Periksa nilai pengembalian fungsi
@@SERVERNAME
sistem di kedua server. Verifikasi apakah nilai yang dikembalikan cocok dengan nama komputer setiap server. Jika tidak cocok, ganti nama server.Verifikasi bahwa akun startup SQL Server memiliki izin kontrol penuh pada kunci registri berikut:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer