본문 바로가기
DBMS/ORACLE

[oracle] 테이블 LOB Object 이름 지정

by 드바 2024. 2. 8.

DBMS: oracle 19.3

 
오라클은 테이블에 LOB컬럼 포함 시 기본적으로 SYS_LOBxxx(데이터), SYS_ILxxx(인덱스)와 같은 이름으로 자동생성됩니다.
이름을 지정하여 생성하는 방법과 변경방법 그리고 특이사항에 대한 내용 입니다.

[목차여기]

 

테이블 생성

LOB명 지정/미지정(기본) 2개 테이블 생성

-- LOB 이름지정
CREATE TABLE SK.LOBTEST1 (
       C1    VARCHAR2(255) NOT NULL,
       LOB1     CLOB NULL
)
TABLESPACE TS_DATA
LOB(LOB1) STORE AS LD_LOBTEST1_LOB1
(TABLESPACE TS_LOB INDEX LI_LOBTEST1_LOB1 (TABLESPACE TS_LOB))
;

-- 기본
CREATE TABLE SK.LOBTEST2 (
       C1    VARCHAR2(255) NOT NULL,
       LOB1     CLOB NULL
)
TABLESPACE TS_DATA
;

 
dba_lobs 조회

select * from dba_lobs where table_name like 'LOBTEST%' ;

oracle lob segment

 
dba_indexes 조회

select * from dba_indexes where table_name like 'LOBTEST%' ;

oracle lob segment

 
dba_objects 조회

select * from DBA_OBJECTS where owner = 'SK' ;

oracle lob segment

 

LOB DATA 이름변경

LD_LOBTEST1_LOB1 -> LD_LOBTEST1_LOB1_NEW
대상 테이블 INDEX REBUILD 필요
LOB INDEX명은 변경안됨

ALTER TABLE SK.LOBTEST1 MOVE LOB(LOB1) STORE AS LD_LOBTEST1_LOB1_NEW (TABLESPACE TS_LOB);

 
dba_lobs 조회

oracle lob segment

 
dba_objects 조회

oracle lob segment

반응형

특이사항

drop 테이블시 관련 오브젝트가 휴지통으로 이도하게 되는데
dba_objects, dba_segments 에는 LOB가 보이는데 dba_lobs 에서는 안보이는 상황
 
drop table

drop table sk.lobtest1 ;
drop table sk.lobtest1 ;

 
dba_lobs, dba_objects 조회

SQL> select OWNER, TABLE_NAME, COLUMN_NAME, SEGMENT_NAME, INDEX_NAME from dba_lobs where table_name like 'LOBTEST%';

OWNER                  TABLE_NAME        COLUMN_NAME      SEGMENT_NAME      INDEX_NAME        
---------------------- ----------------- ---------------- ----------------- ----------------- 
											 
0 rows selected.



SQL> select object_name, object_type from DBA_OBJECTS where owner = 'SK';

OBJECT_NAME                                  OBJECT_TYPE             
-------------------------------------------- ----------------------- 
SYS_LOB0000074028C00002$$                    LOB                    

1 rows selected.

 
기본 이름인 LOB 세크먼트의 이름은 휴지통(Recyclebin)으로 이동 시 변경이 안되고 유지되고 있는것이 확인됩니다.
관련하여 dba_objects 가 참조하는 오브젝트의 flag 값이 틀려지면서 조회가 되고/안되고의 차이가 발생 합니다
기본 이름인것은 보이지만 이름을 지정하여 BIN$으로 변경된것은 dba_objects에서 조회안됨

SQL> select owner, object_name, original_name, type from DBA_RECYCLEBIN;

OWNER            OBJECT_NAME                              ORIGINAL_NAME                      TYPE                      
---------------- ---------------------------------------- ---------------------------------- ------------------------- 
SK               BIN$Dg1qNImKAevgY2U4qMCiwA==$0           LD_LOBTEST1_LOB1_NEW               LOB                      
SK               BIN$Dg1qNImLAevgY2U4qMCiwA==$0           LOBTEST1                           TABLE                    
SK               SYS_IL0000074028C00002$$                 SYS_IL0000074028C00002$$           LOB INDEX                
SK               SYS_LOB0000074028C00002$$                SYS_LOB0000074028C00002$$          LOB                      
SK               BIN$Dg1qNImNAevgY2U4qMCiwA==$0           LOBTEST2                           TABLE                    
SK               LI_LOBTEST1_LOB1                         LI_LOBTEST1_LOB1                   LOB INDEX                

6 rows selected.

 

기타

23c 부터는 아래 구문으로 move 단계없이 rename이 가능 합니다

-- Table
alter table table_name rename lob(column_name) old_segment_name to new_segment_nane;

-- Partition
alter table table_name rename lob(column_name) partition old_segment_name to new_segment_nane;

-- Subpartition
alter table table_name rename lob(column_name) subpartition old_segment_name to new_segment_nane;

댓글