시퀀스 생성 이후에 프로그램상 생성되는 숫자가 1,2,3 으로 순차적으로 증가하는 것이 아니라 어느 순간 10, 20 씩 늘어나는 경우가 있다.
왜그러는지 찾아보니까 이유는 sequence에 cache 옵션이 선택 되었기 때문이었다.
오류가 나는 이유중 대표적인 것은 DB를 멈추거나 프로그램 또는 pc전원이 off 되는 경우에 메모리에 있던 번호가 삭제되기 때문에 다음 번에 실행 시켰을 때, 메모리에 올라와있던 번호 이후부터 시작되어 이러한 증상이 발생 된다.
예를 들어 cache옵션이 10개씩 시퀀스번호를 생성하도록 설정되어 있다면 한번에 1부터 10까지 시퀀스 번호를 생성한다.
이 상태에서 DB를 중지하고 재시작 시키면 메모리에 있던 10번까지의 시퀀스가 삭제되고, 11번부터 20번까지 메모리에
시퀀스번호가 저장되기 때문에 이런 경우에 1,11,21로 시퀀스번호가 증가 될 수 있다.
우선 시퀀스 증가 방식을 설정하지 않았을 경우
- 시퀀스를 1씩 증가하도록 증가하는 쿼리
// table_id 에 시퀀스를 설정
create sequence table_seq increment by 1 start with 1;
를 셋팅한다. 그 후에
- cache 옵션을 사용하지 않도록 설정을 변경하는 쿼리
alter sequence table_id nocache;
를 셋팅하고 커밋한다.
항상 커밋을 해야하는것을 잊지말기
그 후에 다시 테이블에 내용이 추가되면 시퀀스값이 정상적으로 증가하는 것을 볼 수 있다.
'2. SQL' 카테고리의 다른 글
** Commit의 중요성 ( 무한로딩 ) (0) | 2022.05.27 |
---|