• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
조회 수 : 4161
2007.11.26 (22:31:18)
>* 고객시스템명 : A/S 시스템
>* TOInB 버전 : 5.x
>* 서버 Platform : Window
>* 문의 유형(질문/요청/참조) : SO 에러시 에러 정보 DB 저장 및 DB 트렌젝션 문의
>* 내용
>
> 1. SO 에서의 에러정보 DB 저장
>
> 작성된 SO 에서 에러발생시 에러정보(TBL_ERROR_CODE, TBL_ERROR_MSG, 기타..) 를 DB 에 저장하려 합니다.
> 이를 위해 에러정보 테이블과 해당 테이블에 값을 저장할 공용 SO (SO 'ErrorWrite') 를 만들었습니다.
>
> - 대상 SO에서 TB_on_error() 에 다음과 같은 형태로 기술
>
>    (1) 파일 로그 기록
>       TBL_Prn(tb_stderr, "TBL_ERROR_CODE[%d] : %s",  TBL_ERROR_CODE, TBL_ERROR_MSG);
>                        
>    (2) 데이터 테이블 생성(ErrInfo)
>
>    (3) SO 'ErrorWrite' 의 input1 포멧에 맞게 TBL_SetFormat() 함수 사용
>
>    (4) 데이터 테이블 에 값 셋팅 ( TBL_PutColumnString(), TBL_PutColumnString()... 사용)
>
>    (5) Row 삽입 ( TBL_InsertRow() )
>
>    (6) 해당 SO 'ErrorWrite' 호출 ( TBL_ExecLocalObject() 사용 )
>
>    (7) 데이터 테이블 삭제 ( 'ErrInfo' , TBL_DeleteDatatable() 사용 )
>
> - 상기와 같이 기술하여 대상 SO 를 컴파일 후 에러를 발생시키면 정상적으로 에러정보 기록 SO 를 호출합니다.
>
>   다만, 대상 SO 에서 에러가 발생한 관계로 TBL_ExecLocalObject()를 사용하여 호출한 에러정보 기록 SO 또한 트렌젝션에서 롤백 처리가 되어  정상적으로 DB 에 저장이 되지 않습니다.
>
> - 해결 방안
>  
>   에러정보 기록 SO ('ErrorWrite') 에서 SO 시작전 롤백 함수( TBL_Rollback() ) 를 수행하여 피호출 SO 에서 발생한 DB트랜젝션을 롤백한 후  에러정보를 DB 에 저장하고 커밋 함수 ( TBL_Commit() ) 를 실행하고자 합니다.
>
> - 고려사항 (문의사항)
>
>   a. 위 로직대로 처리할 경우 혹 제대로 DB 트랜젝션 관리가 안 된다거나 동시에 다른 SO에서 발생된 에러(롤백되어야 할 데이터)까지 커밋될 가능성은 없는지요.
>   b. 위 로직이 혹시 토인비의 트렌젝션 관리 기준에 위배되거나 하진 않는지요.
>   c. 과연 위의 로직이 의도한 바대로 제대로 동작할 지요.

[답변 SO간의 처리]
토인비의 경우 명시적으로 AutoCommit을 사용하고 있습니다.
그러나 위와 같이 TBL_Rollback() TBL_Commit()을 사용하는 경우 즉시 COMMIT, ROLLBACK이 된다고 보시면 됩니다.
그리고 토인비 내부에서 사용되는 Autocommit을 사용하는 경우
SO 내부에서 처리된 SQL은 에러시 자동으로 ROLLBACK 됩니다.
SO에서 SO CALL을 통하여 처리된 서비스의 경우도 동일 하다고 보시면 됩니다.
즉 SO1 -> SO2 를 호출한 경우 SO2에서 에러가 발생된 경우
SO1으로 ERROR를 RETURN하여 ROLLBACK 처리를 하여야 합니다.
이부분은 2. S2_Server Part_021209.doc 메뉴얼에 설명이 잘나와 있습니다.
[문서 다운로드]
http://www.gauce.com/download.php?id=toinbdown&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=14&filenum=1


