DB 정상/비정상 종료에 따른 Sequence cache 작용
시퀀스 최초 생성 시에 Oracle dictionary view에서 관리하는 last_number 값은 start 값이고,
시퀀스 nextval 로 최초 채번하면 last_number 값은 start 값 + cache 값이 된다.
DB의 정상/비정상 종료 시에 따라 last_number 값이 상이하게 관리된다.
- DB 정상 종료 시
cache와 상관없이 last_number는 sequence current 값 + 1 로 관리
- DB 비정상 종료 시
sequence의 last_number값 유지
시퀀스 cache 테스트
- 시퀀스 생성
SQL> CREATE SEQUENCE SEQ_CACHE
START WITH 1
INCREMENT BY 1
CACHE 100;
- 시퀀스 조회
SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';
SEQUENCE_NAME LAST_NUMBER
------------------------------ -----------
SEQ_CACHE 1
- 시퀀스 nextval
4번 채번하면 시퀀스 current value가 4가 된다.
SQL> select seq_cache.nextval from dual;
----------
1
SQL> select seq_cache.nextval from dual;
----------
2
SQL> select seq_cache.nextval from dual;
----------
3
SQL> select seq_cache.nextval from dual;
----------
4
- 시퀀스 last_number 조회
SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';
SEQUENCE_NAME LAST_NUMBER
------------------------------ -----------
SEQ_CACHE 101
- DB 정상 종료 후 시퀀스 조회
SQL> shutdown immediate;
SQL> startup
SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';
SEQUENCE_NAME LAST_NUMBER
------------------------------ -----------
SEQ_CACHE 5
- DB 비정상 종료 후 시퀀스 조회
SQL> shutdown abort;
SQL> startup
SQL> select sequence_name, last_number from user_sequences where sequence_name='SEQ_CACHE';
SEQUENCE_NAME LAST_NUMBER
------------------------------ -----------
SEQ_CACHE 101
* CACHE값에 때문에 RAC에서긔 각각의 node에서 채번할 경우 채번값이 상이하다.
CDC로 동기화할 경우 동기화 대상 node는 시퀀스값을 계속 증가하여 유지한다.
'ORACLE' 카테고리의 다른 글
도커(docker) container로 오라클 사용하기 (0) | 2021.12.22 |
---|---|
Oracle ADG AFFIRM/NOAFFIRM VS SYNC/ASYNC (0) | 2021.12.21 |
Oracle RMAN (0) | 2021.12.17 |
ORACLE ATP DB 접속 (0) | 2020.01.27 |
Oracle ATP DB 생성 (0) | 2020.01.27 |