ฉันจะเปิดใช้งาน MSDTC บน SQL Server ได้อย่างไร


106

นี่เป็นคำถามที่ถูกต้องหรือไม่? ฉันมีแอป. NET Windows ที่ใช้ MSTDC และมีข้อยกเว้น:

System.Transactions.TransactionManagerCommunicationException: การเข้าถึงเครือข่ายสำหรับ Distributed Transaction Manager (MSDTC) ถูกปิดใช้งาน โปรดเปิดใช้งาน DTC สำหรับการเข้าถึงเครือข่ายในการกำหนดค่าความปลอดภัยสำหรับ MSDTC โดยใช้เครื่องมือการดูแลระบบคอมโพเนนต์ ---> System.Runtime.InteropServices.COMException (0x8004D024): ตัวจัดการธุรกรรมได้ปิดใช้งานการสนับสนุนธุรกรรมระยะไกล / เครือข่าย (ข้อยกเว้นจาก HRESULT: 0x8004D024) ที่ System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction (UInt32 propgationTokenSize, Byte [] propgationToken, IntPtr managedIdentifier, Guid & transactionIdentifier, OletxTransactionIsolationLevelation ...

ฉันทำตามคำแนะนำ Kbalertz เพื่อเปิดใช้งาน MSDTCบนพีซีที่ติดตั้งแอป แต่ข้อผิดพลาดยังคงเกิดขึ้น

ฉันสงสัยว่านี่เป็นปัญหาฐานข้อมูลหรือไม่? ถ้าเป็นเช่นนั้นฉันจะแก้ไขได้อย่างไร


หากวิธีแก้ไขปัญหาดังกล่าวไม่สามารถแก้ปัญหาได้ให้ตรวจสอบลิงก์นี้
Shahab J

คำตอบ:


127

ใช้สำหรับ windows Server 2008 r2 และ Windows Server 2012 R2

  1. คลิกเริ่มการทำงานคลิกเรียกใช้พิมพ์dcomcnfgแล้วคลิกตกลงเพื่อเปิดบริการคอมโพเนนต์

  2. ในคอนโซลทรีคลิกเพื่อขยายบริการคอมโพเนนต์คลิกเพื่อขยายคอมพิวเตอร์คลิกเพื่อขยายMy Computerคลิกเพื่อขยายแจกจ่ายธุรกรรม Coordinatorแล้วคลิกDTC ท้องถิ่น

  3. คลิกขวาที่Local DTCและคลิกPropertiesเพื่อแสดงกล่องโต้ตอบLocal DTC Properties

  4. คลิกแท็บความปลอดภัย

  5. ตรวจสอบเครื่องหมาย"เครือข่ายการเข้าถึง DTC"ช่องทำเครื่องหมาย

  6. สุดท้ายทำเครื่องหมาย"อนุญาตให้ขาเข้า"และ"อนุญาตให้ขาออก"ช่องทำเครื่องหมาย

  7. คลิกสมัคร , OK

  8. ข้อความจะปรากฏขึ้นเกี่ยวกับการเริ่มบริการใหม่

  9. คลิกตกลงและนั่นคือทั้งหมดที่

อ้างอิง: https://msdn.microsoft.com/en-us/library/dd327979.aspx

หมายเหตุ:บางครั้งไฟร์วอลล์เครือข่ายบน Local Computer หรือเซิร์ฟเวอร์อาจขัดขวางการเชื่อมต่อของคุณดังนั้นตรวจสอบให้แน่ใจว่าคุณได้สร้างกฎเพื่อ "Allow Inbound"และ"Allow Outbound"สำหรับC:\Windows\System32\msdtc.exe


ใช้ได้กับ Windows Server 2012 R2 ด้วย ขอบคุณสำหรับคำแนะนำที่ชัดเจน จะไม่พบสิ่งนี้ด้วยตัวเอง!
jonazu

@jonazu ตอนนี้ฉันได้อัปเดตคำตอบสำหรับ Windows Server 2012 R2 ด้วย :)
Shiv Singh

ทำได้ดีมาก ShivSingh!
Super Coder

เส้นทางที่ถูกต้องmsdtc.exeคือ:c:\windows\system32\msdtc.exe
firepol

1
ดูเหมือนว่าจะมีจุดบกพร่องที่คุณสมบัติเหล่านี้ไม่ติดเมื่อตั้งค่าผ่าน UI อย่างน้อยก็บนโหนด Server 2016 ที่คลัสเตอร์ HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Securityการแก้ปัญหาคือการตั้งค่าคุณสมบัติเหล่านี้ด้วยตนเองในรีจิสทรี: ข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติที่นี่
พอล

