실무에서 시퀀스 초기화가 필요했던 순간
개발하다 보면 종종
테스트 데이터를 모두 삭제하고
시퀀스도 다시 1부터 시작하고 싶을 때가 있다.
나도 INSERT 테스트 몇 번 하고 DELETE로 비웠는데
시퀀스는 계속 101, 102... 이렇게 올라가 있어서
“이거 다시 1부터 못 돌리나?”
싶어서 한참 찾아봤던 기억이 있다.
그래서 정리했다.
Oracle에서 시퀀스를 초기화하는 3가지 방법
가장 많이 쓰는 기준으로!
❗ 그리고 참고로
운영에서 시퀀스 초기화하면… 크으으으은일 납니다
운영 시퀀스 건드릴 수도 없겠지만 혹시나 하는 마음에 ㅎ
(진짜 PK 충돌나서 난리부르스 서비스 에러에러에러 voc voc voc... ++;)
👉 이건 어디까지나 개발 서버 기준에서만 사용하세요!
1. 기존 시퀀스 삭제 후 새로 생성 (가장 깔끔함)
가장 확실한 방법은 DROP 후 CREATE 하는 것.
DROP SEQUENCE MY_SEQ;
CREATE SEQUENCE MY_SEQ
START WITH 1
INCREMENT BY 1
NOCACHE;
- START WITH로 초기값 설정 가능
- 기존 시퀀스와 동일한 옵션으로 재생성하는 게 핵심
✅ 단점: 기존 시퀀스를 참조하던 트리거나 외부 객체가 있을 경우
의존성 문제로 에러 날 수 있음
❗ 더더더 주의!!
이건 내가 개발하려고 새로 만든 시퀀스다!
= 내가 소유권 100%일 때만 쓰세요.
👇 아래와 같은 시퀀스는 절대 함부로 삭제 금지:
- 남들도 같이 쓰는 공용 시퀀스
- 운영 중 실시간으로 참조 중인 시퀀스
그런 거 건드리면… 호호호호혼. 남. 😇
2. ALTER로 NEXTVAL 조정 (간단하지만 제한적)
-- 현재 시퀀스 값보다 낮게 설정하고 싶으면
-- INCREMENT 값을 일시적으로 조정한 후 한번 호출
ALTER SEQUENCE MY_SEQ INCREMENT BY -99;
SELECT MY_SEQ.NEXTVAL FROM DUAL; -- (예: 현재 100 → 1로 맞추기)
ALTER SEQUENCE MY_SEQ INCREMENT BY 1;
- 현재 값 기준으로 상대 조정
- 정확히 몇까지 올라갔는지 알고 있어야 가능함
3. RESTART 옵션 사용 (Oracle 12c 이상)
ALTER SEQUENCE MY_SEQ RESTART START WITH 1;
- 오라클 12c 이상부터 가능
- 가장 간단하게 “다시 1부터 시작”
❗ 단점: 구버전에서는 동작하지 않음
👀 실제로 나는 이렇게 했음
처음엔 몰랐어서...
그냥 SELECT MY_SEQ.NEXTVAL FROM DUAL;
계속 호출하면서 시퀀스를 올렸었다
나란놈은 개발자 맞냐..? 😮💨
"뭔가 아닌데…" 싶었지만
그때는 다른 방법을 몰랐어서 계속 눌렀음. 진짜로.
결국 검색 끝에
DROP 후 CREATE로 초기화하는 방식을 알게 됐고
그 방법으로 깔끔하게 리셋했다.
물론 나는 테스트 환경이라 괜찮았지만
실제 운영 환경이었다면 트리거나 의존성 문제로 사고 남
🧨 운영 환경이라면?
그냥 하지 말고 무조건 DBA한테 먼저 의논하세요!!!
⚠️ 신규 개발로 만든 시퀀스가 아닌데도 손댄다?
→ 개발에서도 조심해야 함
→ 잘못 건드리면 진짜 욕.먹.음.
그래서 꼭 말하고 싶다:
👉 DROP 방식은 정말 내가 신규로 개발하기 위해 만든 시퀀스일 때만.
👉 그리고 의존성 확인은 무조건 먼저 해야 함!
'DataBase > Oracle' 카테고리의 다른 글
[Oracle] 오라클 디비링크(DB LINK)란? (0) | 2025.04.19 |
---|---|
[ Oracle SQL ] 계층형쿼리 (Hierarchy Query) (1) | 2022.06.07 |