본문 바로가기

프로그램개발

오라클 DB SEQUENCE에 대하여





DB Sequence 란?

  - 자동증가되는 값
  - 순차적으로 값을 증가하여 내부적으로 유일한 값을 만든다(증가값 조절 가능)
  - 시퀀스를 생성할때 시작값, 최대값 증가치를 지정하여 자동 증가 하도록 생성 가능
  - SEQUENCE 를 생성할 때 시작 ~ 최대값을 지정하여 자동증가컬럼 생성할 수 있다.
  - SEQUENCE 를 생성할 때 시작 ~ 최대값 지정하지 않으면 1부터 1씩 증가.
Sequence 생성하기

    create sequence 시퀀스이름
    [start with 시작값]
    [increment by 증가치]
    [maxvalue 최대값]
    [minvalue 최소값]
    [cyclenocycle]  Cycle => 지정된 최대 값까지 증가하였을 때 다시 시작 값부터 시퀀스 시작함 , 기본값 noCycle
    [cachenocache]   nocache 옵션을 권장한다고는 하지만,, 퍼포먼스 측면에서 얼마만큼 위험한지 잘 모르겠음
                                CACHE : 메모리상에 시퀀스 값을 관리하여 빠르게 실행 할 수 있음(기본 값 20)

                                NOCACHE : 는 원칙적으로 메모리상에서 시퀀스 관리하지 않는 것


시퀀스 사용법

    시퀀스이름.Nextval --> 증가된 시퀀스값 조회
    시퀀스이름.Currval --> 현재 시퀀스값 조회

시퀀스 수정
    alter sequence 시퀀스 이름
    [옵션설정]

시퀀스 삭제
    drop sequence 시퀀스 이름


DB Sequence 권한 부여하기

다른계정도 호출할 수 있도록 시퀀스에 권한을 준다.


grant [select,sequence,alter] on 소유계정.시퀀스 to 대상계정;


  - select : currval(현재값 조회)과 nextval(다음값 조회)을 사용할 수 있는 권한

  - alter : sequence 변경권한을 줌 

  - sequence : alter와 select를 포함 


주의할 점은 권한을 부여한 뒤, Synonym을 만들어서 써야 편함

(권한 부여 후 시퀀스 앞에 소유한 계정명을 빼먹어서 실행이 안되는 오류아닌 오류가 있었음)




[예제 소스]=========================================


seq_log라는 시퀀스를 생성한다.

조건은 1부터 999999999까지 자동으로 초기화 되도록 하고, 증가값은 1, 캐쉬는 사용하지 않는다.


create sequence seq_log

start with 1

maxvalue 999999999

increment by 1

cycle

nocache

;


증가 값을 조회한다.

select SEQ_LOG.NEXTVAL from dual

;


시퀀스를 삭제한다.

drop sequence seq_log

;


생성된 시퀀스를 모든 유저에게 조회권한 부여한다.

GRANT SELECT ON HOD.SEQ_LOG TO public

;