2009. 1. 14. 14:47
MSSQL Oracle 분산트랜잭션 Work/Database General2009. 1. 14. 14:47
한동안 고민했었던 것인데... 아래처럼 하면 된다.
그런데... MSSQL에서 이렇게 연결한 Oracle의 package를 호출하는 방법을 누가 좀 알려줬으면 좋겠다..
Distribute transaction for MSSQL-ORACLE.
- 연결된 두 서버의 네트워크 주소가 C 클래스까지 일치해야 한다고 한다.
이 문제에 대한 공식 문서를 찾지 못했지만, 실제로 테스트해본 결과로는 믿을만한 정보다.
몇몇 증언들을 보면 C클래스까지 일치하지 않으면 분산트랜잭션이 실패한다고 한다.
--> 이것은 정확하지 않다. 컴퓨터 이름으로 ping이 갈 수 있으면 이 조건은 무시해도 될 것 같다.
- Windows 구성요소 중 네트워크 COM+ 엑세스 사용, 네트워크 DTC 엑세스 사용이 모두 설치되어 있어야 한다.
- 고급 TCP/IP - WINS의 NetBIOS 설정은 기본값으로 설정되어 있어야 한다.
- hosts, Imhosts 파일에 서버IP 서버 HOST명를 맵핑. (동일 네트웍에서 Ping 서버 HOST명 이 이상없어야 한다)
- 인터넷 연결 방화벽 설정도 해지되어 있어야 한다. (135 port 및 MSDTC관련 App를 예외로 등록한다)
- DTCPing Tool을 이용한 MSDTC 정상 동작 확인해야 한다..(135 port 확인)
- 레지스트리 에서 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC에 TurnOffRpcSecurity 데이터 값은 1로 설정되어있어야 한다.
- 관리도구>구성요소서비스 >내 컴퓨터> 속성> 보안구성도 정상적으로 설정되어 있습니다.
: 네트워크 DTC 액세스, 인바운드 허용, 아웃바운드 허용, 인증필요 없음 이 체크되어 있는지 확인할 것.
- netstat -na 결과 (TCP 0.0.0.0:135 0.0.0.0:0 LISTENING - 순서대로)이면 135번 포트는 열려있어야한다.
- MSSQL Server 보다 MSDTC가 먼저 시작되어야 한다. (설정이 변경되면 당연히 재시작한다.)
- 아래처럼 SET XACT_ABORT ON 를 사용한다.
SET XACT_ABORT ON
BEGIN DISTRIBUTED TRANSACTION
INSERT INTO T_TEST VALUES (2);
INSERT INTO ORADEV9..DEVDBA.T_TEST VALUES (2);
COMMIT TRANSACTION
Reference.
after reference.