오라클 시퀀스(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은 하지 않는 상황)
'공부 > 데이터베이스' 카테고리의 다른 글
[oracle] 패키지 (0) | 2022.10.24 |
---|---|
[oracle] 프로시저, 함수 (1) | 2022.10.24 |
[데이터베이스] 오라클 CASE WHEN 표현식 (0) | 2022.06.15 |
[데이터베이스] mysql에서 text와 varchar의 차이 (0) | 2022.03.02 |
[데이터베이스] influxdb, 인플럭스디비 (0) | 2022.02.17 |