
Oracle 데이터베이스에서는 이미지, 영상, XML, 텍스트와 같은 대용량 데이터를 저장할 때 LOB (Large Object) 데이터 타입을 사용합니다. 이러한 LOB 객체를 파티셔닝된 테이블에서 사용할 경우, LOB 데이터 또한 파티션과 연동하여 관리할 수 있습니다. 이때의 구조와 속성을 관리하고 확인할 수 있는 데이터 딕셔너리 뷰가 바로 USER_PART_LOBS입니다. 본 글에서는 USER_PART_LOBS 뷰의 구조와 활용 전략을 중심으로, 성능과 유지보수 모두를 고려한 LOB 관리 전략을 제시합니다.
1. USER_PART_LOBS란?
USER_PART_LOBS는 사용자가 소유한 파티션 테이블에 존재하는 LOB 컬럼의 파티션 저장 구조에 대한 정보를 담고 있는 Oracle 데이터 딕셔너리 뷰입니다. 즉, 특정 테이블의 LOB 컬럼이 어떤 방식으로 저장되고 있는지, LOB 데이터의 저장 위치, 파티션별 저장 방식 등을 이 뷰를 통해 확인할 수 있습니다.
2. 주요 컬럼 설명
| 컬럼명 | 설명 |
|---|---|
| TABLE_NAME | LOB이 속한 테이블의 이름 |
| PARTITION_NAME | LOB 파티션의 이름 |
| LOB_NAME | LOB 컬럼 이름 |
| SEGMENT_NAME | LOB 데이터가 저장된 실제 세그먼트 명 |
| TABLESPACE_NAME | LOB 파티션이 저장된 테이블스페이스 |
| ENABLE_STORAGE_IN_ROW | LOB 데이터가 ROW 내부에 저장되는지 여부 (YES/NO) |
| CHUNK | LOB 데이터 블록의 최소 저장 단위 |
| PCTVERSION | LOB 데이터의 이전 버전 저장 비율 |
3. 사용자 기반 조회 예시
-- 현재 스키마의 모든 LOB 파티션 정보 조회
SELECT table_name, partition_name, lob_name, segment_name, tablespace_name
FROM user_part_lobs
ORDER BY table_name, partition_name;
-- 특정 테이블의 LOB 파티션 속성 확인
SELECT lob_name, enable_storage_in_row, chunk, pctversion
FROM user_part_lobs
WHERE table_name = 'DOCUMENTS_PART';
이 정보는 특히 LOB I/O 성능 진단, LOB 저장소 리빌드, 파티션별 스토리지 분산 설계 등에서 핵심적인 자료가 됩니다.
4. LOB 파티션이 중요한 이유
- 성능 최적화: 파티션별로 LOB 세그먼트를 나누면 I/O 병목을 줄이고 병렬 처리가 가능해짐
- 스토리지 제어: 파티션마다 다른 테이블스페이스 지정 가능
- 유지보수 편의성: 파티션 단위로 백업/복구, 리빌드 가능
- LOB I/O 정책 적용 가능: CHUNK 크기 및 CACHING 여부 설정 가능
5. LOB 저장 방식 비교
| 저장 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
| IN ROW | LOB가 테이블 ROW 내부에 저장 | 작은 크기의 LOB 처리 속도 우수 | 행 크기 제한, 대용량 시 비효율 |
| OUT OF ROW | LOB가 별도 세그먼트에 저장 | 대용량 처리에 적합, 병렬 처리 가능 | 추가 I/O 발생 가능 |
6. 실무 전략 및 활용 팁
- LOB 파티션 분리: 높은 I/O를 유발하는 LOB는 파티션 별 테이블스페이스로 분산
- LOB 리빌드: 특정 파티션의 LOB 세그먼트만 리빌드 가능 → 공간 회수 및 성능 향상
- LOB 통계 수집:
DBMS_STATS로 파티션별 LOB 통계 수집 가능 - LOB 스토리지 정책 조정:
ENABLE STORAGE IN ROW,CHUNK,PCTVERSION조정으로 성능 최적화
7. 사용자 정의 점검 스크립트 예시
-- LOB 파티션별 테이블스페이스 점검
SELECT table_name, partition_name, tablespace_name
FROM user_part_lobs
WHERE tablespace_name != 'LOB_TBS';
-- OUT OF ROW 여부 점검
SELECT table_name, lob_name, enable_storage_in_row
FROM user_part_lobs
WHERE enable_storage_in_row = 'NO';
8. 관련 딕셔너리 뷰 비교
| 뷰 이름 | 용도 | 주요 정보 | 비고 |
|---|---|---|---|
| USER_PART_LOBS | LOB 파티션 저장 정보 | 세그먼트명, 파티션명, IN_ROW 여부 등 | LOB 파티션 중심 진단 |
| USER_LOBS | LOB 전체 구조 및 속성 | 스토리지 방식, 캐시 여부 등 | 파티션 여부와 무관 |
| DBA_SEGMENTS | LOB 세그먼트 저장소 조회 | LOB 세그먼트별 사이즈, 테이블스페이스 | LOB I/O 분석에 유용 |
9. 결론
Oracle에서 LOB 데이터는 많은 스토리지를 차지하고, 비정형 데이터 관리에 핵심적인 역할을 합니다. USER_PART_LOBS 뷰는 이러한 LOB 컬럼이 파티션 테이블 내에서 어떻게 저장되고 관리되는지를 보여주는 실무적으로 매우 유용한 뷰입니다. 이를 통해 성능을 높이고 I/O를 제어하며, 테이블스페이스를 효율적으로 운영할 수 있습니다. 특히 대용량 시스템이나 멀티미디어 저장 환경에서는 이 뷰의 정보가 성능 향상의 핵심 키가 됩니다.
출처:
- Oracle Database 21c Reference - Oracle Corporation
- Oracle LOB Storage Best Practices - Oracle Docs
- DBA 실무 운영 사례 및 LOB 성능 튜닝 경험 기반
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] USER_PASSWORD_LIMITS : 사용자 패스워드 정책 확인과 보안 설정 전략 (0) | 2025.07.19 |
|---|---|
| [ORACLE] USER_PART_TABLES : 파티션 테이블 구조 파악과 성능 최적화 전략 (0) | 2025.07.19 |
| [ORACLE] USER_PART_KEY_COLUMNS : 파티션 키 컬럼 정보 조회 및 활용 전략 (0) | 2025.07.19 |
| [ORACLE] USER_PART_INDEXES : 파티션 인덱스 구조 이해와 실무 활용 전략 (0) | 2025.07.19 |
| [ORACLE] USER_PART_HISTOGRAMS : 파티션 히스토그램 분석과 실전 활용 전략 (0) | 2025.07.19 |