본문 바로가기
개발언어/SQL

분산 트랜잭션을 실행하면 SQLOLEDB에 7391 오류 메시지가 나타날 수 있다

by 엔돌슨 2008. 3. 6.
반응형
2008/03/06 - [개발언어] - Distributed Transaction Coordinator(MSDTC)의 분산 트랜잭션 설정하기
http://support.microsoft.com/default.aspx?scid=kb%3Bko%3B873160



분산 트랜잭션을 실행하면 SQLOLEDB에 7391 오류 메시지가 나타날 수 있다

Windows XP 서비스 팩 2 또는 Windows XP Tablet PC Edition 2005를 설치한 후 연결된 서버에 대해 분산 트랜잭션을 실행하면 SQLOLEDB에 7391 오류 메시지가 나타날 수 있다

기술 자료 ID : 873160
마지막 검토 : 2005년 7월 11일 월요일
수정 : 3.1
중요 이 문서에서는 레지스트리 수정 방법을 설명합니다. 레지스트리를 수정하기 전에 해당 레지스트리를 백업하고 문제 발생 시 이를 복원하는 방법을 이해해야 합니다. 레지스트리 백업, 복원 및 편집 방법은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
256986 (http://support.microsoft.com/kb/256986/) Microsoft Windows 레지스트리 설명

현상

SQL Server 인스턴스에 대해 분산 트랜잭션을 실행하면 다음과 유사한 오류 메시지가 나타날 수 있습니다.

서버: 메시지 7391, 수준 16, 상태 1, 줄 1
OLE/DB 공급자 'SQLOLEDB'이(가) 분산 트랜잭션을 시작할 수 없으므로 작업을 수행할 수 없습니다.
[OLE/DB provider returned message: New transaction cannot enlist in specified transaction coordinator ]
OLE DB 오류 추적 [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].


다음 조건 중 하나에 해당하면 이 문제가 발생할 수 있습니다.
분산 트랜잭션을 시작하는 컴퓨터에 Microsoft Windows XP 서비스 팩 2(SP2) 또는 Microsoft Windows XP Tablet PC Edition 2005가 설치되어 있습니다.
Microsoft SQL Server 2000을 실행 중인 원격 컴퓨터에 Microsoft Windows XP SP2가 설치되어 있고 분산 트랜잭션을 시작하는 컴퓨터에 이 컴퓨터가 연결되어 있습니다.
참고 Windows XP SP2 기능과 구성 요소는 Windows XP Tablet PC Edition 2005에 포함되어 있습니다.

원인

이 문제가 발생하는 원인은 다음과 같습니다.
Microsoft Distributed Transaction Coordinator(MSDTC)에서 네트워크 트랜잭션이 해제되어 있습니다.
컴퓨터에 Windows 방화벽이 설정되어 있습니다. 기본적으로 Windows 방화벽은 MSDTC 프로그램을 차단합니다.

참고 Windows 방화벽이 해제된 경우에도 이 문제가 발생할 수 있습니다.

해결 과정

경고 레지스트리 편집기를 잘못 사용하면 심각한 문제가 발생할 수 있으며 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft는 레지스트리 편집기를 잘못 사용함으로써 발생하는 문제에 대해 해결을 보증하지 않습니다. 레지스트리 편집기의 사용에 따른 모든 책임은 사용자에게 있습니다.이 문제를 해결하려면 Windows XP SP2가 설치된 컴퓨터에서 다음 단계를 수행하십시오.
1. MSDTC 서비스의 다음 사용자로 로그온 계정을 네트워크 서비스 계정으로 설정해야 합니다. 이 계정을 설정하려면 다음 단계를 수행하십시오.
a. 시작을 누르고 실행을 누릅니다.
b. 실행 대화 상자에 Services.msc를 입력한 다음 확인을 누릅니다.
c. 서비스 창의 오른쪽 창에서 이름 아래의 Distributed Transaction Coordinator 서비스를 찾습니다.
d. 다음 사용자로 로그온 열 아래에서 다음 사용자로 로그온 계정이 네트워크 서비스인지 로컬 시스템인지 확인합니다.

다음 사용자로 로그온 계정이 네트워크 서비스이면 2단계로 이동합니다. 다음 사용자로 로그온 계정이 로컬 시스템이면 다음 단계로 진행합니다.
e. 시작을 누르고 실행을 누릅니다.
f. 실행 대화 상자에 cmd를 입력한 다음 확인을 누릅니다.
g. 명령 프롬프트에서 Net stop msdtc를 입력하여 MSDTC 서비스를 중지합니다.
h. 명령 프롬프트에서 Msdtc –uninstall을 입력하여 MSDTC를 제거합니다.
i. 명령 프롬프트에서 regedt32를 입력하여 레지스트리 편집기를 엽니다.
j. 레지스트리 편집기에서 다음 하위 키를 찾아 삭제합니다.
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSDTC
k. 레지스트리 편집기를 닫습니다.
l. 명령 프롬프트에서 Msdtc –install을 입력하여 MSDTC를 설치합니다.
m. 명령 프롬프트에서 Net start msdtc를 입력하여 MSDTC 서비스를 시작합니다.

참고 MSDTC 서비스의 다음 사용자로 로그온 계정이 네트워크 서비스 계정으로 설정됩니다.
2. 네트워크 트랜잭션을 허용하려면 MSDTC를 활성화해야 합니다. MSDTC를 활성화하려면 다음 단계를 수행하십시오.
a. 시작을 누르고 실행을 누릅니다.
b. 실행 대화 상자에서 dcomcnfg.exe를 입력한 다음 확인을 누릅니다.
c. 구성 요소 서비스 창에서 구성 요소 서비스, 컴퓨터, 내 컴퓨터를 차례로 확장합니다.
d. 내 컴퓨터를 마우스 오른쪽 단추로 누른 다음 속성을 누릅니다.
e. 내 컴퓨터 등록 정보 대화 상자의 MSDTC 탭에서 보안 구성을 누릅니다.
f. 보안 구성 대화 상자에서 네트워크 DTC 액세스 확인란을 눌러 선택합니다.
g. 원격 컴퓨터로부터 이 컴퓨터에서 분산 트랜잭션을 실행할 수 있도록 하려면 인바운드 허용 확인란을 눌러 선택합니다.
h. 이 컴퓨터로부터 원격 컴퓨터에서 분산 트랜잭션을 실행할 수 있도록 하려면 아웃바운드 허용 확인란을 눌러 선택합니다.
i. 트랜잭션 관리자 통신 그룹 아래의 인증 필요 없음 옵션을 눌러 선택합니다.
j. 보안 구성 대화 상자에서 확인을 누릅니다.
k. 내 컴퓨터 등록 정보 대화 상자에서 확인을 누릅니다.
3. MSDTC 프로그램 및 포트 135를 예외로 포함하도록 Windows 방화벽을 구성해야 합니다. Windows 방화벽을 이렇게 구성하려면 다음 단계를 수행하십시오.
a. 시작을 누르고 실행을 누릅니다.
b. 실행 대화 상자에 Firewall.cpl을 입력한 다음 확인을 누릅니다.
c. 제어판에서 Windows 방화벽을 두 번 누릅니다.
d. Windows 방화벽 대화 상자의 예외 탭에서 프로그램 추가를 누릅니다.
e. 프로그램 추가 대화 상자에서 찾아보기를 누른 다음 Msdtc.exe 파일을 찾습니다. 기본적으로 이 파일은 Installation drive:WindowsSystem32 폴더에 있습니다.
f. 프로그램 추가 대화 상자에서 확인을 누릅니다.
g. Windows 방화벽 대화 상자의 프로그램 및 서비스 목록에서 msdtc 옵션을 눌러 선택합니다.
h. 예외 탭에서 포트 추가를 누릅니다.
i. 포트 추가 대화 상자에서 포트 번호 입력란에 135를 입력한 다음 TCP 옵션을 눌러 선택합니다.
j. 포트 추가 대화 상자에서 이름 입력란에 예외의 이름을 입력한 다음 확인을 누릅니다.
k. Windows 방화벽 대화 상자에서 j단계에 입력한 예외 이름을 프로그램 및 서비스 목록에서 선택한 다음 확인을 누릅니다.

http://support.microsoft.com/default.aspx?scid=kb%3Bko%3B873160