공부/데이터베이스

[ORACLE] 시퀀스

ghhong 2022. 10. 24. 10:12

오라클 시퀀스(sequence) :

자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체이다. 새로운 ROW 추가될 가장 값에 1 더하는 로직을 어딘가 추가해야하지만 시퀀스를 사용하면 이러한 로직이 필요 없다.

 

시퀀스가 필요한 이유 :

매번 최대 글번호를 확인하고 값보다 1 값을 계산해 새로운 번호를 INSERT하려 하는경우에, 번호 column index 생성되어 있다면 index_desc 등의 힌트로 쿼리의 속도 자체는 얼마 나올 있지만, 실제 서비스를 운영할 때는 이러한 쿼리를 실행한다는게 DISK IO 계속 발생시키고 DB CONNECTION POOL 개라도 사용하기 때문에 부담이 된다. 따라서 SEQUENCE 오브젝트로 값을 바로 INSERT 하는 식으로 DB 부하를 있다.

 

 

시퀀스 생성 :

--문법:

CREATE SEQUENCE [시퀀스명]

INCREMENT BY [증감숫자] --증가 또는 감소시킬 숫자

START WITH [시작숫자] -- 시작할 숫자

NOMINVALUE | MINVALUE [최솟값] -- 최솟값을 기본값 사용할 , 지정할

NOMAXVALUE | MAXVALUE [최대값] -- 최대값을 기본값 사용할 , 지정할

CYCLE | NOCYCLE -- CYCLE 설정시 최대값에 도달하면 최솟값부터 다시 시작한다. NOCYCLE설정시 최대 시퀀스 생성 후에는 시퀀스가 생성되지 않는다.

CACHE | NOCACHE --CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고 NOCACHE 설정시 시퀀스 값을 메모리에 미리 할당하지 않는다.

ORDER | NOORDER -- 반드시 순차적으로 모두 채워서 시퀀스를 사용하거나 시퀀스 값을 건너뛸 있거나

 

--예제

CREATE SEQUENCE SEQ_LOG_ID --이름

START WITH 100000 --시작번호

INCREMENT BY 1 -- 증감

MAXVALUE 999999999 --최대값

MINVALUE 1 --최소값

CYCLE -- 순환

CACHE 20 -- 시퀀스 번호를 20번까지 미리 생성하여 Shared Pool Library Cache 미리 상주시키는 기능이다. DB 중지시키거나 전원이 꺼지면 메모리에 있던 번호가 삭제되어 번호가 20번씩 추가될 수도 있다.

NOORDER; --시퀀스 건너뛰기 가능. 만약 DB INSTANCE 여러 개인 경우(RAC: REAL APPLICATION CLUSTER 구성 ) 각각의 INSTANCE 동일한 시퀀스를 동시에 부를 있고, 경우 상황에 따라 시퀀스가 건너뛰어지는 경우가 생길 있다.(DB1 DB2 같은 시퀀스를 동시에 불러 NEXTVAL 사용하고 COMMIT 하지 않는 상황)