Bagaimana cara mengaktifkan MSDTC di SQL Server?

106

Apakah ini pertanyaan yang valid? Saya memiliki aplikasi .NET Windows yang menggunakan MSTDC dan ini memberikan pengecualian:

System.Transactions.TransactionManagerCommunicationException: Akses jaringan untuk Manajer Transaksi Terdistribusi (MSDTC) telah dinonaktifkan. Harap aktifkan DTC untuk akses jaringan dalam konfigurasi keamanan untuk MSDTC menggunakan alat Administratif Layanan Komponen ---> System.Runtime.InteropServices.COMException (0x8004D024): Manajer transaksi telah menonaktifkan dukungannya untuk transaksi jarak jauh / jaringan. (Pengecualian dari HRESULT: 0x8004D024) di System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsransimactionLevel & transaction isolationLevel & transaction isolationLevel

Saya mengikuti panduan Kbalertz untuk mengaktifkan MSDTC di PC tempat aplikasi diinstal, tetapi kesalahan masih terjadi.

Saya bertanya-tanya apakah ini masalah database? Jika ya, bagaimana cara mengatasinya?

Dan
sumber
Jika solusi yang disebutkan tidak menyelesaikan masalah, periksa tautan ini
Shahab J

Jawaban:

127

Gunakan ini untuk windows Server 2008 r2 dan Windows Server 2012 R2

  1. Klik Mulai , klik Jalankan , ketik dcomcnfg , lalu klik OK untuk membuka Layanan Komponen .

  2. Di pohon konsol, klik untuk memperluas Layanan Komponen , klik untuk memperluas Komputer , klik untuk memperluas Komputer Saya , klik untuk memperluas Koordinator Transaksi Terdistribusi dan kemudian klik DTC Lokal .

  3. Klik kanan Local DTC dan klik Properties untuk menampilkan kotak dialog Local DTC Properties .

  4. Klik tab Keamanan .

  5. Centang kotak "Akses DTC Jaringan" .

  6. Terakhir, centang kotak "Izinkan Masuk" dan "Izinkan Keluar" .

  7. Klik Apply , OK .

  8. Sebuah pesan akan muncul tentang memulai kembali layanan.

  9. Klik OK dan Itu saja.

Referensi: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Catatan: Terkadang firewall jaringan di Komputer Lokal atau Server dapat mengganggu koneksi Anda, jadi pastikan Anda membuat aturan untuk "Izinkan Koneksi Masuk" dan "Izinkan koneksi Keluar" untukC:\Windows\System32\msdtc.exe

Shiv Singh
sumber
Bekerja untuk Windows Server 2012 R2, juga. Terima kasih atas instruksi yang jelas. Tidak akan pernah menemukan ini sendiri!
jonazu
@jonazu sekarang saya telah memperbarui jawaban untuk Windows Server 2012 R2 juga :)
Shiv Singh
Kerja bagus ShivSingh!
Super Coder
Jalur yang benar msdtc.exeadalah:c:\windows\system32\msdtc.exe
firepol
1
Tampaknya ada bug di mana properti ini tidak melekat saat disetel melalui UI, setidaknya pada node Server 2016 yang berkerumun. Solusinya adalah dengan mengatur properti ini secara manual dalam registri: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security. Info lebih lanjut tentang properti di sini .
Paul
102

Apakah Anda bahkan membutuhkan MSDTC? Eskalasi yang Anda alami sering kali disebabkan oleh pembuatan beberapa koneksi dalam satu TransactionScope.

Jika Anda benar-benar membutuhkannya, Anda harus mengaktifkannya seperti yang diuraikan dalam pesan kesalahan. Di XP:

  • Buka Alat Administratif -> Layanan Komponen
  • Perluas Layanan Komponen -> Komputer ->
  • Klik kanan -> Properties -> tab MSDTC
  • Tekan tombol Konfigurasi Keamanan
Andrew Peters
sumber
2
Juga di firewall windows saya membuka port 135 TCP dan menambahkan c: \ windows \ msdtc.exe sebagai pengecualian
Sameer Alibhai
20
Terima kasih atas komentar tentang kesalahan yang disebabkan oleh pembuatan beberapa koneksi dalam satu TransactionScope. Saya mendapatkan kesalahan dan itulah masalahnya. Saya tidak ingin menggunakan MSDTC, jadi saya menemukan koneksi baru yang salah dan menggunakan kembali yang sudah ada. Terima kasih!
Jim McKeeth
10
Saya menggunakan windows 7 dan 8, dan hanya ada bagian "Koordinator Default". Di mana saya bisa mendapatkan konfigurasi keamanan yang Anda bicarakan?
qdev76
2
1) Klik kanan pada DTC Lokal dan pilih properti 2) Buka tab keamanan 3) Periksa setidaknya Akses DTC Jaringan, Izinkan Klien Jarak Jauh dan Izinkan Masuk.
Rob Sedgwick
19

