Database/Oracle
[Oracle] LOB(Large Object)에 대해서
이상한금요일
2025. 2. 17. 16:30
728x90
어떤 테이블에 LOB 타입의 컬럼이 생성되면,
기본적으로 LOB index와 LOB segment가 생성되고
테이블의 LOB 컬럼에는 LOB index 주소값(포인터)가 저장됩니다.
LOB segment는 Chunk 단위(LOB 저장 단위, Default: db_block_size)로 저장됩니다.
select segment_name, segment_type, tablespace_name from dba_segments;
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
DTXGCD TABLE PAK
X_DTXGCD_DTL_BNFT_IF LOBINDEX PAK
L_DTXGCD_DTL_BNFT_IF LOBSEGMENT PAK
TABLESPACE
- 테이블의 tablespace와 LOB의 tablespace는 서로 다르게 지정할 수 있음.
- 일반 Tablespace 와 다른 Uniform extent 저장
- 백업/복구 및 효율적 공간 관리
- 일반 Tablespace 와 다른 Uniform extent 저장
- LOB Segment, LOB Index 는 분리 저장 불가
동작 방식
- 테이블의 LOB 은 실제로 LOB Index 만 지정
- LOB Index 는 LOB 조각 모두 지정
- Table LOB Locator 에서 포인터 참조 후 인덱스 경유하여 Random Access
읽기 일관성 구현
- 일관성 이미지를 LOB Segment 자체에 저장
- Transaction이 LOB을 변경(Update)하면 과거 데이터를 남겨두고 새 데이터 저장 위해 Chunk 할당
- 롤백 시 LOB Index Pointer 만 과거 이미지로 변경
- Undo Tablespace의 이미지는 Lob Locator와 Lob Index를 위해서만 사용
CHUNK
... lob (COL_NAME) store as basicfile "SEG_NAME" (chunk 8192);
- Bytes 단위 명시 가능하나, DB Block Size 의 배수 중 Chunk 지정 사이즈 이상의 최소값으로 지정
- Block size 8192 이고 Chunk 를 20000 으로 지정 했을 시 실제 Chunk 사이즈는 24576
- Min 은 db_block_size / Max 는 32767
- 각 LOB 의 값은 실제 사이즈와 무관하게 최소 하나의 Chunk 사용 함
- Chunk Size 가 작을 때
- LOB Segment 할당 단위 세분화로 공간 효율적 사용 가능
- LOB Index 가 복잡해짐
- Chunk Size 가 Block Size 보다 클 때
- Multiblock Read I/O 가능
- Default: db_block_size
LOB 컬럼을 가진 테이블이 partition 되어 저장된다면,
해당 LOB index/segment 모두 partition 되어 저장됩니다.
LOB 종류
저장 위치별 분류
- Internal - CLOB/NCLOB/BLOB/SECUREFILE
- External - BFILES
유형별 분류
- CLOB ( Internal )
- XML이나 일반 문장과 같은 문자 정보를 대량 저장
- DB 캐릭터셋 변환 적용 - 검색 시 DB 캐릭터셋 <-> Client 캐릭터셋 변환
- NCLOB ( Internal )
- CLOB 과 유사하나 DB 의 National 캐릭터셋으로 저장
- BLOB ( Internal )
- 이미지, 워드 문서 등의 정보를 대량 저장
- 캐릭터셋 변환 적용되지 않음
- Securefiles ( Internal )
- 기존 LOB 을 대체하기 위한 11G 이상 버전에서 지원되는 객체
- 중복제거/압축/암호화/저널링 등 지원
- BFILES ( External )
- 운영체제 파일에 대한 포인터
- 파일의 내용에 대해 읽기 모드로만 접근 가능
- 데이터 저장 위해 Oracle Directory Object 사용
- 읽기 일관성 보장 되지 않음
- 세션별 Open 할 수 있는 파일은 session_max_open_files 에 따름(Default 10)
참고 사이트
http://www.gurubee.net/wiki/pages/27428279
https://velog.io/@emawlrdl/%EC%98%A4%EB%9D%BC%ED%81%B4-LOB%ED%83%80%EC%9E%85-indexsegment
728x90