프린트 하기

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