본문 바로가기
Database/Oracle

[ORACLE] SEQUENCE() 자동 증가 값 생성 원리와 실전 예제 완벽 정리

by Papa Martino V 2025. 6. 9.
728x90

오라클 SEQUENCE() 자동 증가값 생성 원리와 실전 예제 완벽 정리
[Oracle] SEQUENCE

 

1. ORACLE SEQUENCE란?

SEQUENCE는 Oracle Database에서 유일한 숫자 값을 자동으로 생성하기 위해 사용하는 객체입니다. 주로 기본 키(PK)로 사용되는 고유 값을 생성하거나, 일련번호를 부여할 때 활용됩니다.

2. SEQUENCE의 필요성

  • 중복 없는 고유 값 자동 생성
  • 동시성 문제 해결
  • 복잡한 로직 없이 증가 번호 관리
  • 다중 사용자 환경에서 충돌 방지

3. 기본 SEQUENCE 생성 문법

CREATE SEQUENCE 시퀀스명
  START WITH 시작값
  INCREMENT BY 증가값
  [MINVALUE 최소값]
  [MAXVALUE 최대값]
  [CYCLE | NOCYCLE]
  [CACHE n | NOCACHE];

4. 기본 SEQUENCE 생성 예제

CREATE SEQUENCE emp_seq
  START WITH 1
  INCREMENT BY 1
  NOCACHE
  NOCYCLE;

emp_seq는 1부터 시작해 1씩 증가하며, 캐시를 사용하지 않고 순환도 하지 않는 기본적인 시퀀스입니다.

5. NEXTVAL과 CURRVAL 사용 예제

-- 다음 숫자 가져오기
SELECT emp_seq.NEXTVAL FROM dual;

-- 마지막으로 생성된 숫자 가져오기
SELECT emp_seq.CURRVAL FROM dual;

주의: CURRVAL은 NEXTVAL이 호출된 이후에만 사용할 수 있습니다.

6. SEQUENCE를 INSERT 문에 활용하기

INSERT INTO employees (id, name, department)
VALUES (emp_seq.NEXTVAL, '홍길동', '영업부');

자동으로 증가된 번호를 기본 키로 사용하는 가장 일반적인 형태입니다.

7. SEQUENCE 옵션 상세 비교

옵션 설명 기본값
START WITH 초기 시작값 설정 1
INCREMENT BY 증가 또는 감소 단위 1
MINVALUE / MAXVALUE 허용 범위 제한 NOMINVALUE / NOMAXVALUE
CYCLE 최대값 도달 시 다시 시작 NOCYCLE
CACHE 성능 향상을 위한 메모리 캐싱 20

8. SEQUENCE 수정 예제

ALTER SEQUENCE emp_seq
  INCREMENT BY 10
  CACHE 50;

시퀀스의 증가 단위를 10으로, 캐시를 50으로 수정합니다.

9. SEQUENCE 삭제

DROP SEQUENCE emp_seq;

더 이상 필요하지 않은 시퀀스는 삭제하여 오브젝트 관리를 효율화할 수 있습니다.

10. 실무 활용 예: 날짜 기반 일련번호

-- SEQUENCE와 SYSDATE를 함께 활용
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') || LPAD(daily_seq.NEXTVAL, 4, '0')
FROM dual;

20250608 기준 결과 예시: 202506080001

11. SEQUENCE와 트리거 연동

CREATE OR REPLACE TRIGGER trg_emp_id
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
  :NEW.id := emp_seq.NEXTVAL;
END;
/

INSERT 시 자동으로 id가 생성되도록 트리거와 연계한 예제입니다.

12. SEQUENCE 성능 주의사항

  • CACHE 값을 너무 작게 설정하면 성능 저하 발생
  • 분산 시스템에서는 NOCACHE/NOCYCLE을 고려해야 중복 방지
  • 트랜잭션 ROLLBACK 시에도 시퀀스 값은 소모됨
  • CURRVAL은 세션 내에서만 유효

13. 최신 Oracle에서의 변화 (Oracle 12c 이후)

  • IDENTITY 칼럼 도입으로 SEQUENCE 자동화
  • CREATE TABLE 시 시퀀스 내장 가능
CREATE TABLE employees (
  id NUMBER GENERATED ALWAYS AS IDENTITY,
  name VARCHAR2(100)
);

14. 결론

Oracle SEQUENCE는 기본 키 생성을 포함해 다양한 업무 로직에 필수적인 객체입니다. 단순한 숫자 생성 그 이상의 역할을 하며, 트랜잭션 및 성능 특성까지 이해하고 사용할 때 진정한 가치가 발휘됩니다.

출처

728x90