본문 바로가기
study_db

시퀀스 생성과 시퀀스 초기화(수정) 방법

by developer_j 2023. 3. 20.
728x90
반응형

1. 시퀀스

 순차적으로 유일한 번호값을 매겨주는 오라클의 객체

 

2. 생성 방법

일단 생성 쿼리.각 옵션에 대한 설명은 3번을 참조한다.

CREATE SEQUENCE 시퀀스명
       [START WITH n]
       [INCREMENT BY n]
       [MAXVALUE n | NOMAXVALUE]
       [MINVALUE n | NOMINVALUE]
       [CYCLE | NOCYCLE]
       [CACHE | NOCACHE]
       [ORDER | NOORDER]

 

초간단하게 생성하기. 아무 옵션없이 생성

CREATE SEQUENCE TEST_SEQ;
SELECT TEST_SEQ.NEXTVAL FROM DUAL; --1

 

시작 번호 지정해주기

CREATE SEQUENCE TEST_SEQ_2 START WITH 100; 
SELECT TEST_SEQ_2.NEXTVAL FROM DUAL; --100. 100부터 시작한다.

 

 

3. 오라클 - sql 탭 까보기

내가 말하는 SQL 탭은 여기를 말한다.

 

여기를 눌러보면 해당 객체에 대한 쿼리가 나오게 되는데, TEST_SEQ의 경우 아래처럼 나오는 것을 확인할 수 있다.

CREATE SEQUENCE  "스키마"."TEST_SEQ"  MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER  NOCYCLE  NOKEEP  NOSCALE  GLOBAL ;

 

난 나머지 옵션을 준 적이 없는데 들어가있는 걸 보면 기본 옵션값이라는 얘기인데.. 각 옵션값을 뜯어보면

  • MINVALUE : 시퀀스 최소값
  • MAXVALUE : 시퀀스 최대값
  • INCREMENT BY n : 시퀀스 값 n씩 증가 
    0 외의 정수(양수/음수 둘다 가능) 지정
  • START WITH 21 : 다음 시작값
    아무 숫자나 지정해줘도 상관 없음. 아무것도 지정안해주면 21로 되어있다.
    다음 시작값이라는 뜻은, 메모리에 20까지 시퀀스값을 저장해두고 있는데
    예를들어 시퀀스를 5번까지 실행하다가 비정상적으로 DB가 종료되었을 때 다시 DB를 실행시켜서 NEXTVAL을 확인해보면 21이 찍히게 된다고 한다.
  • CACHE 20 : (CACHE / NOCACHE) 메모리 캐쉬 사이즈
    빠른 접근을 위해 메모리에 미리 시퀀스 저장해둔다. 
    SELECT TEST_SEQ.NEXTVAL FROM DUAL; 로 20까지 실행 한 뒤, 한번 더 실행해보면
    START WITH의 값이 41로 늘어나있는 것을 확인할 수 있음 (CACHE가 20이니까 기존 21 + 20 = 41)
  • NOORDER(ORDER / NOORDER) : 시퀀스 값 보증 여부
    오라클을 병렬 모드로 사용시 시퀀스가 제대로 할당되지 않을 수 있음. 여러 세션에서 데이터가 들어올 때, 요청 순서에 따라서 정확하게 시퀀스 값을 제공하고 싶다면 OREDER 옵션을 지정
  • NOCYCLE(CYCLE / NOCYCLE) : 시퀀스 순환 여부
    시퀀스가 MAXVALUE(최대값)에 도달하면 다시 최소값부터 CYCLE(순환) 할 것인지 혹은 에러발생시켜서 NOCYCLE 할 것인지 선택
  • NOKEEP(KEEP / NOKEEP) : 시퀀스 값 보호 여부
    프로그램 테스트 혹은 성능 시험을 하는 동안 현재값을 보호함. (DBA 권한 -> 이라는데 무슨 뜻인지 이해 X)
  • NOSCALE(SCALE / NOSCALE) : 시퀀스 확장가능 여부
    확장가능한 시퀀스인지 지정.인데 이해 X
  • GLOBAL(SESSION / GLOBAL) : 시퀀스 기준. 세션인지 GLOBAL인지
    세션을 기준으로 각각 시퀀스 번호가 생성되도록 할 수 있음. GLOBAL 지정 시 여러사용자가 같은 시퀀스 번호를 사용함.

 

음.. NOKEEP, NOSCALE 이 두 옵션은 구글링 해도 잘 나오지를 않더라

예를 들어
시퀀스를 클릭해서 시퀀스의 SQL 확인했을 때
A 시퀀스 SQL 은 START WITH 41 
B 시퀀스 SQL 은 START WITH 1000146
이면, 
A시퀀스.NEXTVAL -> 41 
B시퀀스.NEXTVAL -> 1000146

이 의미인 줄 알았는데 아니었네 😁

ORDER 속성 참조 - http://egloos.zum.com/elindreams/v/882841

SCALE 속성 참조 - https://fordeveloper2.tistory.com/9614

 

 

4. 시퀀스 관련 설정함수 참조 블로그

https://lasbe.tistory.com/96

 

[Oracle/SQL] 시퀸스(Sequence)와 초기화하는 방법

시퀸스(Sequence) 시퀸스는 유일한 값을 생성해주는 오라클의 객체로서 순서대로 나열되는 정수의 목록입니다. 테이블에 넣는 데이터들에게 순서대로 번호 값을 매기는 칼럼에 사용하기 좋습니다

lasbe.tistory.com

 

728x90
반응형