달력

4

« 2024/4 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
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. 

:
Posted by Elick