프린트 하기 URL 복사

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.18.0.0

 

에러 : ORA-62156: MEMOPTIMIZE FOR READ feature not allowed on segment with deferred storage

테이블 생성 시 MEMOPTIMIZE FOR READ 옵션을 넣어 생성할떄 발생하는 메세지

1
2
3
4
5
6
7
8
9
SQL> 
create table mem_tb
(id1 number primary key, id2 number, name varchar2(10),  
date1 varchar2(8), date2 varchar2(8), date3 date,
phone varchar2(13), price number, qty number,
test1 number,  test2 varchar2(5), test3 varchar2(4)
) 
memoptimize for read;
ORA-62156: MEMOPTIMIZE FOR READ feature not allowed on segment with deferred storage

 

 

해결 방법 : segment creation immediate 옵션을 넣어주고 테이블 생성

MEMOPTIMIZE FOR READ 기능을 사용하려면 테이블에 segment가 존재해야함

deferred_segment_creation 파라미터가 true 인 상태로

테이블을 생성하면 segment가 존재하지 않기때문에 에러가 발생함

 

 

이 파라미터가 true로 되어있는 경우 segment creation immediate 옵션을 넣고 테이블을 생성해야함

1
2
3
4
5
6
7
8
9
SQL>
create table mem_tb
(id1 number primary key, id2 number, name varchar2(10),  
date1 varchar2(8), date2 varchar2(8), date3 date,
phone varchar2(13), price number, qty number,
test1 number,  test2 varchar2(5), test3 varchar2(4)
) 
segment creation immediate 
memoptimize for read;

 

 

원인 : deferred_segment_creation 파라미터 설정으로 인한 에러

deferred_segment_creation 파라미터 세팅이 TRUE로 되어있음

1
2
3
4
5
SQL> show parameter DEFERRED_SEGMENT_CREATION
 
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation         boolean     TRUE

 

 

이 값이 TRUE이면 테이블에 첫 번째 행이 삽입될 때까지

테이블 및 해당 종속 객체(LOB, 인덱스)의 세그먼트가 생성되지 않음
테이블을 생성 하기 전에 많은 테이블이 채워지지 않을 것으로 예상되는 경우(파티션을 많이생성하는 등)

이 파라미터를 true로 설정하는 것이 좋음

true 설정 시 디스크 공간이 절약되고 생성 시간이 최소화됨

 

 

참조 : 

https://blogs.oracle.com/in-memory/post/memoptimized-rowstore-fast-lookup

https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/DEFERRED_SEGMENT_CREATION.html

https://www.dba-oracle.com/t_oracle_deferred_segment_creation.htm