분산 트랜잭션을 시작할 수 없습니다.
연결된 서버에 대해 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 Server가 서로 통신하도록 하려면 어떻게 해야 합니까?
관련 질문
- OLE DB 제공자 "SQLNCLI10" 때문에 작업을 수행할 수 없습니다.(*연결된 서버 이름은
(null)
) - 분산 트랜잭션 오류?(오라클 공급자 사용)
- 최대 절전 모드 사용 시 NHibernate와의 분산 트랜잭션에 등록할 수 없습니다.
- 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)
클라이언트 서버가 원격 서버에서 다음 작업을 수행할 수 있는지 확인합니다.
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
두 서버의 서버 이름과 일치하는 항목을 선택했습니다.
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ------------- ------------- ASITESTSERVER ASITESTSERVER
그리고.
SELECT @@SERVERNAME, SERVERPROPERTY('MachineName') ---------- ---------- ASIGROBTEST ASIGROBTEST
비명을 질렀습니다.
-
SET XACT_ABORT ON GO BEGIN DISTRIBUTED TRANSACTION SELECT TOP 1 * FROM Sessions
부여
Full Control
대상:HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
두 서버 모두에서.
원격 서버의 MSDTC가 로컬 서버의 복제본이었습니다.
윈도우즈 응용 프로그램 이벤트 로그에서 다음을 수행합니다.
유형:(Error): 오류(Error)
소스: MSDTC : MSDTC
카테고리: CM 진행자: CM
ID: ~ 4101
날짜: 2011년 9월 19일
: : 오후 1시 32분 59초
사용자: 해당 없음
ASITESTSERVER : ASITESTSERVER
설명:로컬 MS DTC가 ASICMSTEST의 MS DTC가 로컬 MS DTC와 고유 ID가 동일함을 감지했습니다.즉, 두 MS DTC가 서로 통신할 수 없음을 의미합니다.이 문제는 일반적으로 지원되지 않는 복제 도구를 사용하여 시스템 중 하나를 복제한 경우에 발생합니다.MS DTC를 사용하려면 시스템을 Sysprep과 같은 지원되는 복제 도구를 사용하여 복제해야 합니다. 명령 프롬프트에서 'msdc -uninstall'을 실행한 다음 'msdc -install'을 실행하면 문제가 해결됩니다.참고: 'msdc -uninstall'을 실행하면 시스템에서 모든 MS DTC 구성 정보가 손실됩니다.
자세한 내용은 http://go.microsoft.com/fwlink/events.asp 의 도움말 및 지원 센터를 참조하십시오.
입니다.
msdtc -uninstall
msdtc -install
SQL Server 서비스를 중지하고 다시 시작하면 문제가 해결됩니다.
에 대한 , "RPC"로 를하여 이 에 언급된 문제할 수 .False
):
@WonderWorker의 요청에 따라 SQL 스크립트를 통해 다음 작업을 수행할 수 있습니다.
EXEC master.dbo.sp_serveroption
@server = N'[mylinkedserver]',
@optname = N'remote proc transaction promotion',
@optvalue = N'false'
서비스가 시작되면 서비스 사이에 이더넷 경로가 있고 이름 확인 작업, 연결된 서버 작업 및 트랜잭션 인증을 해제합니다.
내 직감은 방화벽 문제라고 하지만 몇 가지 생각나는 것들이 있습니다.
- 컴퓨터가 같은 도메인에 있습니까?(예, 비활성화된 인증에는 문제가 되지 않습니다.)
- 기계에서 방화벽이 실행되고 있습니까?DTC는 다양한 포트를 사용하기 때문에 방화벽에 약간의 문제가 될 수 있습니다. http://support.microsoft.com/kb/306843 을 참조하십시오. 당분간 문제를 식별하기 위해 방화벽을 비활성화할 것입니다.
- DTC ping은 무엇을 나타냅니까?http://www.microsoft.com/download/en/details.aspx?id=2868
- SQL 서비스가 어떤 계정으로 실행되고 있습니까?
서버가 클러스터되어 있고 클러스터된 DTC가 있는 경우 로컬 DTC가 아닌 클러스터된 DTC에서 보안을 비활성화해야 합니다.
저는 방화벽 설정과 관련이 있습니다.방화벽 설정으로 이동하여 DTC 서비스를 허용하면 작동합니다.
MSDTC에 대한 저의 마지막 모험과 오늘의 이 오류는 DNS 문제로 밝혀졌습니다.당신은 기계가 같은 도메인에 있는지 묻는 것이 옳은 길입니다, EBar.그나저나, 이 문제에 대한 훌륭한 목록입니다!
내 상황:방화벽을 통해 상위 도메인의 서버에 대해 분산 트랜잭션을 실행할 수 있는 하위 도메인의 서버가 필요했습니다.저는 몇 년 동안 링크된 서버를 꽤 많이 사용했기 때문에 링크된 서버에 대한 SQL과 Ian이 위에서 아주 멋지게 문서화한 MSDTC의 일반적인 설정을 모두 가지고 있었습니다.두 서버 모두에서 사용할 수 있는 TCP 포트 범위(5000-5200)로 MSDTC를 설정하고 포트 1433과 5000-5200의 박스 사이에 방화벽 구멍을 마련했습니다.효과가 있었어야 했어요.링크된 서버는 정상적으로 테스트되었으며 링크된 서버를 통해 원격 SQL 서버를 올바르게 쿼리할 수 있었지만 분산 트랜잭션을 허용할 수 없었습니다.QA 서버에서 DEV 서버로 연결된 것까지 볼 수 있었지만, 무언가가 여행을 되돌리지 못했습니다.
다음과 같은 FQDN을 사용하여 QA에서 DEV 서버를 PING할 수 있습니다. PING DEVSQL.dev.domain.com
시스템 이름 PING DEVSQL만으로 DEV 서버에 PING을 수행할 수 없습니다.
DEVSQL 서버가 두 도메인의 멤버여야 하지만 상위 도메인의 DNS에서 이름이 확인되지 않았습니다. 상위 도메인의 DEVSQL에 대한 컴퓨터 계정에 문제가 발생했습니다.상위 도메인의 DNS에 DEVSQL을 추가하고 "PING DEVSQL"이 원격 QA 서버에서 작동하면 이 문제가 해결되었습니다.
이것이 도움이 되길 바랍니다!
대상 서버가 다른 클라우드 또는 데이터 센터에 있는 경우 원본 서버에 MSDTC 서비스(대상 서버)의 호스트 항목을 추가해야 합니다.
문제가 해결되지 않으면 MSDTC 설정을 활성화한 후 이 설정을 사용하십시오.
보안 설정 외에도 트랜잭션을 실행하기 위해 두 서버 모두에서 일부 포트를 열어야 했습니다.59640 포트를 열어야 했는데 아래 제안에 따르면 135 포트가 열려 있어야 합니다.http://support.microsoft.com/kb/839279
동일한 오류가 발생하여 소스 서버에서 MSDTC를 올바르게 구성하여 아웃바운드를 허용하고 DTC가 Windows 방화벽을 통과하도록 허용함으로써 문제를 해결할 수 있었습니다.
분산 트랜잭션 조정자, 체크 표시 도메인, 개인 및 공용 옵션 허용
DTC를 허용하기 위한 방화벽 설정은 도메인뿐만 아니라 개인 및 공용도 마찬가지입니다.도메인만으로는 충분하지 않습니다(그럴 것처럼 느껴지지만 그렇지 않습니다)
언급URL : https://stackoverflow.com/questions/7473508/unable-to-begin-a-distributed-transaction
'itsource' 카테고리의 다른 글
내 Bash 스크립트에 전달된 모든 인수를 내 함수로 전달하는 방법은 무엇입니까? (0) | 2023.04.27 |
---|---|
Visual Studio 새 브라우저 인스턴스를 열지 않음 (0) | 2023.04.27 |
git 커밋되지 않았거나 저장되지 않은 모든 변경 내용 실행 취소 (0) | 2023.04.27 |
iOS에서 사용자로부터 현재 위치를 가져오는 방법 (0) | 2023.04.27 |
내 앱을 다시 배포하지 않고 Windows Azure에 배포된 클라우드 앱의 web.config를 편집할 수 있습니까? (0) | 2023.04.27 |