2024. 3. 31. 22:33ㆍ카테고리 없음
시퀀스는 특정한 숫자 식별자를 생성하는 방법에서 사용하는 오브젝트이다. 데이터베이스 테이블의 기본 키로 사용되지만 생성되는 순서를 이용하여 정렬에서 사용하기도 한다. 또한, 시퀀스만을 이용하여 기본 키로 사용할 때에는 재사용을 하지 못하여 숫자의 중복이 없지만, 시퀀스가 다른 칼럼과 함께 기본 키로 사용되는 경우에는 재사용이 가능하여 숫자의
중복이 발생하기도 한다.
기본 키나 유니크 키를 위해 주로 사용된다. 시퀀스 객체 스스로만 사용하는 것은 의미가 없으며, 기존의 테이블과 연계해서 사용하게 된다. 시퀀스는 하나 또는 여러 테이블의 칼럼에 고유한 숫자 값을 자동으로 생성할 수 있기 때문에 여러 사용자가 동시에 사용할 때 데이터의 중복을 해결하는 방안으로 많이 사용된다.
■ 시퀀스의 특징
시퀀스는 병렬적으로 처리할 수 있다 또, 메모리에 미리 번호를 보관하여 접근 효율성을 증가시킬 수 있고 테이블과 독립적으로 존재하기 때문에 여러 테이블에서도 사용할 수 있다.
- 시퀀스를 이용한 시퀀스
① 입력에 대해 시퀀스를 이용하여 번호를 부여함
② 부여받은 번호로 동시에 입력함
- 테이블을 이용한 시퀀스
① 입력에 대해 사용되는 테이블에 잠금(LOCK)을 건다.
② 사용되는 테이블에서 해당 칼럼의 MAX 값에 1을 더한 값을 구한다.
③ 구해진 값으로 입력한다.
④ 해당 테이블의 잠금을 해제(UNLOCK)한다.
⑤ 다시 ①을 반복한다.
일반적으로 시퀀스를 이용한 방식이 간편하고 빠르며, 중복을 방지할 수 있다.
■ 기존 시퀀스 확인
9990 이 최댓값이며 10씩 증가하고 현재 280번이다.
■ 시퀀스 생성
・[INCREMENT BY 정수]
시퀀스 번호를 정수만큼씩 증가(DEFAULT = 1)
・[START WITH 정수] 시작 값을 지정(DEFAULT = 1), CYCLE 옵션을 사용한 경우 다시 값 을 생성할 때 MINVALUE에 설정한 값부터 시작
・[MAXVALUE 정수] 증가할 수 있는 최댓값
・ [NOMAXVALUE (DEFAULT)] 시퀀스의 최댓값이 없음을 정의, 오름차순은 \(10^{27}\) 까지 커질 수 있고, 내림차순으로 1까지 작아질 수 있음.
・[MINVALUE 정수] 생성할 수 있는 최솟값
・[NOMINVALUE (DEFAULT)] 시퀀스의 최솟값이 없음을 정의 오름차순은 최소 1까지, 내림차순으로 \(-10^{27}\) 까지
・[CYCLE] : 최대 또는 최솟값에 도달한 후 값을 다시 생성
・[NOCYCLE(DEFAULT)] 최대 또는 최솟값에 도달한 후 값을 다시 재시작할 수 없음
・[CACHE] 빠른 접근을 위해 시퀀스의 값을 메모리에 저장 (DEFAULT 20)
・[NOCACHE]
NOCACHE 옵션을 사용하면 시퀀스 값을 캐시하지 않으므로, 매번 시퀀스 값을 요청할 때마다 디스크 I/O가 발생하여 시퀀스 값이 증가한다. 이는 일부 시스템에서는 더 많은 오버헤드를 초래할 수 있지만, 시퀀스 값이 정확히 증가해야 하는 환경에서는 사용될 수 있다.
- NOCACHE 옵션을 사용해야 할 때
1. 고유한 시퀀스 값이 필요한 경우:
- 시퀀스 값이 고유해야 하고 중복이 발생하면 안 되는 경우에는 NOCACHE 옵션을 사용하여 시퀀스 값을 캐시하지 않고 매번 새로운 값을 생성할 수 있다.
2. 시퀀스 값이 자주 사용되지 않는 경우:
- 시퀀스 값이 자주 요청되지 않고, 시퀀스 값을 생성하는 데 디스크 I/O가 큰 부하를 주지 않는 경우에는 NOCACHE 옵션을 사용하여 불필요한 캐시를 피할 수 있다.
3. 시퀀스 값의 순서가 중요하지 않은 경우:
- 시퀀스 값의 순서가 중요하지 않거나, 시퀀스 값이 연속적이지 않아도 되는 경우에는 NOCACHE 옵션을 사용하여 시퀀스 값을 캐시하지 않고 더 빠르게 값을 제공할 수 있다.
4. 시퀀스 값을 여러 트랜잭션에서 동시에 사용하는 경우:
- 여러 트랜잭션이 동시에 시퀀스 값을 요청하고, 시퀀스 값을 캐시할 때 발생하는 동시성 문제를 피하려는 경우에는 NOCACHE 옵션을 사용할 수 있다.
■ 시퀀스 사용
NEXTVAL: 새로 작성된 시퀀스의 다음 값을 반환
CURRVAL:새로 작성된 시퀀스의 현재 값을 반환
시퀀스는 자체만으로 사용되지 못하고 CURRVAL과 NEXTVAL이라는 가상 칼럼을 사용하여 값을 이용하여 반환받아 사용한다. CURRVAL을 사용하려면 반드시 NEXTVAL을 먼저 사용해야 한다. CURRVAL의 값은 NEXTVAL의 값을 참조하기 때문에 NEXTVAL 사용되지 않은 상태에서 CURRVAL을 사용하면 아무런 값이 없어서 에러가 발생한다.