2010년 3월 25일 목요일

asp.net MSDTC(OraMTS) + Oracle 11g client + Windows 7

 

정말 MS와 Oracle의 궁합은 이리도 안 좋은 것인가....

 

현재 닷넷 관련 프로젝트를 진행 중인데

복 수개의 Oracle 서버 (Oracle 9I) 와 복 수개의 MS-SQL2008 서버에 접근해서

트랜젝션을 처리해야한다..

 

본 프로젝트에서 솔루션으로 생각한게

OracleClient 를 사용한 Managed Oracle Provider 1.1 을 사용하고

MSSQL과 Oracle 를 동시에 트랜젝션 처리를 하기위해서 MSDTC를

사용하게 되었다..

 

이것을 사용하기 위해서 Oracle MTS(Microsoft Transaction Service)를 사용하기로 했는데 정말 빌어먹을 DCOM의 트랜젝션에 MTS를 넣기가 엄청나게 힘든것이다..

 

우선 윈도우즈 버젼이 비스타나 Server2008 윈도우즈7 일 경우에는

서버 버전이 무엇이든 간에 오라클 클라이언트를 11g 를 깔아야합니다.

 

9i로 어떻게든 해볼려고 했었는데....  결론은 트랜젝션이 완벽하지 않게 된다..

-본 프로젝트는 TransactionScope 객체를 사용함-

 

일부 웹자료를 살펴보니 Enlist=false 옵션을 ConnectionString에 먹이면 된다고 하는데

다시 한 번 강조하지만 그렇게 되면 해당 커넥션이 트렌젝션에 참가하지 않게 되므로

사용자 Exception 이나 오류가 발생한 경우 rollback가 되지 않는다.

 

결국 찾다찾다 보니 진리의 msdn 님께서 비스타 이상에서는 oracle 11g Client 를 깔아서

MSDTC 설정을 잘하라는게 결론인데 이와 관련된 설정도 엄청나게 힘들었다...

 

첫번째 : 11g client 깔기

 

http://www.oracle.com/technology/software/products/database/oracle11g/111060_win32soft.html

 

두번째 : ODT for Visual Studiy 깔기

 

http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

 

세번째 : 환경설정

ORACLE_HOME : oracle client home 경로 ex) D:\product\11.1.0\client_1

ORACLE_HOME 경로에 Network Service, IIUser 보안 권한주기

 

네번째 : DTC 설정

 

http://msdn.microsoft.com/ko-kr/library/aa561924(en-us,BTS.20).aspx

 

1.  Set the appropriate MSDTC Security Configuration options on Windows Server 2003 SP1, Windows XP SP2, Windows Server 2008, and Windows Vista

(기본 사용설정)

 

2. If Windows Firewall is running, add an exception for the MSDTC service

(방화벽해제)

 

그리고 2008 서버일경우 레지스트리에 권한 추가

http://piliusa.tistory.com/12?srchid=BR1http%3A%2F%2Fpiliusa.tistory.com%2F12

 

그리고 재부팅....

 

만약 그래도 안 될경우..

한글 기술 문서 링크 올립니다..

http://support.microsoft.com/kb/976963/ko

 

 

 

잘 되네요 유후~