반응형
오라클 파티션이란?
오라클 파티션(PARTITION)은 테이블이나 인덱스를 논리적으로 분할하여 관리와 성능을 향상시키는 기법이다.
예를 들어, 수백만 건 이상의 데이터가 있는 큰 테이블을 파티션으로 나누면, 특정 데이터를 빠르게 조회하고 관리하기가 쉬워진다.
🔹 파티션을 쓰면 좋은 경우
- 데이터가 매우 크고 주기적으로 관리가 필요할 때 (월별, 연도별 데이터 등)
- 특정 기간 데이터를 자주 조회하거나 삭제할 때
- 성능을 개선하고 백업과 복구를 효율적으로 수행하고 싶을 때
🔹 파티션의 장점
- 쿼리 성능 향상 (특정 파티션만 검색 가능)
- 데이터 관리 용이성 (불필요한 데이터 삭제 용이)
- 데이터 가용성 증가 (부분적인 장애가 전체에 영향을 덜 줌)
예제 테이블
SALE_ID | SALE_DATE | AMOUNT |
1 | 2024-01-15 | 1000 |
2 | 2024-02-10 | 2000 |
3 | 2024-02-20 | 1500 |
4 | 2024-03-05 | 3000 |
오라클 파티션의 종류 및 사용 방법
1. 범위 파티션 (RANGE PARTITION, 가장 많이 사용)
▶ 사용 방법
데이터의 범위(예: 날짜나 번호)에 따라 테이블을 나누는 방식이다.
- 기존 테이블에 파티션 추가
ALTER TABLE sales
PARTITION BY RANGE (sale_date) (
PARTITION sales_jan VALUES LESS THAN (TO_DATE('2024-02-01', 'YYYY-MM-DD')),
PARTITION sales_feb VALUES LESS THAN (TO_DATE('2024-03-01', 'YYYY-MM-DD')),
PARTITION sales_mar VALUES LESS THAN (TO_DATE('2024-04-01', 'YYYY-MM-DD'))
);
▶ 파티션 조회
SELECT * FROM sales PARTITION(sales_jan);
-- 결과:
-- SALE_ID | SALE_DATE | AMOUNT
-- 1 | 2024-01-15 | 1000
SELECT * FROM sales PARTITION(sales_feb);
-- 결과:
-- SALE_ID | SALE_DATE | AMOUNT
-- 2 | 2024-02-10 | 2000
-- 3 | 2024-02-20 | 1500
2. 해시 파티션 (HASH PARTITION)
▶ 사용 방법
데이터를 균등하게 분산시키는 방식으로, 특정 컬럼의 해시값을 기준으로 나눈다.
- 기존 테이블에 파티션 추가
ALTER TABLE sales_hash
PARTITION BY HASH (sale_id)
PARTITIONS 4;
▶ 파티션 조회 (해시 파티션은 직접적인 파티션 이름 조회보단 전체에서 분산 확인)
SELECT sale_id, sale_amount FROM sales_hash;
-- 결과 (예시):
-- SALE_ID | SALE_AMOUNT
-- 1 | 1000
-- 2 | 1500
-- 3 | 2000
-- (파티션 내부 분산은 DBA_TAB_PARTITIONS 등에서 확인 가능)
3. 리스트 파티션 (LIST PARTITION)
▶ 사용 방법
특정 값의 목록에 따라 나누는 방식으로 국가 코드, 지역 코드 등을 활용할 때 유용하다.
- 기존 테이블에 파티션 추가
ALTER TABLE region_sales
PARTITION BY LIST (region_code) (
PARTITION asia VALUES ('KR', 'JP', 'CN'),
PARTITION europe VALUES ('UK', 'FR', 'DE')
);
▶ 파티션 조회
SELECT * FROM region_sales PARTITION(asia);
-- 결과:
-- SALE_ID | REGION_CODE
-- 10 | KR
-- 11 | JP
SELECT * FROM region_sales PARTITION(europe);
-- 결과:
-- SALE_ID | REGION_CODE
-- 12 | UK
-- 13 | FR
파티션 관리 및 조회 방법
🔸 파티션 추가
※ 아래 예시는 "범위 파티션(RANGE PARTITION)"을 사용하는 테이블에 새로운 범위 구간을 추가하는 경우.
※ 기존 파티션이 RANGE 방식일 때만 이런 방식으로 파티션을 추가할 수 있다.
ALTER TABLE sales ADD PARTITION sales_apr VALUES LESS THAN (TO_DATE('2024-05-01', 'YYYY-MM-DD'));
-- 이 구문은 범위 파티션(RANGE PARTITION) 방식에서만 사용할 수 있습니다.
-- 예: sales_apr 파티션은 '2024-04-01 ~ 2024-04-30' 범위의 데이터를 포함하게 됨
🔸 파티션 삭제
ALTER TABLE sales DROP PARTITION sales_jan;
🔸 파티션 사용 확인하기
EXPLAIN PLAN FOR
SELECT * FROM sales
WHERE sale_date BETWEEN TO_DATE('2024-02-01', 'YYYY-MM-DD') AND TO_DATE('2024-02-28', 'YYYY-MM-DD');
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
-- 결과에서 PARTITION RANGE SINGLE 또는 PARTITION RANGE ALL이 나오면 정상
정리
- 범위 파티션: 날짜나 숫자 범위로 데이터 관리 (가장 일반적)
- 해시 파티션: 데이터 균등 분산 목적
- 리스트 파티션: 특정 값 기준으로 데이터 관리
오라클에서 파티션을 제대로 활용하면 관리 편의성뿐만 아니라 성능까지 크게 끌어올릴 수 있다.
반응형
'프로그래밍 > 데이터베이스' 카테고리의 다른 글
[Oracle] 오라클 RANK / DENSE_RANK / ROW_NUMBER 순위 함수 (1) | 2025.04.24 |
---|---|
[Oracle] 오라클 NVL / NVL2 / COALESCE 함수 차이점 정리 (0) | 2025.04.22 |
[Oracle] 오라클 인덱스(INDEX) 개념 및 종류 (Oracle INDEX) (0) | 2025.01.31 |
[Oracle] 오라클 뷰(VIEW)와 시노님(SYNONYM) 사용 방법 (Oracle View,Materialized View) (0) | 2025.01.29 |
[Oracle] 오라클 DB 링크 (DB Link) 사용 방법 (권한, 생성, 삭제, 조회) (0) | 2024.07.22 |