
Oracle Database에서 DBA_EXTENTS 뷰는 데이터베이스 내에서 실제로 사용 중인 공간(Extent)의 상세 정보를 제공하는 핵심적인 시스템 뷰입니다. 이 뷰는 각 세그먼트(Segment)가 차지하고 있는 Extent의 위치, 크기, 파일 번호, 블록 번호 등을 보여주며, 공간 관리, 성능 최적화, 테이블스페이스 용량 모니터링 등 다양한 DBA 업무에서 필수적으로 활용됩니다.
즉, DBA_EXTENTS는 "현재 데이터베이스에서 어떤 객체가 어떤 파일의 어느 영역을 사용 중인가?"를 명확하게 알려주는 저수준(physical-level) 공간 분석 도구입니다.
1. DBA_EXTENTS 개요
Oracle 데이터베이스의 저장 구조는 테이블스페이스(Tablespace) → 데이터파일(Datafile) → Extent → Block 계층으로 구성됩니다. 이 중 Extent는 실제 데이터가 저장되는 최소 공간 단위로, 세그먼트가 성장할 때마다 새로운 Extent가 할당됩니다.
DBA_EXTENTS 뷰는 이 Extent 단위의 정보를 테이블 형태로 저장하여, 각 세그먼트별 공간 점유 현황을 모니터링할 수 있도록 합니다. 특히, DBA_SEGMENTS가 세그먼트별 요약 정보를 제공한다면, DBA_EXTENTS는 그보다 세밀한 세그먼트 내부의 물리적 블록 단위 정보를 제공합니다.
2. DBA_EXTENTS의 주요 역할
- 세그먼트(테이블, 인덱스 등)의 실제 저장 위치 파악
- 테이블스페이스 및 데이터파일별 공간 사용 현황 분석
- 공간 단편화(Fragmentation) 분석
- 비정상적인 Extent 할당(예: 중복, 과도한 분할) 점검
- 데이터 파일 용량 재구성 또는 압축 작업 시 기초 데이터로 활용
3. 주요 컬럼 설명
아래 표는 DBA_EXTENTS 뷰의 주요 컬럼과 그 의미를 정리한 것입니다.
| 컬럼명 | 데이터 타입 | 설명 |
|---|---|---|
| OWNER | VARCHAR2 | 세그먼트를 소유한 스키마 이름 |
| SEGMENT_NAME | VARCHAR2 | 세그먼트 이름 (예: TABLE 또는 INDEX 이름) |
| SEGMENT_TYPE | VARCHAR2 | 세그먼트 유형 (TABLE, INDEX, CLUSTER 등) |
| TABLESPACE_NAME | VARCHAR2 | 세그먼트가 속한 테이블스페이스 이름 |
| FILE_ID | NUMBER | Extent가 속한 데이터파일 ID |
| BLOCK_ID | NUMBER | Extent의 시작 블록 번호 |
| BLOCKS | NUMBER | Extent가 차지하는 블록 수 |
| BYTES | NUMBER | Extent의 크기 (Byte 단위) |
이 컬럼들을 통해 DBA는 각 세그먼트의 공간 분포를 세밀하게 분석할 수 있으며, 특정 테이블이나 인덱스가 데이터파일의 어느 구간을 점유하고 있는지까지 정확히 추적할 수 있습니다.
4. DBA_EXTENTS 조회 예제
① 특정 테이블의 Extent 정보 확인
SELECT
TABLESPACE_NAME,
FILE_ID,
BLOCK_ID,
BYTES,
BLOCKS
FROM
DBA_EXTENTS
WHERE
SEGMENT_NAME = 'EMPLOYEES'
AND OWNER = 'HR'
ORDER BY FILE_ID, BLOCK_ID;
이 쿼리는 HR 스키마의 EMPLOYEES 테이블이 실제로 어떤 데이터파일, 어떤 블록 범위에 저장되어 있는지를 보여줍니다.
② 테이블스페이스별 공간 사용량 집계
SELECT
TABLESPACE_NAME,
SUM(BYTES)/1024/1024 AS USED_MB
FROM
DBA_EXTENTS
GROUP BY
TABLESPACE_NAME
ORDER BY
USED_MB DESC;
이 쿼리를 통해 각 테이블스페이스가 실제로 얼마나 많은 공간을 사용하고 있는지 (MB 단위로) 집계된 결과를 얻을 수 있습니다.
③ 특정 데이터파일의 Extent 분포 분석
SELECT
FILE_ID,
COUNT(*) AS EXTENT_COUNT,
SUM(BYTES)/1024/1024 AS TOTAL_MB
FROM
DBA_EXTENTS
GROUP BY
FILE_ID
ORDER BY
FILE_ID;
이 쿼리는 데이터파일별로 얼마나 많은 Extent가 존재하며, 총 얼마나 많은 공간을 차지하고 있는지를 보여줍니다. 이 정보를 바탕으로 파일별 I/O 부하나 Fragmentation 문제를 진단할 수 있습니다.
5. DBA_EXTENTS와 관련된 주요 뷰 비교
Oracle은 공간 관리와 관련하여 다양한 데이터 사전 뷰를 제공합니다. 아래 표는 그 중 DBA_EXTENTS와 관련성이 높은 뷰들의 특징을 비교한 것입니다.
| 뷰 이름 | 역할 | DBA_EXTENTS와의 관계 |
|---|---|---|
| DBA_EXTENTS | 사용 중인 Extent 정보 | 세그먼트가 점유 중인 물리적 공간 표시 |
| DBA_FREE_SPACE | 할당되지 않은 Free Extent 정보 | DBA_EXTENTS의 반대 개념으로, 아직 사용되지 않은 공간 표시 |
| DBA_SEGMENTS | 세그먼트별 공간 요약 | DBA_EXTENTS의 데이터를 집계한 결과 |
| DBA_DATA_FILES | 데이터파일 메타정보 (경로, 크기, ID 등) | DBA_EXTENTS의 FILE_ID 컬럼과 직접 연결 |
6. DBA_EXTENTS를 활용한 공간 분석 실무 예제
① 세그먼트 단편화 분석
테이블이 많은 Extent로 나뉘어 있을수록, 해당 세그먼트는 단편화되어 있을 가능성이 높습니다. 다음 쿼리를 통해 Extent가 많은 테이블을 확인할 수 있습니다.
SELECT
OWNER, SEGMENT_NAME, COUNT(*) AS EXTENT_COUNT
FROM
DBA_EXTENTS
GROUP BY
OWNER, SEGMENT_NAME
HAVING
COUNT(*) > 100
ORDER BY
EXTENT_COUNT DESC;
이 결과를 기반으로 ALTER TABLE MOVE 명령이나 SHRINK SPACE 명령을 수행하여 공간 효율성을 높일 수 있습니다.
② 특정 테이블의 물리적 저장 경로 추적
SELECT
FILE_ID,
BLOCK_ID,
BLOCKS,
TABLESPACE_NAME
FROM
DBA_EXTENTS
WHERE
OWNER = 'HR'
AND SEGMENT_NAME = 'DEPARTMENTS';
이 쿼리는 DEPARTMENTS 테이블이 실제 어떤 블록 범위에 저장되어 있는지를 보여줍니다. 데이터 복구나 I/O 분산 설계 시 유용하게 활용됩니다.
③ 특정 테이블스페이스의 세그먼트 분포 확인
SELECT
TABLESPACE_NAME,
SEGMENT_TYPE,
COUNT(DISTINCT SEGMENT_NAME) AS SEGMENT_COUNT,
SUM(BYTES)/1024/1024 AS USED_MB
FROM
DBA_EXTENTS
GROUP BY
TABLESPACE_NAME, SEGMENT_TYPE
ORDER BY
USED_MB DESC;
이 결과는 테이블스페이스 내에서 어떤 유형의 객체(TABLE, INDEX 등)가 얼마나 많은 공간을 사용하는지를 한눈에 보여줍니다.
7. DBA_EXTENTS 기반 테이블스페이스 공간 모니터링
운영 환경에서는 주기적으로 DBA_EXTENTS를 활용하여 테이블스페이스별 공간 사용률을 점검해야 합니다. 아래 예제는 전체 테이블스페이스의 총 크기 대비 사용량을 계산하는 방식입니다.
SELECT
a.TABLESPACE_NAME,
ROUND(SUM(b.BYTES)/1024/1024, 2) AS USED_MB,
ROUND(SUM(a.BYTES)/1024/1024, 2) AS TOTAL_MB,
ROUND((SUM(b.BYTES)/SUM(a.BYTES))*100, 2) AS USED_PERCENT
FROM
DBA_DATA_FILES a
JOIN
DBA_EXTENTS b
ON
a.FILE_ID = b.FILE_ID
GROUP BY
a.TABLESPACE_NAME
ORDER BY
USED_PERCENT DESC;
이 쿼리는 각 테이블스페이스의 총 크기와 실제 사용 중인 크기, 그리고 사용률(%)을 함께 보여줍니다. 이 정보를 통해 DBA는 공간 부족 위험을 사전에 예측할 수 있습니다.
8. DBA_EXTENTS와 LMT(Local Managed Tablespace)의 관계
Oracle 9i 이후부터는 Locally Managed Tablespace (LMT)가 기본 구조로 채택되었습니다. LMT 환경에서는 Extent 관리가 데이터 딕셔너리가 아닌 데이터파일 내부의 비트맵(Bitmap)에 의해 자동으로 수행됩니다. 그럼에도 불구하고 DBA_EXTENTS는 여전히 LMT의 공간 상태를 조회하는 표준 뷰로 유지되고 있으며, 비트맵에서 읽은 Extent 정보를 DBA에게 가시적으로 보여주는 역할을 합니다. 따라서 DMT(Dictionary Managed Tablespace)가 사라진 이후에도 DBA_EXTENTS는 모든 Oracle 버전에서 필수적인 뷰로 남아 있습니다.
9. 요약 비교표
| 항목 | DBA_EXTENTS | DBA_FREE_SPACE |
|---|---|---|
| 역할 | 사용 중인 Extent 정보 제공 | 할당되지 않은 Free 공간 정보 제공 |
| 데이터 소스 | 세그먼트(테이블, 인덱스 등) | 비할당 블록 영역 |
| 활용 목적 | 공간 사용 분석, I/O 최적화 | 공간 확장 또는 리밸런싱 계획 수립 |
| 관련 뷰 | DBA_SEGMENTS, DBA_DATA_FILES | DBA_TABLESPACES, DBA_TEMP_FREE_SPACE |
10. 결론
DBA_EXTENTS는 Oracle 데이터베이스의 공간 관리 및 성능 최적화에서 가장 핵심적인 역할을 담당하는 뷰입니다. 이 뷰를 활용하면 세그먼트의 실제 저장 구조를 명확히 파악할 수 있으며, 공간 사용률, 단편화, 파일별 부하 등 물리적 구조적 이슈를 조기에 감지할 수 있습니다. 특히 대규모 시스템이나 고성능 OLTP 환경에서는 DBA_EXTENTS 분석 결과를 기반으로 테이블스페이스 리밸런싱, 파티션 설계, 데이터파일 분산 전략 등을 세우면 성능과 안정성을 동시에 확보할 수 있습니다.
출처
- Oracle Database Reference 19c – DBA_EXTENTS View
- Oracle Concepts Guide – Space Management in Tablespaces
- Oracle Administrator’s Guide – Managing Database Storage Structures
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] DBA_FREE_SPACE_COALESCED 완벽 가이드 : 테이블스페이스 단편화 최소화와 공간 최적화의 핵심 (0) | 2025.10.14 |
|---|---|
| [ORACLE] DBA_FREE_SPACE 완벽 가이드 : 테이블스페이스의 여유 공간과 효율적인 공간 관리 전략 (0) | 2025.10.14 |
| [ORACLE] DBA_EXP_VERSION 완벽 가이드 : Export 버전 관리와 Data Pump 호환성의 핵심 (0) | 2025.10.14 |
| [ORACLE] DBA_EXP_OBJECTS 완벽 해설 : 데이터베이스 Export 객체 관리의 핵심 뷰 (0) | 2025.10.14 |
| [ORACLE] DBA_EXP_FILES 완벽 해설 : Data Pump 및 Export 파일 관리의 핵심 뷰 (0) | 2025.10.14 |