Làm cách nào để kích hoạt MSDTC trên SQL Server?


106

Đây thậm chí là một câu hỏi hợp lệ? Tôi có một ứng dụng .NET Windows đang sử dụng MSTDC và nó đang đưa ra một ngoại lệ:

System.Transactions.TransactionManagerCommunicationException: Quyền truy cập mạng cho Trình quản lý giao dịch phân tán (MSDTC) đã bị vô hiệu hóa. Vui lòng bật DTC để truy cập mạng trong cấu hình bảo mật cho MSDTC bằng công cụ Quản trị Dịch vụ Thành phần ---> System.Runtime.InteropServices.COMException (0x8004D024): Trình quản lý giao dịch đã vô hiệu hóa hỗ trợ của nó cho các giao dịch từ xa / mạng. (Ngoại lệ từ HRESULT: 0x8004D024) tại System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr ManagedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevel & transactionShivelm) ...

Tôi đã theo dõi hướng dẫn Kbalertz để bật MSDTC trên PC có cài đặt ứng dụng, nhưng lỗi vẫn xảy ra.

Tôi đã tự hỏi nếu đây là một vấn đề cơ sở dữ liệu? Nếu vậy, tôi có thể giải quyết nó như thế nào?


Nếu các giải pháp được đề cập không giải quyết vấn đề, kiểm tra liên kết này
Shahab J

Câu trả lời:


127

Sử dụng điều này cho windows Server 2008 r2 và Windows Server 2012 R2

  1. Bấm Bắt đầu , bấm Chạy , nhập dcomcnfg rồi bấm OK để mở Dịch vụ Thành phần .

  2. Trong cây bảng điều khiển, nhấp để mở rộng Dịch vụ thành phần , nhấp để mở rộng Máy tính , nhấp để mở rộng Máy tính của tôi , nhấp để mở rộng Điều phối viên giao dịch phân tán và sau đó nhấp vào DTC cục bộ .

  3. Nhấp chuột phải vào Local DTC và nhấp vào Thuộc tính để hiển thị hộp thoại Thuộc tính DTC cục bộ.

  4. Nhấp vào tab Bảo mật .

  5. Đánh dấu chọn hộp kiểm "Truy cập DTC Mạng" .

  6. Cuối cùng đánh dấu chọn vào các hộp kiểm "Allow Inbound""Allow Outbound" .

  7. Nhấp vào Áp dụng , OK .

  8. Một thông báo sẽ bật lên về việc khởi động lại dịch vụ.

  9. Bấm OK và Đó là tất cả.

Tham khảo: https://msdn.microsoft.com/en-us/library/dd327979.aspx

Lưu ý: Đôi khi tường lửa mạng trên Máy tính cục bộ hoặc Máy chủ có thể làm gián đoạn kết nối của bạn, vì vậy hãy đảm bảo rằng bạn tạo các quy tắc để "Cho phép kết nối đến ""Cho phép kết nối đi" choC:\Windows\System32\msdtc.exe


Cũng hoạt động cho Windows Server 2012 R2. Cảm ơn đã hướng dẫn rõ ràng. Tôi sẽ không bao giờ tìm thấy điều này một mình!
jonazu

@jonazu bây giờ tôi cũng đã cập nhật câu trả lời cho Windows Server 2012 R2 :)
Shiv Singh

Làm tốt lắm ShivSingh!
Super Coder

Đường dẫn chính xác của msdtc.exelà:c:\windows\system32\msdtc.exe
firepol

1
Có vẻ như có một lỗi trong đó các thuộc tính này không dính khi được đặt thông qua giao diện người dùng, ít nhất là trên các nút Server 2016 theo cụm. Giải pháp là để thiết lập các thuộc tính bằng tay trong registry: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security. Thông tin thêm về các tài sản ở đây .
Paul

102

Bạn có cần MSDTC không? Sự leo thang mà bạn đang gặp phải thường do tạo nhiều kết nối trong một TransactionScope.

Nếu bạn cần nó thì bạn cần phải kích hoạt nó như được nêu trong thông báo lỗi. Trên XP:

  • Đi tới Công cụ quản trị -> Dịch vụ thành phần
  • Mở rộng các dịch vụ thành phần -> Máy tính ->
  • Nhấp chuột phải -> Thuộc tính -> tab MSDTC
  • Nhấn vào nút Cấu hình bảo mật

2
Cũng trong Windows Firewall Tôi mở cổng 135 TCP và thêm vào c: \ windows \ msdtc.exe là một ngoại lệ
Sameer Alibhai

20
Cảm ơn bạn đã nhận xét về lỗi do tạo nhiều kết nối trong một TransactionScope. Tôi đã nhận được lỗi và đó chính xác là vấn đề. Tôi không muốn sử dụng MSDTC, vì vậy tôi đã tìm thấy kết nối mới có lỗi và sử dụng lại kết nối hiện có. Cảm ơn!
Jim McKeeth