102

คุณต้องการ MSDTC หรือไม่? การยกระดับที่คุณประสบมักเกิดจากการสร้างการเชื่อมต่อหลายรายการภายใน TransactionScope เดียว

หากคุณต้องการคุณจะต้องเปิดใช้งานตามที่ระบุไว้ในข้อความแสดงข้อผิดพลาด บน XP:

  • ไปที่เครื่องมือการดูแลระบบ -> บริการคอมโพเนนต์
  • ขยายบริการคอมโพเนนต์ -> คอมพิวเตอร์ ->
  • คลิกขวา -> Properties -> แท็บ MSDTC
  • กดปุ่ม Security Configuration

2
นอกจากนี้ในไฟร์วอลล์ windows ฉันเปิดพอร์ต 135 TCP และเพิ่ม c: \ windows \ msdtc.exe เป็นข้อยกเว้น
Sameer Alibhai

20
ขอขอบคุณสำหรับความคิดเห็นเกี่ยวกับข้อผิดพลาดที่เกิดจากการสร้างการเชื่อมต่อหลายรายการภายใน TransactionScope เดียว ฉันได้รับข้อผิดพลาดและนั่นคือปัญหา ฉันไม่ต้องการใช้ MSDTC ดังนั้นฉันจึงพบการเชื่อมต่อใหม่ที่ผิดพลาดและนำกลับมาใช้ใหม่ที่มีอยู่ ขอบคุณ!
Jim McKeeth

10
ฉันใช้ windows 7 และ 8 และมีเฉพาะส่วน "Default Coordinator" ฉันจะไปที่การกำหนดค่าความปลอดภัยที่คุณกำลังพูดถึงได้ที่ไหน
qdev76

2
1) คลิกขวาที่ Local DTC และเลือกคุณสมบัติ 2) เปิดแท็บความปลอดภัย 3) ตรวจสอบการเข้าถึงเครือข่าย DTC เป็นอย่างน้อยอนุญาตไคลเอนต์ระยะไกลและอนุญาตให้ขาเข้า
Rob Sedgwick

19

ฉันพบว่าวิธีที่ดีที่สุดในการดีบักคือการใช้เครื่องมือไมโครซอฟท์ที่เรียกว่าDTCPing

  1. คัดลอกไฟล์ไปยังทั้งเซิร์ฟเวอร์ (DB) และไคลเอนต์ (แอ็พพลิเคชันเซิร์ฟเวอร์ / ไคลเอนต์พีซี)
    • เริ่มต้นที่เซิร์ฟเวอร์และไคลเอนต์
    • ที่เซิร์ฟเวอร์: กรอกชื่อคอมพิวเตอร์ไคลเอนต์ netbios แล้วลองตั้งค่าการเชื่อมต่อ DTC
    • รีสตาร์ททั้งสองแอปพลิเคชัน
    • ที่ไคลเอนต์: กรอกชื่อคอมพิวเตอร์เซิร์ฟเวอร์ netbios และพยายามตั้งค่าการเชื่อมต่อ DTC