Saya telah menemukan bahwa cara terbaik untuk men-debug adalah dengan menggunakan alat microsoft yang disebut DTCPing

  1. Salin file ke server (DB) dan klien (Server aplikasi / pc klien)
    • Mulailah di server dan klien
    • Di server: isi nama komputer netbios klien dan coba atur koneksi DTC
    • Mulai ulang kedua aplikasi.
    • Di klien: isi nama komputer server netbios dan coba atur koneksi DTC

Saya mengalami masalah tarif di jaringan perusahaan lama kami, dan saya punya beberapa tip:

  • jika Anda mendapatkan pesan kesalahan "Gethostbyname gagal" itu berarti komputer tidak dapat menemukan komputer lain dengan nama netbios -nya . Misalnya, server dapat menyelesaikan dan melakukan ping ke klien, tetapi itu berfungsi pada tingkat DNS. Bukan pada level pencarian netbios. Menggunakan server WINS atau mengubah LMHOST (kotor) akan menyelesaikan masalah ini.
  • jika Anda mendapatkan kesalahan "Acces Denied", pengaturan keamanan tidak cocok. Anda harus membandingkan tab keamanan untuk msdtc dan mencocokkan server dan klien. Satu hal lain yang perlu diperhatikan adalah nilai RestrictRemoteClients . Bergantung pada versi OS Anda dan yang lebih penting Service Pack, nilai ini bisa berbeda.
  • Masalah koneksi lainnya:
    • Firewall antara server dan klien harus memungkinkan komunikasi melalui port 135. Dan yang lebih penting, koneksi dapat dimulai dari kedua situs (saya memiliki banyak masalah dengan orang-orang firewall di perusahaan saya karena mereka berasumsi hanya server yang akan membuka koneksi ke pelabuhan itu)
    • Protokol mengembalikan port acak untuk disambungkan untuk komunikasi transaksi nyata. Orang-orang firewall tidak suka itu, mereka suka membatasi port ke kisaran tertentu. Anda dapat membatasi pembuatan port dinamis RPC ke kisaran tertentu menggunakan kunci seperti yang dijelaskan dalam Cara mengonfigurasi alokasi port dinamis RPC agar bekerja dengan firewall .

Dalam pengalaman saya, jika DTCPing dapat mengatur koneksi DTC yang dimulai dari klien dan dimulai dari server, transaksi Anda tidak menjadi masalah lagi.

Davy Landman
sumber
6

Dapat juga melihat di sini tentang cara mengaktifkan MSDTC dari Control Panel services.msc.

Di server tempat pemicu berada, Anda harus mengaktifkan layanan MSDTC. Anda dapat melakukannya dengan mengklik MULAI> SETELAN> PANEL KONTROL> ALAT ADMINISTRATIF> LAYANAN. Temukan layanan yang disebut 'Koordinator Transaksi Terdistribusi' dan KLIK KANAN (di atasnya dan pilih)> Mulai.

Cameron Castillo
sumber
4

MSDTC harus diaktifkan di kedua sistem, baik server maupun klien.
Selain itu, pastikan tidak ada firewall di antara sistem yang memblokir RPC.
DTCTest adalah aplikasi kecil yang bagus yang membantu Anda memecahkan masalah lainnya.

Lars Mæhlum
sumber
Saya pikir ini adalah lokasi baru microsoft.com/en-us/download/details.aspx?id=30746
Air2
4

@Bayu_joo

Apakah saya tidak perlu mengaktifkan msdtc agar transaksi berfungsi?

Hanya transaksi terdistribusi - Transaksi yang melibatkan lebih dari satu koneksi. Pastikan dua kali lipat Anda hanya membuka satu koneksi dalam transaksi dan itu tidak akan meningkat - Performa akan jauh lebih baik juga.

Andrew Peters
sumber
Apakah saya tidak perlu mengaktifkan msdtc agar transaksi berfungsi? Bagaimanapun, banyak koneksi tidak dibuat sejauh yang saya ketahui. Saya sudah menjalankan langkah-langkah tersebut di PC klien, apakah menurut Anda saya juga harus melakukan langkah-langkah tersebut di server database?
Dan
@Dan, Anda tidak perlu mengaktifkan DTC jika Anda menggunakan transaksi ado.net. Anda diharuskan untuk mengaktifkan MSDTC di server hanya jika Anda menggunakan transaksi terdistribusi
Niraj