EAI/XI/PI
                
              [XI/PI]Transaction Isolation Level(트랜잭션 고립 레벨)
                INSPIEN
                 2013. 9. 16. 10:24
              
                          
            JDBC Sender - Advanced tab
- DB의 데이터를 JDBC로 access시, 데이터의 정합성/일치성 을 보장하기 위한 기능
 - 데이터의 정합성과 관련된 3가지 이슈를 피하기 위한 방법
 - Dirty / NonRepeatable / Phantom Read
 
Dirty / NonRepeatable / Phantom Read
- Dirty Read (Commit하지 않은 데이터에 대한 접근성 결정)
 - 어떤 트랜잭션 T1이 다른 트랜잭션 T2의 commit하지 않은 데이터를 읽음
 - 트랜잭션 T2가 실행한 쿼리를 rollback하는 경우 T1이 읽은 데이터는 Dirty
 - NonRepeatable Read(동일한 트랜잭션에서 동일한 쿼리에 대한 검색되는 데이터의 일관성 여부 결정)
 - 어떤 트랜잭션 T1이 쿼리를 수행중임 (commit하지 않은 생태)
 - 다른 트랜잭션 T2가 데이터를 수정 후, T1이 같은 쿼리를 수행하면 다른 값을 얻게 됨 (트랜잭션 실행 중 Update 혹은 Delete로 데이터의 변형이 생기는 경우 발생)
 - Phantom Read (트랜잭션 실행 중 Insert로 데이터 행이 추가된 경우)
 - 어떤 트랜잭션 T1이 쿼리를 발생하여 조건에 맞는 row의 sets을 검색 중
 - 다른 트랜잭션 T2가 같은 테이블에서 다른 row의 sets(T1이 검색하고 있지 않은 row의 sets)의 데이터를 변경 후 트랜잭션 종료
 - T2가 변경한 값이 T1의 조건절에 영향을 주는 데이터 값으로, 종료되지 않은 T1이 같은 쿼리를 실행했을 경우, 처음보다 많은 row의 sets을 검색하게 되는 경우
 
Transaction Isolation Level 종류
- DB의 정합성을 위해 레코드 단위로 rock을 설정하면 되지만 심각한 성능저하 발생
 - 상황에 맞는 적절한 설정 필요 함
 
구분  | 
Dirty read  | 
Nonrepeatable read  | 
Phantom read  | 
Default (*)  | 
/  | 
/  | 
/  | 
None (**)  | 
/  | 
/  | 
/  | 
read_uncommitted  | 
Allowed  | 
Allowed  | 
Allowed  | 
read_committed(***)  | 
Prevented  | 
Allowed  | 
Allowed  | 
repeatable_read  | 
Prevented  | 
Prevented  | 
Allowed  | 
serializable  | 
Prevented  | 
Prevented  | 
Prevented  | 
- 데이터의 정합성이 어긋나는 상황을 피하기 위해 레코드 단위로 rock을 설정하면 병렬 처리 안됨
 - read_uncommitted < read_committed < repeatable_read < serializable 순으로 성능 좋음
 - (*) DB에 세팅된 isolation level을 따름
 - (**) JDBC 드라이버가 트랜잭션을 지원하지 않는 경우 선택 함
 - (***) Oracle DB의 default isolation level은 read_committed 임
 
Other options
- Database Auto-Commit-Enabled (No Transaction Handling)
 - JDBC 드라이버가 트랜잭션을 지원하지 않을 경우 체크 (LUWs 비활성화) 이 경우 DB 데이터의 정합성을 보장하기 위한 대안이 반드시 필요함
 - Disconnection from Database After Processing Each Message
 - 이 옵션을 선택하면 Poll Interval 마다 DB의 연결을 재 접속함
 - Remove Empty Tags
 - 데이터 폴링시 값이 비어있는 필드는 제거함(xml 문서의 용량 감소 용도)
 
JDBC Receiver - Processing tab
- Maximum Concurrency
 - 병렬 처리할 수 있는 메시지 수
 - XML Schema Interpreter
 - Key Tag Mandatory
 - key tag가 필수일 경우 체크
 - Interpretation of Empty String Value
 - Null Value : DB에 INSERT 안됨
 - Empty String : DB에 INSERT 됨
 - Run Operating System Command
 - Command Line
 - DB 동작 성공 후 실행할 명령어 입력
 - Timeout(secs)
 - Background 동작 대기시간
 - Terminate Program After Timeout
 - Background 동작 없이 종료
 
JDBC Receiver - Advanced tab
- Number of Retries of Database Transaction on SQL Error
 - SQL exception 발생시 DB 연결 재시도 수
 - Batch Mode
 - SQL을 일괄 실행 / 성능향상
 - Specify additional Parameter Names & Values
 - Refer to SAP Note 801367
 - Date/Time Format for Stored-Procedure Calls
 - SP call에서 사용하는 날짜/시간 포맷 정의
 
Reference
- Configuring the JDBC Adapter in the Integration Directory
 
http://help.sap.com/saphelp_nwpi71/helpdata/en/22/b4d13b633f7748b4d34f3191529946/frameset.htm
- Transaction Isolation Level
 
http://blog.naver.com/harksoo1974?Redirect=Log&logNo=70128194974