ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다. (cannot alter starting sequence number) 오류는 ALTER SEQUENCE SEQUENCE_NAME START WITH 1; 과 같은 명령어로 스타트를 수정하려고 시도하는 경우에 발생합니다. 보통 특정 시작 번호를 설정하기보다는 1부터 다시 시작하고 싶은 경우가 많을 것이므로 해당의 경우를 예시로 하여 안내해 드리겠습니다. 해당 오류를 수정하려면 보통 두 가지 방법을 제시합니다.
시퀀스 사이클을 설정하여 다시 1로 돌아가는 방법
다음과 같이 현재 시퀀스가 100인 상태를 가정해 봅시다.
CREATE SEQUENCE SEQUENCE_NAME
START WITH 100
MAXVALUE 9999
MINVALUE 1
NOCYCLE
CACHE 2
NOORDER;
이때에 시퀀스를 1로 설정하고 싶은 경우 다음의 명령어를 실행하면 ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다. 예외가 발생하게 된답니다.
ALTER SEQUENCE SEQUENCE_NAME START WITH 1;
1행에 오류:
ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다.
이때, 시퀀스의 MINVALUE, MAXVALUE 및 CACHE 등을 고려하여 다음과 같이 설정하여 1부터 다시 시작할 수 있도록 하는 방법이 있습니다. 해당 예시는 NEXTVAL을 1로 표시하기 위하여 조회를 한 번 더 하였습니다.
--사이클을 설정하여 1부터 시작하도록 하겠습니다.
ALTER SEQUENCE SEQUENCE_NAME CYCLE;
--맥스, 민, 캐시를 고려하여 증가치를 수정합니다.
ALTER SEQUENCE SEQUENCE_NAME NOCACHE;
ALTER SEQUENCE SEQUENCE_NAME INCREMENT BY 4998;
--조회를 해보면 1이 됩니다. (다시 조회하시면 돌아가니 조심해 주세요)
SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL;
--원래 설정을 되돌립니다.
ALTER SEQUENCE SEQUENCE_NAME NOCYCLE;
ALTER SEQUENCE SEQUENCE_NAME CACHE 2;
ALTER SEQUENCE SEQUENCE_NAME INCREMENT BY 1;
다만 해당과 같이 진행하는 경우에는 현재의 시퀀스 번호가 최댓값을 유지하여야 하고, 1의 값이 발생한 다음에 초기 설정으로 돌려야 하기 때문에 실제 사례에서는 적용하기 곤란한 부분이 많습니다.
시퀀스 드랍 이후 새로 생성하는 방법
시퀀스를 1로 다시 시작하려면 시퀀스 사용을 중단하고 새로 만드는 게 편합니다. 오브젝트 스크립트를 추출하시고, 시퀀스를 드랍하고, 시퀀스를 새로 생성하여 "ORA-02283: 시퀀스 시작 번호는 변경할 수 없습니다." 오류를 해결하는 방법입니다. 스키마 브라우저 등에서 생성 스크립트를 보거나 메타데이터 등에서 스크립트를 추출해 보겠습니다. 사용하는 함수는 DBMS_METADATA.GET_DDL입니다.
SELECT DBMS_METADATA.GET_DDL ('SEQUENCE', 'SEQUENCE_NAME') FROM DUAL;
DBMS_METADATA.GET_DDL('SEQUENCE','SEQUENCE_NAME')
--------------------------------------------------------------------------------
CREATE SEQUENCE SEQUENCE_NAME
START WITH 100
MAXVALUE 9999
MINVALUE 1
NOCYCLE
CACHE 2
NOORDER;
이제 시퀀스를 드랍하고 새로 생성하시면 됩니다.
DROP SEQUENCE SEQUENCE_NAME;