ฉันมีปัญหาเรื่องค่าโดยสารในเครือข่าย บริษัท เก่าของเราและฉันมีเคล็ดลับบางประการ:

  • ถ้าคุณได้รับข้อความแสดงข้อผิดพลาด "gethostbyname ล้มเหลว" มันหมายความว่าคอมพิวเตอร์ไม่สามารถหาคอมพิวเตอร์เครื่องอื่น ๆ โดยตัวของมันชื่อ NetBIOS เซิร์ฟเวอร์สามารถแก้ไขอินสแตนซ์และ ping ไคลเอนต์ได้ แต่จะทำงานในระดับ DNS ไม่ได้อยู่ในระดับการค้นหา netbios การใช้เซิร์ฟเวอร์ WINS หรือเปลี่ยน LMHOST (สกปรก) จะช่วยแก้ปัญหานี้ได้
  • หากคุณได้รับข้อผิดพลาด "Acces Denied" แสดงว่าการตั้งค่าความปลอดภัยไม่ตรงกัน คุณควรเปรียบเทียบแท็บความปลอดภัยสำหรับ msdtc และทำให้เซิร์ฟเวอร์และไคลเอนต์ตรงกัน อีกสิ่งหนึ่งที่ควรพิจารณาคือค่าRestrictRemoteClients ขึ้นอยู่กับเวอร์ชันระบบปฏิบัติการของคุณและที่สำคัญกว่านั้นคือ Service Pack ค่านี้อาจแตกต่างกัน
  • ปัญหาการเชื่อมต่ออื่น ๆ :
    • ไฟร์วอลล์ระหว่างเซิร์ฟเวอร์และไคลเอนต์ต้องอนุญาตให้มีการสื่อสารผ่านพอร์ต 135 และที่สำคัญกว่านั้นการเชื่อมต่อสามารถเริ่มต้นได้จากทั้งสองไซต์ (ฉันมีปัญหามากมายกับคนไฟร์วอลล์ใน บริษัท ของฉันเพราะพวกเขาคิดว่ามีเพียงเซิร์ฟเวอร์เท่านั้นที่จะเปิดการเชื่อมต่อ ไปยังพอร์ตนั้น)
    • โปรโตคอลส่งคืนพอร์ตแบบสุ่มเพื่อเชื่อมต่อสำหรับการสื่อสารธุรกรรมจริง คนไฟร์วอลล์ไม่ชอบพวกเขาชอบที่จะ จำกัด พอร์ตไว้ในช่วงที่กำหนด คุณสามารถ จำกัด รุ่น RPC พอร์ตแบบไดนามิกเพื่อบางช่วงโดยใช้ปุ่มตามที่อธิบายไว้ในวิธีการจัดสรรพอร์ตแบบไดนามิกกำหนดค่า RPC ที่จะทำงานร่วมกับไฟร์วอลล์

จากประสบการณ์ของฉันหาก DTCPing สามารถตั้งค่าการเชื่อมต่อ DTC ที่เริ่มต้นจากไคลเอนต์และเริ่มต้นจากเซิร์ฟเวอร์การทำธุรกรรมของคุณจะไม่มีปัญหาอีกต่อไป


6

นอกจากนี้ยังสามารถดูได้ที่นี่เกี่ยวกับวิธีการเปิด MSDTC จาก services.msc แผงควบคุมของ

บนเซิร์ฟเวอร์ที่มีทริกเกอร์อยู่คุณต้องเปิดบริการ MSDTC คุณสามารถทำได้โดยคลิกเริ่ม> การตั้งค่า> แผงควบคุม> เครื่องมือการบริหาร> บริการ ค้นหาบริการที่เรียกว่า 'Distributed Transaction Coordinator' และ RIGHT CLICK (จากนั้นเลือก)> Start


4

ต้องเปิดใช้ MSDTC บนทั้งสองระบบทั้งเซิร์ฟเวอร์และไคลเอนต์
ตรวจสอบให้แน่ใจว่าไม่มีไฟร์วอลล์ระหว่างระบบที่บล็อก RPC
DTCTestเป็นแอพพลิเคชั่นดีๆที่ช่วยคุณแก้ไขปัญหาอื่น ๆ


ฉันคิดว่านี่คือตำแหน่งใหม่microsoft.com/en-us/download/details.aspx?id=30746
Air2

4

@ แดน,

ฉันไม่จำเป็นต้องเปิดใช้งาน msdtc เพื่อให้ธุรกรรมทำงานได้หรือไม่?

ธุรกรรมแบบกระจายเท่านั้น - ธุรกรรมที่เกี่ยวข้องกับการเชื่อมต่อมากกว่าหนึ่งรายการ ตรวจสอบให้แน่ใจว่าคุณเปิดการเชื่อมต่อเพียงครั้งเดียวภายในธุรกรรมและจะไม่บานปลาย - ประสิทธิภาพจะดีขึ้นมากเช่นกัน


ฉันไม่จำเป็นต้องเปิดใช้งาน msdtc เพื่อให้ธุรกรรมทำงานได้หรือไม่ ไม่ว่าจะด้วยวิธีใดการเชื่อมต่อหลายรายการก็ไม่ได้เกิดขึ้นเท่าที่ฉันทราบ ฉันได้รันขั้นตอนเหล่านั้นบนพีซีไคลเอนต์แล้วคุณกำลังบอกว่าฉันควรทำตามขั้นตอนเหล่านั้นบนเซิร์ฟเวอร์ฐานข้อมูลด้วยหรือไม่?
แดน

@Dan คุณไม่จำเป็นต้องเปิดใช้งาน DTC หากคุณกำลังใช้การทำธุรกรรม adm.net คุณต้องเปิดใช้งาน MSDTC บนเซิร์ฟเวอร์เฉพาะในกรณีที่คุณใช้ธุรกรรมแบบกระจาย
Niraj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.