procedure BitBtn1Click(Sender: TObject);
begin
DataMd.DBDZAIS.StartTransaction; //MS-SQL서버 7.0
DataMd.DBtraffic.startTransaction; //오라클 10g
//위 두 데이터 베이스는 한 회사에 있는 다른 서버 입니다. ip주소가 다른 상태입니다.
//각각의 Client를 설치하고 BDE로 연결 했습니다.
try
Query로 DBDZAIS 디비의 한 테이블에 데이터 입력.
Query로 DBtraffic 디비의 한 테이블에 데이터 입력.
DataMd.DBDZAIS.Commit;
DataMd.DBtraffic.commit;
except
on E:Exception do begin
DataMd.DBDZAIS.RollBack;
DataMd.DBtraffic.rollback;
showmessage('실패' + #13+ E.Message);
end;
end;
end;
위처럼 처리를 하려고 합니다.
그런데 가만히 보면 뭔가 이상합니다.
1. 스타트트랜잭션은 두개의 데이터베이스가 동시에 시작 할 수 있습니다.
2. DataMd.DBDZAIS.Commit; ==> 성공하고
DataMd.DBtraffic.commit; ===> 실패라면...
except를 타서 롤백을 만날텐데요... 그럼 이미 성공한 DBDZAIS는 롤백의 의미가 없어지는군요...맞죠?
3. DataMd.DBDZAIS.Commit; ==> 성공하고
DataMd.DBtraffic.commit; ==> 성공하면 아무문제 없네.
4. DataMd.DBDZAIS.Commit; ==> 실패하면
except를 타서 롤백을 만나고 두 데이터베이스에 롤백작업을 하니가 아무 문제 없네.
자... 이럴때요 2번상황을 어찌 해결 할 수 있나요?
혹시 이렇게 처리한 경험을 가지고 계신분 있으시면 한마디 부탁 드립니다.
감사합니다.
두개를 분리하는것이 맞습니다.
아니면 상하구조로 exception else일때 두번째 commit 실행해야 합니다.