ODP.NET + OraMTS 사용
마침, 질문을 하신 분이 있어서 TransactionScope를 이용한 트랜잭션 테스트를 마저 해보았습니다. 지난 글에서 odp.net20을 설치하는 편한 방법을 살펴봤는데요.
.NET 응용 프로그램에서 Oracle XE 사용
; https://www.sysnet.pe.kr/2/0/821
E:\...[압축해제폴더]>install.bat odp.net20 E:\oracle\odpnet20 odac
위와 같이 한 경우에는 ORAMTS 구성요소가 복사되지는 않습니다. 그래서 아래와 같이 명령을 다시 추가해주면,
E:\...[압축해제폴더]>install.bat oramts E:\oracle\odpnet20 true
다음과 같이 폴더 구성이 완료됩니다.
[그림 1: ODP.NET 20과 OraMTS가 설치된 폴더 구조]
이 상태에서 해당 폴더를 PATH 환경 변수에 전역적으로 등록하든가, 아니면
환경 변수를 이용한 다중 ODAC 버전 테스트에서 설명한 대로 응용 프로그램 상에서 PATH 환경 변수에 등록해 주면 사용이 가능합니다.
정상적으로 OraMTS가 동작하는지 다음과 같은 코드로 응용 프로그램을 실행해 보면 끝!
static void Main(string[] args)
{
SetOdpnetPath();
string oradb = "user id=hr;password=hr; data source=xeservername";
using (TransactionScope scope = new TransactionScope())
using (OracleConnection conn = new OracleConnection(oradb))
{
conn.Open();
Random random = new Random((int)DateTime.Now.Ticks);
int regionId = random.Next(Int32.MaxValue);
OracleCommand command = new OracleCommand();
command.Connection = conn;
command.Parameters.Add(new OracleParameter("REGION_ID", regionId));
command.Parameters.Add(new OracleParameter("REGION_NAME", "test"));
command.CommandText = "INSERT INTO Regions(REGION_ID, REGION_NAME) VALUES(:REGION_ID, :REGION_NAME)";
command.ExecuteNonQuery();
command = new OracleCommand();
command.Connection = conn;
command.Parameters.Clear();
command.Parameters.Add(new OracleParameter("REGION_ID", regionId));
command.CommandText = "DELETE FROM Regions WHERE REGION_ID = :REGION_ID";
command.ExecuteNonQuery();
scope.Complete();
}
}
이 경우, MS DTC가 연동되기 때문에 코드 중간에 디버그 BP(Break Point)를 걸어두고 실행한 다음, "관리 도구" / "Component Serviices" 에서 다음과 같이 "Active" 수치가 1이 된 것을 확인할 수 있습니다.
[그림 2: MS DTC 동작 상태 확인]
[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]