* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window Server 2008 R2 Enterprise, 64bit (Service Pack 1) | |
CUBRID 9.3 <9.3.9.0002> <64bit release build for Windows_NT> <Aug 4 2007 12:26:47> | |
[도움말]-[버전정보] 확인 | |
java |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
에러 재현 방법 및 정보는 아래와 같습니다.
## session 1 정보 ##
- 환경 : transaction isolation level 1
- 쿼리 수행 :
- 동일 테이블에 update
- 동일 테이블에 insert
- 동일 테이블에 delete
## session 2 정보 ##
- 환경 : transaction isolation level 1
- 쿼리 수행 :
- 동일 테이블에 update
- 동일 테이블에 insert
- 동일 테이블에 delete
## 조금 더 상세히는 아래와 같습니다.
session 1 : update
session 1 : insert
session 1 : delete
session 2 : update
session 2 : insert
session 2 : delete
session 2 : commit
session 1 : commit
위와 같은 상황(?)에서 -72에러가 납니다.
autocommit false인 상태이며, session별로 다른 PK를 갖은 row를 대상으로 update/insert/delete 합니다.
## 에러 정보 (C:\CUBRID\log\server\ Table_date.err 파일) ##
ERROR *** file ..\..\src\transaction\lock_manager.c, line 2659 ERROR CODE = -72 Tran = 8, CLIENT = SVDB-CUBRID:cub_cas(10744), EID = 4
Your transaction (index 8, DBA@SVDB-CUBRID|10744) has been unilaterally aborted by the system.
72번에러가 납니다. 이전 Q&A건들을 보니, deadlock이라는 것을 확인하였습니다.
기본 설정으로 사용중이었는데 level 1로 낮추면 해결될 수 있을 것이라 생각했으나, 동일하게 발생합니다.
command 창(cmd > csql)로 하였을 때는 transaction level 1일 때 재현이 되지 않습니다.
그러나, 코드상으로 돌릴 시 재현되므로, 확인이 필요합니다.
위 session 1/2는 동일 action이나, update/insert/delete 되는 대상이 겹치지 않습니다.
## 테이블 정보 ##
CREATE TABLE table1(
C_CODE varchar(32) NOT NULL,
TO_DEPTCODE varchar(32) NOT NULL,
TO_ROLECODE varchar(32) NOT NULL,
TO_POSITIONCODE varchar(32) NOT NULL,
E_DEPT varchar(16) NOT NULL,
TO_DESC varchar(256),
TO_DATE bigint,
TO_ADMINID varchar(64),
CP_HASHCODE varchar(32) NOT NULL,
TO_ADMINNAME varchar(128),
R_CONTEXT int NOT NULL,
N_CONTEXT int NOT NULL,
L_CODE varchar(32) NOT NULL,
C_METHOD varchar(32) NULL,
C_START_DATE bigint,
C_END_DATE bigint,
F_STATUS varchar(32) NOT NULL,
PRIMARY KEY CLUSTERED (C_CODE,TO_DEPTCODE,TO_ROLECODE,TO_POSITIONCODE,E_DEPT,R_CONTEXT,N_CONTEXT,F_STATUS)
);