by 코리아 [DB 기타] ORA-00001 unique constraint [2017.09.07 15:16:11]
안녕하세요
Oracle 에러 발생 관련하여 문의 드립니다. (ver. 11g)
[현상]
merge문을 사용하여 데이터가 있으면 update 하고 없으면 insert 하려고 구현되어 있습니다.
하지만 merge문이 동시다발적으로 유입이 되어 서로 insert 를 하려다가 ORA-00001: unique constraint 가 발생 됨
이후 테이블 Lock 발생
[문의]
ORA-00001: unique constraint 에러가 발생되면 기본적으로 Rollback 처리가 되는 것으로 알고 있습니다.
아래 문의사항에 답변 부탁드립니다~!
1. ORA-00001: unique constraint 에러가 발생되면 Rollback 이 되나요?
2. Rollback 수행이 된다면 실패되는 경우도 있나요?
확인 부탁 드립니다~!
try { // EXEC Query stmt.ExecuteArrayUpdate(numArrayRows); int nAffectedRows = ((Statement*)stmt)->getUpdateCount(); if (nAffectedRows == 0) { m_Reason = eResNotFound; stmt.Rollback(); } else if ( nAffectedRows != hmInfoList.size() ) { m_Reason = eResEtcFail; stmt.Rollback(); EELOG(RED(FN << "Different update count map.size(" << hmInfoList.size() << ") : AffectedRows(" << nAffectedRows << ")")); } else { stmt.Commit(); DDLOG(FN << "xxxx" << " AffectedRows:" << nAffectedRows ); } iAffectedCnt = nAffectedRows; } catch(SQLException ex) { CheckErrorCode( ex.getErrorCode() ); EELOG(RED(FN << "code: " << ex.getErrorCode() << ", " << ex.what())); }
EXCEPTION 처리 구간에서 발생 된 에러입니다.
코드에서 catch구문에는 commit, rollback 처리함수는 없네요