XADatasource 사용시 롤백 이슈

by devcc posted Mar 22, 2022


* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.

OS
Linux 64bit
CUBRID Ver.
CUBRID 2008 R4.1 (8.4.1.26001)
CUBRID TOOL Ver.
응용 환경(API)
java


* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.

 

에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

 

안녕하세요 XADatasource 사용 시 Rollback 이슈가 있어 문의드립니다
https://www.cubrid.com/qna/3830620 와 비슷한 문의인 것 같은데
XAConnection을 얻을 때 setAutoCommit(false)로 진행하여도
초기 수행 한번 이후에는 늘 auto commit으로 진행됩니다
로그는 하기와 같습니다

-- application 구동 후 최초 1회, exception 후 롤백 되는 케이스 (정상케이스)
03/16 11:44:48.237 (0) STATE idle
03/16 11:44:52.064 (0) CLIENT IP 00.00.00.00
03/16 11:44:52.072 (0) connect db AA user BB url xa session id 5820767
03/16 11:44:52.072 (0) DEFAULT isolation_level 3, lock_timeout 30
03/16 11:44:52.083 (1) prepare 0 SELECT /* selectA */ 
03/16 11:44:52.096 (1) prepare srv_h_id 1 (PC)
03/16 11:44:52.121 (1) set query timeout to 0 (no limit)
03/16 11:44:52.121 (1) execute_all srv_h_id 1 SELECT /* selectA */
03/16 11:44:52.121 (1) bind 1 : INT 1000
03/16 11:44:52.122 (1) execute_all 0 tuple 1 time 0.001
03/16 11:44:52.177 (0) close_req_handle srv_h_id 1
03/16 11:44:52.177 (2) prepare 0 UPDATE /* updateA */ 
03/16 11:44:52.178 (2) prepare srv_h_id 1 (PC)
03/16 11:44:52.184 (2) set query timeout to 0 (no limit)
03/16 11:44:52.184 (2) execute_all srv_h_id 1 UPDATE /* updateA */ 
03/16 11:44:52.184 (2) bind 1 : VARCHAR 
03/16 11:44:52.184 (2) bind 2 : VARCHAR
03/16 11:44:52.184 (2) bind 3 : NULL
03/16 11:44:52.184 (2) bind 4 : NULL
03/16 11:44:52.184 (2) bind 5 : VARCHAR
03/16 11:44:52.184 (2) bind 6 : VARCHAR
03/16 11:44:52.184 (2) bind 7 : VARCHAR
03/16 11:44:52.184 (2) bind 8 : VARCHAR
03/16 11:44:52.184 (2) bind 9 : VARCHAR 
03/16 11:44:52.184 (2) bind 10 : INT 1000
03/16 11:44:52.185 (2) execute_all 0 tuple 1 time 0.001
03/16 11:44:52.196 (0) close_req_handle srv_h_id 1
03/16 11:44:52.196 (3) prepare 0 SELECT /* selectB */ 
03/16 11:44:52.197 (3) prepare srv_h_id 1 (PC)
03/16 11:44:52.202 (3) set query timeout to 0 (no limit)
03/16 11:44:52.202 (3) execute_all srv_h_id 1 SELECT /* selectB */
03/16 11:44:52.202 (3) bind 1 : INT 1000
03/16 11:44:52.203 (3) execute_all 0 tuple 1 time 0.000
03/16 11:44:53.001 (0) end_tran ROLLBACK
03/16 11:44:53.001 (0) end_tran 0 time 0.000
03/16 11:44:53.001 (0) *** elapsed time 0.929



-- 이후 exception 이 발생해도 롤백 되지 않는 케이스 (비정상 케이스) > 매 statement마다 auto commit이 발생함
03/16 11:50:21.492 (0) STATE idle
03/16 11:50:30.316 (0) CLIENT IP 00.00.00.00
03/16 11:50:30.324 (0) connect db AA user BB url xa session id 5821512
03/16 11:50:30.324 (0) DEFAULT isolation_level 3, lock_timeout 30
03/16 11:50:30.334 (8) prepare 0 SELECT /* selectA */
03/16 11:50:30.343 (8) prepare srv_h_id 1 (PC)
03/16 11:50:30.349 (8) set query timeout to 0 (no limit)
03/16 11:50:30.349 (8) execute_all srv_h_id 1 SELECT /* selectA */ 
03/16 11:50:30.349 (8) bind 1 : INT 1000
03/16 11:50:30.350 (8) execute_all 0 tuple 1 time 0.001
03/16 11:50:30.350 (0) auto_commit
03/16 11:50:30.350 (0) auto_commit 0
03/16 11:50:30.350 (0) *** elapsed time 0.027
03/16 11:50:30.360 (0) close_req_handle srv_h_id 1
03/16 11:50:30.360 (9) prepare 0 UPDATE /* updateA */
03/16 11:50:30.360 (9) prepare srv_h_id 1 (PC)
03/16 11:50:30.367 (9) set query timeout to 0 (no limit)
03/16 11:50:30.367 (9) execute_all srv_h_id 1 UPDATE /* updateA */
03/16 11:50:30.367 (9) bind 1 : VARCHAR 
03/16 11:50:30.367 (9) bind 2 : VARCHAR
03/16 11:50:30.367 (9) bind 3 : NULL
03/16 11:50:30.367 (9) bind 4 : NULL
03/16 11:50:30.367 (9) bind 5 : VARCHAR
03/16 11:50:30.367 (9) bind 6 : VARCHAR 
03/16 11:50:30.367 (9) bind 7 : VARCHAR
03/16 11:50:30.367 (9) bind 8 : VARCHAR
03/16 11:50:30.367 (9) bind 9 : VARCHAR 
03/16 11:50:30.367 (9) bind 10 : INT 1000
03/16 11:50:30.368 (9) execute_all 0 tuple 1 time 0.001
03/16 11:50:30.368 (0) auto_commit
03/16 11:50:30.368 (0) auto_commit 0
03/16 11:50:30.368 (0) *** elapsed time 0.009
03/16 11:50:30.375 (0) close_req_handle srv_h_id 1
03/16 11:50:30.375 (10) prepare 0 SELECT /* selectB */
03/16 11:50:30.376 (10) prepare srv_h_id 1 (PC)
03/16 11:50:30.382 (10) set query timeout to 0 (no limit)
03/16 11:50:30.382 (10) execute_all srv_h_id 1 SELECT /* selectB */
03/16 11:50:30.382 (10) bind 1 : INT 1000
03/16 11:50:30.382 (10) execute_all 0 tuple 1 time 0.001
03/16 11:50:30.382 (0) auto_commit
03/16 11:50:30.382 (0) auto_commit 0
03/16 11:50:30.382 (0) *** elapsed time 0.008
03/16 11:50:30.442 (0) check_cas 0
03/16 11:50:30.448 (0) con_close
03/16 11:50:30.448 (0) disconnect

 

혹시 JDBC 드라이버에 fix 된 내용이나, 추가 설정으로 XA시 auto commit을 막을 수 있는 방법이 있을까요?
현재 사용중인 JDBC 버전은 cubrid:cubrid-jdbc:10.2.7.8896 입니다

 


Articles