안녕하세요.
일하다가 질문이 있어서요. ^^ 새해복많이 받으세요.
전문이 오면 insert를 해야합니다.
현재 일련번호 max값을 테이블에서 select 한 다음 insert를 합니다.
전문이 여러개가 쭉쭉 들어오면 한꺼번에 처리를 합니다. 여기서 문제가 발생합니다.
배치가 ap(application서비스)를 콜하면 처음 1번전문이 들어오고
'select max(seq) from 전문테이블' 를 찾아와서
insert문에 컬럼에 넣는데...
select시 max(seq)가 10번이라면 1번전문이 제대로 insert되면 11번으로 들어가겠죠?
2번전문이 일찍들어와서 1번전문insert직전이라 max(seq)가 10으로 조회가 되는겁니다.
오라클시퀀스는 현재 쓰지 못하구요 최선의 방법으로 insert시에 max를 구해서 하면 좋은데
그마저도 좀 힘든상황입니다.
DB Rock을 걸면 insert나 delete update시에 다른사람의 액션(수정,삭세,입력)이 불가하게 되는걸로 아는데
저렇게 select시에 동시에 같은값을 조회하게되면 어떻게 수정을 해야하는지 궁금합니다.
select 시에는 DB Rock이 안걸리는것 맞죠?
ㅠㅠ 해결방안이 쉽게 나오지 않네요.
계속 모니터링 하고 있겠습니다.
추가- 검색하다가 SELECT MAX(make_no)+1 FROM .. WHERE .. FOR UPDATE ; 요문장을 봤습니다.
혹시 SELECT MAX(make_no)+1 FROM .. WHERE .. FOR INSERT ;는 안되는건가요?