ฉันพยายามเรียกใช้ SQL กับเซิร์ฟเวอร์ที่เชื่อมโยง แต่ได้รับข้อผิดพลาดด้านล่าง:
BEGIN DISTRIBUTED TRANSACTION
SELECT TOP 1 * FROM Sessions
OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
Msg 7391, Level 16, State 2, Line 3
The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
มีข้อผิดพลาดสองประการที่ส่งคืนโดยผู้ให้บริการ:
ข้อผิดพลาด # 1:
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: OLE DB provider "SQLNCLI" for linked server "ASILIVE" returned message "No transaction is active.".
HelpFile:
HelpContext: $00000000
SQLState: 01000
NativeError: 7412
ข้อผิดพลาด # 2
Number: $80040E14
Source: Microsoft OLE DB Provider for SQL Server
Description: The operation could not be performed because OLE DB provider "SQLNCLI" for linked server "ASILIVE" was unable to begin a distributed transaction.
HelpFile:
HelpContext: $00000000
SQLState: 42000
NativeError: 7391
ฉันจะให้ Microsoft สนับสนุนฟังก์ชันด้านความปลอดภัยได้อย่างไร
หรืออย่างน้อยที่สุดฉันจะทำให้ SQL Severs สองตัวคุยกันได้อย่างไร
คำถามที่เกี่ยวข้อง
- ไม่สามารถดำเนินการได้เนื่องจากผู้ให้บริการ OLE DB“ SQLNCLI10” ... (* ชื่อเซิร์ฟเวอร์ที่เชื่อมโยงคือ
(null)
) - ข้อผิดพลาดของธุรกรรมแบบกระจาย? ( โดยใช้ผู้ให้บริการ Oracle )
- ไม่สามารถเข้าร่วมในธุรกรรมแบบกระจายกับ NHibernate ( โดยใช้ Hibernate )
- เกิดข้อผิดพลาดในการใช้ธุรกรรมแบบกระจายใน SQL Server 2008 R2 ( SQL Server 2008 R2 ไม่มีคำตอบ )
- ข้อผิดพลาดของธุรกรรมแบบกระจายผ่านรหัสเท่านั้น ( เกิดจากการรวมการเชื่อมต่อ )
- เกิดข้อผิดพลาดในการดำเนินการผู้ประสานงานธุรกรรมแบบกระจายในเซิร์ฟเวอร์ที่เชื่อมโยง ( SQL Server 2008 ไม่มีคำตอบ )
- ข้อผิดพลาดของธุรกรรมแบบกระจาย? ( ไม่มีคำตอบที่ยอมรับคำตอบเดียวไม่ช่วย )
- จะแทรกลงในตารางระยะไกลโดยใช้เซิร์ฟเวอร์ที่เชื่อมโยงกับธุรกรรมได้อย่างไร ( คำตอบที่ยอมรับไม่สามารถแก้ไขได้ )
สิ่งที่ฉันได้ทำคือการที่ไม่เกี่ยวข้อง แต่ผมจะโพสต์มันอยู่แล้ว
ตรวจสอบให้แน่ใจว่า
Distributed Transaction Coordinator
บริการทำงานบนเครื่องทั้งสองเครื่อง:ปิดใช้งานการรักษาความปลอดภัย MSDTC ทั้งหมดบนเครื่องทั้งสอง:
เปิดตัวเลือกแบบสุ่มบนเซิร์ฟเวอร์ที่เชื่อมโยง:
สาปแช่งและสาบาน
ทุบสิ่งต่างๆ
ตรวจสอบว่า
SELECT
สามารถใช้เซิร์ฟเวอร์ที่เชื่อมโยงได้ :SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users .... (763 row(s) affected)
ตรวจสอบว่าไคลเอนต์เซิร์ฟเวอร์สามารถ
ping
ใช้เซิร์ฟเวอร์ระยะไกลได้ :C:\Documents and Settings\avatar>ping asicmstest.contoso.com Pinging asicmstest.contoso.com [10.0.0.40] with 32 bytes of data: Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Reply from 10.0.0.40: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.40: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
ตรวจสอบว่าเซิร์ฟเวอร์ระยะไกลสามารถส่งกลับตามชื่อไปยังเซิร์ฟเวอร์เริ่มต้น:
C:\Documents and Settings\avatar>ping asitestserver.contoso.com Pinging asitestserver.contoso.com [10.0.0.22] with 32 bytes of data: Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Reply from 10.0.0.22: bytes=32 time<1ms TTL=128 Ping statistics for 10.0.0.22: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms
ตรวจสอบว่า
@@SERVERNAME
ตรงกับชื่อเซิร์ฟเวอร์บนเซิร์ฟเวอร์ทั้งสอง :SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ------------- ------------- ASITESTSERVER ASITESTSERVER
และ
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ---------- ---------- ASIGROBTEST ASIGROBTEST
กรีดร้อง
ออก
SET XACT_ABORT ON
ก่อนที่จะออกคำถามของฉัน :SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions
มอบ
Everyone
Full Control
ให้กับ :HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
บนเซิร์ฟเวอร์ทั้งสองเครื่อง