• 고객센터
  • 교육
  • 매뉴얼
  • 데모
  • 제품소개
조회 수 : 4058
2007.11.05 (02:10:33)
* 고객시스템명 : 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. 과연 위의 로직이 의도한 바대로 제대로 동작할 지요.



2. 트렌젝션 문의

  하나의 SO 에서 수행된 모든 PL-SQL 문과 select_sql, insert_sql, update_sql 등은 하나의 트렌젝션으로서 관리가 되는지 궁금합니다.
  또한 위 1번 문의사항과 같이 로컬 혹은 원격지의 호출된 SO 까지 하나의 DB트렌젝션 으로서 관리되고 있는 것인지 또한 의문사항입니다.
  
  SO 내 event 함수 내 SQL 실행 문 또는 PL-SQL 수행시 ROLLBACK; 또는 COMMIT; 이라고 명시적으로 주시 않아도 토인비에서 자동적으로 이러한 DB 트랜젝션이 롤백과 커밋을 일으키는 것인 지 또한 궁금합니다.


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