쫑's바른생활

SQL 시퀀스(Sequence) 순서오류 nextval_1,2,3,4, 21_캐시관련 본문

개발일지/코린이

SQL 시퀀스(Sequence) 순서오류 nextval_1,2,3,4, 21_캐시관련

쫑이야기 2023. 8. 3. 18:18
728x90
반응형

SQL에서 sequence 를 생성하였고, insert를 통해 데이터를 넣어주었다.
 
데이터를 차례차례 넣으니 sequence로 인해 레코드들의 순서가 매겨졌는데,
급 1 2 3 4 5에서 21이 되었다. (아래 예제에서 BNO 2는 delete로 삭제 테스트 진행한 상황입니다.)

 
이렇게 갑자기 6으로 생성되지 않고, 21로 생성됨.
 
왜그런가 서치를 하다보니, 신빙성 있는 글을 발견하였다.
 
 
 
<원인(추측)>
sequence 생성내용을 조회해보면 아래와 같이 캐시 정보가 나온다.

캐시가 20으로 설정되어있어, 데이터 서버(?)를 껐다 키게되면 저절로 캐시가 20을 먹고 순서가 21로 설정되는 듯 하다.
default 값이 캐시 20으로 설정된다.
value값이 지금 생성된 레코드 순서의 다음 순서를 말하는 것 같은데,
21이 생성되어 22로 되었다. ( 41로 된 경우도 발생. 이 때에도 20캐시를 먹어서 그런듯)
 

728x90


<해결방법>
1. 처음부터 sequence를 생성할 때에 nocache로 설정
>>>>
CREATE SEQUENCE 시퀀스이름 NOCACHE;

2. 21이후 숫자라도 캐시를 먹지않기 위해 nocache로 수정
>>>>
ALTER SEQUENCE 시퀀스이름 NOCACHE;

3. sequence 삭제 후 다시 생성(초기화)
>>>>
DROP SEQUENCE 시퀀스이름;
SELECT 시퀀스이름.nextval FROM dual;
(더미테이블로 시퀀스 순서확인, 원하는순서로 계속 확인하여 증가시키기. 필자는 6을 원하여 5까지 확인 후 insert 실행)

 
 
 
 

728x90
반응형
Comments