>
>
>
> 2. 트렌젝션 문의
>
>  하나의 SO 에서 수행된 모든 PL-SQL 문과 select_sql, insert_sql, update_sql 등은 하나의 트렌젝션으로서 관리가 되는지 궁금합니다.
[답변]
SO내부에서 수행된 SQL및 PL-SQL의 경우 전체가 하나의 SESSION으로 유지가 됩니다. 즉 명시적인 Auto Commit이 된다고 보시면 됩니다.

>  또한 위 1번 문의사항과 같이 로컬 혹은 원격지의 호출된 SO 까지 하나의 DB트렌젝션 으로서 관리되고 있는 것인지 또한 의문사항입니다.
[답변]
위의 답변에 기술되어 있습니다. SO 간의 FAIL에 따른 처리를 하여야 합니다. 즉 SO1이 SO2를 호출 하였으면 SO2의 FAIL로 SO1또한 FAIL 처리 되며 이는 return 값에 따른 TB_FAIL이 return 되어 autocommit 되어야 합니다.

>  SO 내 event 함수 내 SQL 실행 문 또는 PL-SQL 수행시 ROLLBACK; 또는 COMMIT; 이라고 명시적으로 주시 않아도 토인비에서 자동적으로 이러한 DB 트랜젝션이 롤백과 커밋을 일으키는 것인 지 또한 궁금합니다.
[답변]
위에서도 언급하였듯이 명시적으로 AUTOCOMMIT 이 됩니다. TBL_Commit 등을 사용하지 않는한...

>
>
> * 관련된 메뉴얼을 찾아 이러한 부분을 충족할 수 있겠지만 검색 공력이 작아 찾지 못하고 이렇게 문의드립니다.
>   부디 좋은 답변 부탁드리겠습니다.
>

좀더 자세한 사항은 위에 링크한 문서를 참고하거나 문의전화 2106-1791  로 문의를 하여 주시기 바랍니다.
번호 제목 닉네임 조회 등록일
317 TBL_DatasetGetColStr 함수 에러
박수정
4050 2008-02-15
316 TBL_DatasetGetColStr 함수 에러 [1]
박수정
4113 2008-02-15
315 TBL_DatasetGetColStr 함수 에러 [1]
관리자
4866 2008-02-15
314 TBL_DatasetGetColStr 함수 에러 [1]
관리자
3939 2008-02-15
313 프린트가 에러납니다.
조한두
3944 2008-02-14
312 프린트가 에러납니다. [1]
기술지원44
3930 2008-02-25
311 현재 토인비 3년 정도 되었는데요 빌드가 새로 나온걸로 알고있는데요. 업그레이드?
조한두
3981 2008-02-14
310 현재 토인비 3년 정도 되었는데요 빌드가 새로 나온걸로 알고있는데요. 업그레이드? [1]
기술지원44
4037 2008-02-25
309 DATASET의 CrossTab기능 파일
도영곤
4021 2007-11-07
308 DATASET의 CrossTab기능 [1]
관리자
4101 2007-11-08
307 SO 에러시 에러 정보 DB 저장 및 트렌젝션 문의 [1]
황우상
4061 2007-11-05
Selected SO 에러시 에러 정보 DB 저장 및 트렌젝션 문의 [1]
관리자
4161 2007-11-26
305 LuxeCombo 사용시 스크롤 기능 [1]
정재일
3969 2007-10-23
304 LuxeCombo 사용시 스크롤 기능 [1]
관리자
3977 2007-10-24
303 토인비 sob에서 변수처리 관련 [1]
박재철
4070 2007-09-21
302 토인비 sob에서 변수처리 관련 [1]
관리자
4035 2007-09-28
301 레포트 이미지 변환 [1]
하제욱
4180 2007-09-15
300 레포트 이미지 변환 [1]
기술지원45
4024 2007-09-28
299 Toinb 로그가 남지 않습니다.
박수정
3912 2007-08-31
298 Toinb 로그가 남지 않습니다. [1]
관리자
3903 2007-09-01
Tag List
XE Login