태그 보관물: sql-server-2005

sql-server-2005

분산 트랜잭션을 시작할 수 없습니다.

연결된 서버에 대해 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 서버가 서로 통신하도록하려면 어떻게해야합니까?

관련 질문


내가 일은 관련이 없지만 어쨌든 게시하겠습니다.

  1. Distributed Transaction Coordinator두 시스템에서 서비스가 실행 중인지 확인하십시오 .

    여기에 이미지 설명 입력

  2. 두 컴퓨터에서 모든 MSDTC 보안을 비활성화합니다.

  3. 연결된 서버에서 임의 옵션을 켭니다.

  1. 저주와 맹세.

  2. 박살난 것들.

  3. 연결된 서버를SELECT 사용할 수 있는지 확인했습니다 .

        SELECT * FROM ASILive.CustomerManagementSystem.dbo.Users
        ....
    
        (763 row(s) affected)
    
  4. 클라이언트 서버가 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
    
  5. 원격 서버가 이름으로 시작 서버로 다시 통신 할 수 있는지 확인했습니다.

         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
    
  6. @@SERVERNAME두 서버의 서버 이름과 일치 하는지 확인했습니다 .

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       -------------  -------------
       ASITESTSERVER  ASITESTSERVER
    

       SELECT @@SERVERNAME, SERVERPROPERTY('MachineName')
    
       ----------  ----------
       ASIGROBTEST  ASIGROBTEST
    
  7. 비명

  8. SET XACT_ABORT ON내 쿼리를 발행 하기 전에 발행 :

    SET XACT_ABORT ON
    GO
    BEGIN DISTRIBUTED TRANSACTION
    SELECT TOP 1 * FROM Sessions
    
  9. 부여 Everyone Full Control대상 :

    HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

    두 서버에서.



답변

찾았습니다. 원격 서버의 MSDTC는 로컬 서버의 복제본입니다.

Windows 애플리케이션 이벤트 로그에서 :

이벤트 종류 : 오류
이벤트 원본 : MSDTC
이벤트 범주 : CM
이벤트 ID : 4101
날짜
: 9/19/2011 시간 : 오후 1:32:59
사용자 : N / A
컴퓨터 : ASITESTSERVER
설명 :

로컬 MS DTC는 ASICMSTEST의 MS DTC가 로컬 MS DTC와 동일한 고유 ID를 가지고 있음을 감지했습니다. 이는 두 MS DTC가 서로 통신 할 수 없음을 의미합니다. 이 문제는 일반적으로 시스템 중 하나가 지원되지 않는 복제 도구를 사용하여 복제 된 경우 발생합니다. MS DTC를 사용하려면 SYSPREP와 같은 지원되는 복제 도구를 사용하여 시스템을 복제해야합니다. 명령 프롬프트에서 ‘msdtc -uninstall’을 실행 한 다음 ‘msdtc -install’을 실행하면 문제가 해결됩니다. 참고 : ‘msdtc -uninstall’을 실행하면 시스템에서 모든 MS DTC 구성 정보가 손실됩니다.

자세한 내용은 http://go.microsoft.com/fwlink/events.asp의 도움말 및 지원 센터를
참조하십시오 .

달리는

msdtc -uninstall
msdtc -install

SQL Server 서비스를 중지했다가 다시 시작하면 문제가 해결되었습니다.


답변

“RPC에 대한 분산 트랜잭션 승격 활성화”(즉,로 설정)를 비활성화하여이 문제를 해결할 수있었습니다 (다른 사람들이 의견에서 언급했듯이 False).


답변

좋습니다. 서비스가 시작되고 그 사이에 이더넷 경로가 있고 이름 확인이 작동하고 연결된 서버가 작동하며 트랜잭션 인증을 비활성화했습니다.

내 직감은 방화벽 문제라고 말하지만 몇 가지가 떠오른다 …

  1. 머신이 동일한 도메인에 있습니까? (예, 비활성화 된 인증은 중요하지 않습니다)
  2. 컴퓨터에서 방화벽이 실행되고 있습니까? DTC는 다양한 포트를 사용하므로 방화벽에 약간의 고통이 될 수 있습니다. http://support.microsoft.com/kb/306843을 참조 하십시오 . 당분간은 문제를 식별하기 위해 방화벽을 비활성화합니다.
  3. DTC 핑은 무엇을 말합니까? http://www.microsoft.com/download/en/details.aspx?id=2868
  4. SQL 서비스는 어떤 계정으로 실행됩니까?

답변

서버가 클러스터되고 클러스터 된 DTC가있는 경우 로컬 DTC가 아닌 클러스터 된 DTC에서 보안을 해제해야합니다.


답변

대상 서버가 다른 클라우드 또는 데이터 센터에있는 경우 원본 서버 에 MSDTC 서비스 (대상 서버) 의 호스트 항목을 추가해야 합니다.

문제가 해결되지 않으면 MSDTC 설정을 활성화 한 후 시도해보십시오.


답변

저에게는 방화벽 설정과 관련이 있습니다. 방화벽 설정으로 이동하여 DTC 서비스를 허용하면 작동합니다.


답변

MSDTC에 대한 나의 마지막 모험과이 오류는 오늘 DNS 문제로 판명되었습니다. 머신이 동일한 도메인 인 EBarr에 있는지 묻는 올바른 길을 가고 있습니다. 그런데이 문제에 대한 멋진 목록입니다!

내 상황 : 방화벽을 통해 부모 도메인의 서버에 대해 분산 트랜잭션을 실행할 수 있도록 자식 도메인의 서버가 필요했습니다. 나는 수년 동안 연결된 서버를 꽤 많이 사용해 왔기 때문에 연결된 서버와 MSDTC에 대한 SQL의 모든 일반적인 설정을 Ian이 위에서 잘 문서화했습니다. 두 서버 모두에서 사용할 TCP 포트 (5000-5200) 범위로 MSDTC를 설정하고 포트 1433 및 5000-5200에 대한 상자 사이에 방화벽 구멍을 마련했습니다. 효과가 있었어야했다. 연결된 서버는 정상적으로 테스트되었고 연결된 서버를 통해 원격 SQL 서버를 잘 쿼리 할 수 ​​있었지만 분산 트랜잭션을 허용 할 수 없었습니다. DEV 서버에서 QA 서버의 연결을 볼 수도 있었지만 무언가가 돌아 오지 못했습니다.

다음과 같은 FQDN을 사용하여 QA에서 DEV 서버를 PING 할 수 있습니다. PING DEVSQL.dev.domain.com

시스템 이름 만 사용하여 DEV 서버를 PING 할 수 없습니다. PING DEVSQL

DEVSQL 서버는 두 도메인의 구성원이어야했지만 이름이 부모 도메인의 DNS에서 확인되지 않았습니다. 부모 도메인의 DEVSQL에 대한 컴퓨터 계정에 문제가 발생했습니다. 부모 도메인의 DNS에 DEVSQL을 추가하고 원격 QA 서버에서 “PING DEVSQL”이 작동하면이 문제가 해결되었습니다.

이게 도움이 되길 바란다!