10
Tôi đang sử dụng cửa sổ 7 và 8 và chỉ có phần "Điều phối viên mặc định". Tôi có thể truy cập cấu hình bảo mật mà bạn đang nói đến ở đâu?
qdev76

2
1) Nhấp chuột phải vào DTC cục bộ và chọn thuộc tính 2) Mở tab bảo mật 3) Kiểm tra ít nhất Quyền truy cập mạng DTC, Cho phép khách hàng từ xa và Cho phép người đến.
Rob Sedgwick

19

Tôi thấy rằng cách tốt nhất để gỡ lỗi là sử dụng công cụ microsoft có tên là DTCPing

  1. Sao chép tệp vào cả máy chủ (DB) và máy khách (Máy chủ ứng dụng / máy khách)
    • Khởi động nó ở máy chủ và máy khách
    • Tại máy chủ: điền tên máy tính netbios của khách hàng và cố gắng thiết lập kết nối DTC
    • Khởi động lại cả hai ứng dụng.
    • Tại máy khách: điền tên máy tính netbios của máy chủ và cố gắng thiết lập kết nối DTC

Tôi đã giải quyết các vấn đề về giá vé trong mạng công ty cũ của chúng tôi và tôi có một số mẹo:

  • nếu bạn nhận được thông báo lỗi "Gethostbyname fail", điều đó có nghĩa là máy tính không thể tìm thấy máy tính khác theo tên netbios của nó . Ví dụ, máy chủ có thể phân giải và ping máy khách, nhưng điều đó hoạt động ở cấp DNS. Không phải ở cấp độ tra cứu netbios. Sử dụng máy chủ WINS hoặc thay đổi LMHOST (bẩn) sẽ giải quyết được vấn đề này.
  • nếu bạn gặp lỗi "Acces Denied", cài đặt bảo mật không khớp. Bạn nên so sánh tab bảo mật cho msdtc và làm cho máy chủ và máy khách khớp với nhau. Một điều khác cần xem xét là RestrictRemoteClients giá trị . Tùy thuộc vào phiên bản hệ điều hành của bạn và quan trọng hơn là Gói dịch vụ, giá trị này có thể khác nhau.
  • Các sự cố kết nối khác:
    • Tường lửa giữa máy chủ và máy khách phải cho phép giao tiếp qua cổng 135. Và quan trọng hơn là kết nối có thể được bắt đầu từ cả hai trang web (Tôi đã gặp rất nhiều vấn đề với những người sử dụng tường lửa trong công ty của tôi vì họ cho rằng chỉ máy chủ mới mở kết nối vào cổng đó)
    • Giao thức trả về một cổng ngẫu nhiên để kết nối cho giao tiếp giao dịch thực. Những người sử dụng tường lửa không thích điều đó, họ thích giới hạn các cổng trong một phạm vi nhất định. Bạn có thể hạn chế việc tạo cổng động RPC trong một phạm vi nhất định bằng cách sử dụng các phím như được mô tả trong Cách định cấu hình cấp phát cổng động RPC để hoạt động với tường lửa .

Theo kinh nghiệm của tôi, nếu DTCPing có thể thiết lập kết nối DTC được khởi tạo từ máy khách và bắt đầu từ máy chủ, thì các giao dịch của bạn không còn là vấn đề nữa.


6

Cũng có thể xem ở đây về cách bật MSDTC từ services.msc của Control Panel.

Trên máy chủ nơi trình kích hoạt nằm, bạn cần bật dịch vụ MSDTC. Bạn có thể thực hiện việc này bằng cách nhấp vào BẮT ĐẦU> CÀI ĐẶT> BẢNG ĐIỀU KHIỂN> CÔNG CỤ HÀNH CHÍNH> DỊCH VỤ. Tìm dịch vụ có tên 'Điều phối viên giao dịch phân tán' và NHẤP PHẢI (vào đó và chọn)> Bắt đầu.



4

@Dan,

Tôi có cần bật msdtc để giao dịch hoạt động không?

Chỉ các giao dịch phân tán - Những giao dịch liên quan đến nhiều hơn một kết nối. Đảm bảo gấp đôi rằng bạn chỉ mở một kết nối duy nhất trong giao dịch và nó sẽ không leo thang - Hiệu suất cũng sẽ tốt hơn nhiều.


Tôi có cần bật msdtc để giao dịch hoạt động không? Dù bằng cách nào, nhiều kết nối không được thực hiện theo như tôi biết. Tôi đã chạy các bước đó trên máy khách, bạn có nói rằng tôi cũng nên thực hiện các bước đó trên máy chủ cơ sở dữ liệu không?
Dan

@Dan, bạn không bắt buộc phải kích hoạt DTC nếu bạn đang sử dụng các giao dịch trên ado.net. Bạn chỉ được yêu cầu bật MSDTC trên máy chủ nếu bạn đang sử dụng Giao dịch phân tán
Niraj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.