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%' ;
dba_indexes 조회
select * from dba_indexes where table_name like 'LOBTEST%' ;
dba_objects 조회
select * from DBA_OBJECTS where owner = 'SK' ;
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 조회
dba_objects 조회
반응형
특이사항
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;
'DBMS > ORACLE' 카테고리의 다른 글
[oracle] alert.log 시간대(time zone) 기준은 무엇인가 (0) | 2024.02.18 |
---|---|
[oracle] 오브젝트 생성시간은 어떤 시간대(time zone) (0) | 2024.02.17 |
[oracle] optimizer_adaptive_plans 기능 설명 및 권장값 (0) | 2023.12.22 |
[oracle] datapump 이기종버전 원격지 데이터 로컬로 가져오기 (1) | 2023.12.03 |
oracle expdp 원격지(remote) 데이터 로컬로 가져오기 (0) | 2023.12.01 |
댓글