LOB (Large Objects)
종류
|종류|설명|위치|예시|
|-|-|-|-|
|CLOB|Character LOB|내부|대용량 텍스트|
|BLOB|Binary LOB|내부|이미지, 소리, 비디오 등|
|NCLOB|National Character LOB|내부|대용량 텍스트 (국가 언어 지원 기능 사용 가능)|
|BFILE|Binary Files|외부|.mp4
, .jpg
, 등|
특징
- LOB 컬럼을
MOVE
했다면 리빌드를 해주어야 함 - LOB 컬럼은 리네임 가능하지만 LOB 인덱스는 리네임할 수 없음
- LOB 컬럼은 파티션 키로 사용할 수 없음
관련 옵션
PCTVERSION
- LOB 데이터가 업데이트 시 읽기 일관성을 위해 사용하는 스토리지의 빈 공간 퍼센트율 (기본값은
10
) 10%
까지는 이전 데이터를 들고 있다가 해당 크기를 넘어서면 덮어쓰기로 재사용함- Read Only 라면
0
으로 설정 가능
- LOB 데이터가 업데이트 시 읽기 일관성을 위해 사용하는 스토리지의 빈 공간 퍼센트율 (기본값은
CACHE
,NOCACHE
- 자주 액세스가 된다면 사용할 수 있음
- 다만, 인라인 LOB는 버퍼 캐시에서 바로 읽혀지기 때문에 해당 옵션과 상관 없음
CHUNK
- LOB 데이터를 액세스하는 단위
- 보통
db_block_size
의 배수로 설정됨 - 인라인 LOB에는 영향이 없고 아웃라인 LOB에는 영향이 있음
LOGGING
,NOLOGGING
redo
로그 생성 여부CACHE
옵션을 사용한다면LOGGING
이 무조건 활성화됨UNDO
정보는 LOB 인덱스만 생성되며 LOB 데이터는 생성되지 않음
-
ENABLE STORAGE IN ROW
,DISABLE STORAGE IN ROW
|비교 항목|ENABLE
|DISABLE
| |-|-|-| |4KB 이하 데이터|인라인에 저장
(테이블)|아웃라인에 저장
(LOB 세그먼트)| |4KB 초과 데이터|아웃라인에 저장
(LOB 세그먼트)|아웃라인에 저장
(LOB 세그먼트)| |ROW CHAINING
|상대적으로 발생 확률이 높음|상대적으로 발생 확률이 낮음|비교 항목 인라인 (테이블) 아웃라인 (LOB 세그먼트) REDO ○ ✕ UNDO ○ ✕
(Column Locator나 LOB 인덱스가 변경되는 경우만 ○)- 액세스가 많지 않다면
DISABLE
로 설정하는 편이 HWM가 작게 유지됨 (풀스캔을 자주한다면 더욱 유용)
- 액세스가 많지 않다면
관련 함수
|표현식|설명|
|-|-|
|DBMS_LOB.GETLENGTH(lob_column)
|LOB 컬럼의 데이터 길이|
|DBMS_LOB.COMPARE(lob_column1, lob_column2)
|2개의 LOB 컬럼 비교|
|DBMS_LOB.SUBSTR(lob_column, 1000, 1)
|LOB 컬럼의 데이터를 잘라서 출력 (컬럼, 크기, 시작점)|
|DBMS_LOB.INSTR(lob_column, 'keyword', 1, 1)
|LOB 컬럼의 데이터에서 특정 문자열 검색 (컬럼, 키워드, 시작점, 몇 번째에 위치한 키워드)|