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

+ Recent posts