채번 테이블을 사용하여 키값을 가져오는 방식은 추천할만한 방법은 아니다. 특히 키값이 건너뜀 없이 순차적으로 발행되어야 하는 업무요건이라면 채번 트랜잭션과 메인 트랜잭션이 분리될 수 없기 때문에 심한 Lock 경합을 피할 수 없을 것이다. 이런 업무요건은 heavy 한 동시트랜잭션 환경에서는 받아들일 수 없는 것이다. 키값이 건너뛰어 발행되도 괜찮다면 채번 트랜잭션은 메인 트랜잭션으로부터 분리하여 Lock 경합을 최소화하여야 한다.
MAX + 1은 현재 가장 큰 값에 + 1을 시켜주는 것이기 때문에 중복이 될 확률이 높다. (동시성 보장 X)
INSERT INTO 테이블(일련번호, COL2, COL3 ...)
SELECT DECODE(MAX(번호), NULL, 1, MAX(번호)+1) 일련번호
FROM 트랜잭션 WHERE ROWNUM = 1
시퀀스는 크리티컬 세션이 보장되기 때문에 절대 데이터의 중복처리가 되질 않는다.
create sequence table_seq
increment by 1
start with 1
maxvalue 1000000000
cache 30;