MSSQLSERVER_7391
적용 대상: SQL Server
attribute | 값 |
---|---|
Product | SQL Server |
이벤트 ID | 7391 |
이벤트 원본 | MSSQLSERVER |
구성 요소 | SQLEngine |
심볼 이름 | RMT_TRANS_JOIN_FAIL |
메시지 텍스트 | 연결된 서버 "%ls"의 OLE DB 공급자 "%ls"이(가) 분산 트랜잭션을 시작할 수 없으므로 요청한 작업을 수행할 수 없습니다. |
설명
이 오류는 MSDTC(Microsoft Distributed Transaction Coordinator) 서비스가 실행되고 있지 않거나 네트워크 액세스를 사용하지 않도록 설정했기 때문에 발생합니다.
경우에 따라 오류 8522를 수신할 수도 있습니다.
Microsoft Distributed Transaction Coordinator (MS DTC) has stopped this transaction.
7300에서 7399 범위의 오류 번호는 공급자에 영향을 주는 문제를 나타냅니다. 각 공급자의 기능이 다르고 세부 정보가 다를 수 있으므로 전체 오류 메시지가 표시되지 않을 수 있습니다. 공급자에서 전체 오류 메시지를 검색하려면 오류를 생성하는 쿼리를 실행하기 전에 다음 명령을 실행합니다.
DBCC TRACEON (3604, 7300)
SQL Server 복제 또는 SSIS(SQL Server Integration Services)와 같은 프로세스에서 오류 7391이 표시되는 경우 코드에 문이 포함된 BEGIN DISTRIBUTED TRAN
경우에도 오류 메시지가 표시될 수 있습니다.
사용자 작업
참고 항목
원격 서버에만 수행되는 분산 쿼리를 포함하는 트랜잭션에서 코드를 제한하는 것이 가장 좋습니다.
지원 가능성
드라이버가 분산 트랜잭션을 지원하는지 확인하려면 연결된 서버 쿼리에서 사용하는 드라이버의 공급업체에 문의하세요.
대상 서버의 개체가 첫 번째 서버를 가리키는지 확인합니다. 이를 루프백 상황이라고 합니다. 루프백 연결된 서버 는 테스트용이며 분산 트랜잭션과 같은 많은 작업에 지원되지 않습니다.
서버 통신
서버 간 통신이 성공했는지 확인하려면 다음 단계를 수행합니다.
네트워크 이름 확인이 작동하는지 확인합니다. 서버가 IP 주소뿐만 아니라 이름으로 서로 통신할 수 있는지 확인합니다. 양방향(예: 서버 A에서 서버 B로, 서버 B에서 서버 A로)을 체크 인합니다. 분산 쿼리를 실행하기 전에 네트워크의 모든 이름 확인 문제를 해결합니다. 여기에는 WINS, DNS 또는 LMHost 파일을 업데이트하는 작업이 포함될 수 있습니다.
방화벽이 있는 경우 RPC(원격 프로시저 호출) 포트가 올바르게 열려 있는지 확인합니다. 자세한 내용은 다음 문서를 참조하세요.
대상 서버에서 가리키는 개체를 확인합니다. 개체가 뷰 또는 저장 프로시저이거나 트리거가 실행되도록 하는 경우 암시적으로 다른 서버를 가리키는지 확인합니다. 그렇다면 세 번째 서버가 문제의 원인입니다. 세 번째 서버에서 직접 쿼리를 실행합니다. 이 작업을 수행할 수 없는 경우 연결된 서버 쿼리는 문제가 되지 않습니다. 먼저 기본 문제를 해결합니다.
RAS(원격 액세스 서버)를 사용하여 원격 서버에 액세스하는지 확인합니다. 그렇다면 RRAS(라우팅 RAS)를 구현했는지 확인합니다. RAS는 단방향 통신만 허용하므로 연결된 서버는 RAS에서 작동하지 않습니다.
서버 구성
서버를 구성하려면 다음 단계를 수행합니다.
분산 트랜잭션에 관련된 모든 서버에서 DTC(Distributed Transaction Coordinator) 또는 MS DTC를 시작합니다. 네트워크 DTC 액세스를 사용하도록 설정하는 방법에 대한 자세한 내용은 OLE DB 공급자 - SQL Server의 오류 메시지를 참조 하세요.
SQL Server를 비롯한 대부분의 OLE DB 공급자에 대한 암시적 또는 명시적 트랜잭션의 데이터 수정 문에 대해 XACT_ABORT 옵션을 ON으로 설정합니다. 쿼리를 실행하기 전에 다음 명령을 실행하여 이 작업을 수행할 수 있습니다.
SET XACT_ABORT ON
참고 항목
공급자가 중첩 트랜잭션을 지원하는 경우에는 이 옵션이 필요하지 않습니다.
서버가 Windows Server 장애 조치(failover) 클러스터에 있는지 확인합니다. 클러스터의 MSDTC 서비스에는 자체 IP 주소가 있어야 합니다. 각 서버에서 DTC 서비스의 올바른 이름 확인이 발생하는지 확인합니다. DTC의 IP 주소는 이름 확인 시스템(예: WINS, DNS 또는 LMHosts)에 정의되어야 합니다. 각 서버가 IP 주소뿐만 아니라 이름으로 다른 서버의 MSDTC와 통신할 수 있는지 확인합니다. 양방향으로 체크 인합니다. 예를 들어 서버 A에서 서버 B의 MSDTC 서비스로 확인한 다음 서버 B에서 서버 A의 MSDTC로 확인합니다. 분산 쿼리를 실행하기 전에 네트워크의 모든 이름 확인 문제를 해결해야 합니다. 클러스터에서 MSDTC를 구성하려면 SQL 장애 조치(failover) 클러스터 - Microsoft Community Hub의 MSDTC 권장 사항을 참조하세요.
권장되는 연결된 서버 대신 이전 원격 서버 기술을 사용하는 경우 원격 프로시전 트랜스 구성 옵션을
OFF
서버에 설정하거나 분산 쿼리를SET REMOTE_PROC_TRANSACTIONS OFF
실행하기 전에 문을 실행합니다. 이 설정이 설정된ON
경우 원격 프로시저 호출은 로컬 트랜잭션에서 수행됩니다. 자세한 내용은 원격 프로시전 트랜스 구성(서버 구성 옵션) - SQL Server를 참조하세요.두 서버에서 시스템 함수
@@SERVERNAME
의 반환 값을 확인합니다. 반환 값이 각 서버의 컴퓨터 이름과 일치하는지 확인합니다. 일치하지 않는 경우 서버 이름을 바꿉니다.SQL Server 시작 계정에 다음 레지스트리 키에 대한 모든 권한이 있는지 확인합니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer