Bagikan melalui


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:

  1. 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.

  2. Jika Anda memiliki firewall, pastikan port Panggilan Prosedur Jarak Jauh (RPC) Anda dibuka dengan benar. Untuk informasi lebih lanjut, baca artikel berikut:

  3. 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.

  4. 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:

  1. 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.

  2. 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.

  3. 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.

  4. 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 jalankan SET REMOTE_PROC_TRANSACTIONS OFF pernyataan sebelum Anda menjalankan kueri terdistribusi apa pun. Jika pengaturan ini diatur ke ON, panggilan prosedur jarak jauh dilakukan dalam transaksi lokal. Untuk informasi selengkapnya, lihat Mengonfigurasi trans proc jarak jauh (opsi konfigurasi server) - SQL Server.

  5. 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.

  6. Verifikasi bahwa akun startup SQL Server memiliki izin kontrol penuh pada kunci registri berikut:

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

Langkah berikutnya