Oracle 데이터베이스를 운영하거나 튜닝할 때, 특정 테이블의 데이터 건수(ROW 수)나 테이블 크기(용량)를 파악하는 것은 매우 중요합니다.
특히, DB 용량 계획, 성능 분석, 테이블 모니터링, 파티션 관리 등에 필수적인 정보죠.
이 글에서는 Oracle DB에서 테이블별 데이터 건수와 용량(MB/GB) 정보를 조회하는 SQL 쿼리를 상황별로 정리해드리며, 실제 실무에서 사용할 수 있도록 정확도와 성능을 고려한 쿼리 예제도 함께 제공합니다.
SELECT
table_name,
TO_CHAR(num_rows, '999,999,999') AS row_count,
TO_CHAR(ROUND(bytes / 1024 / 1024, 2), '999,999.99') AS size_mb
FROM
user_tables ut
JOIN
user_segments us ON ut.table_name = us.segment_name
WHERE
us.segment_type = 'TABLE'
ORDER BY
size_mb DESC;
🔹 1. 사용자 스키마의 테이블 건수 및 용량 조회
SELECT
table_name,
TO_CHAR(num_rows, '999,999,999') AS row_count,
TO_CHAR(ROUND(bytes / 1024 / 1024, 2), '999,999.99') AS size_mb
FROM
user_tables ut
JOIN
user_segments us ON ut.table_name = us.segment_name
WHERE
us.segment_type = 'TABLE'
ORDER BY
size_mb DESC;
📌 설명
- NUM_ROWS: 통계 기준의 추정된 행 수
- BYTES: 실제 테이블이 차지하는 공간
- user_tables, user_segments: 현재 사용자 기준
TIP: 정확한 건수를 위해선 DBMS_STATS.GATHER_TABLE_STATS 실행이 필요합니다.
🔹 2. 테이블 통계 수집 (정확한 행 수 반영)
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(
ownname => 'SCHEMA_NAME',
tabname => 'TABLE_NAME',
estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE
);
END;
🔹 3. 특정 테이블의 실제 건수와 크기 조회
SELECT
t.table_name,
(SELECT COUNT(*) FROM table_name) AS exact_row_count,
ROUND(s.bytes / 1024 / 1024, 2) AS size_mb
FROM
user_tables t
JOIN
user_segments s ON t.table_name = s.segment_name
WHERE
t.table_name = 'TABLE_NAME';
주의: COUNT(*)는 실제 데이터를 읽기 때문에 느릴 수 있음.
🔹 4. DBA 권한으로 전체 DB 테이블 용량 확인
SELECT
owner,
segment_name AS table_name,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS size_mb
FROM
dba_segments
WHERE
segment_type = 'TABLE'
GROUP BY
owner, segment_name
ORDER BY
size_mb DESC;
🔹 5. LOB 포함 용량 조회 (선택)
LOB(CLOB, BLOB) 컬럼은 별도의 공간을 차지하므로 dba_lobs 또는 user_lobs를 통해 확인해야 합니다.
SELECT
table_name,
column_name,
ROUND(SUM(bytes) / 1024 / 1024, 2) AS lob_size_mb
FROM
user_lobs l
JOIN
user_segments s ON l.segment_name = s.segment_name
GROUP BY
table_name, column_name;
✅ 마무리
Oracle에서 테이블의 데이터 건수와 용량 정보를 정확히 파악하면, 더 나은 쿼리 튜닝과 저장소 설계가 가능합니다.
위에 소개한 SQL 쿼리를 활용하여 성능 진단, 공간 부족 분석, 데이터 관리 자동화에 적극 활용해보세요.