DB

[Oracle] Oracle 파티션 생성 쿼리

파주상남자 ㅣ 2025. 8. 25. 15:56

반응형

📌 Oracle 파티션(Partition) 기능과 생성 방법

1. 파티션이란?

Oracle의 파티션은 큰 테이블이나 인덱스를 논리적으로 하나로 유지하면서도, 물리적으로 여러 조각으로 나누는 기능입니다.
→ 사용자는 전체 테이블을 조회하는 것처럼 보이지만, 내부적으로는 파티션별로 데이터가 분산 저장됩니다.


2. 파티션 장점

  1. 성능 향상
    • 특정 범위 조건이 있는 쿼리는 해당 파티션만 스캔 → 속도 개선
  2. 데이터 관리 용이
    • 오래된 데이터 파티션만 별도 삭제/아카이브 가능
  3. 가용성 확보
    • 특정 파티션만 관리 작업 수행 가능 → 나머지 파티션은 서비스 정상 유지
  4. 병렬 처리 가능
    • 파티션 단위로 병렬 쿼리 실행

3. 파티션 유형 (Oracle)

✅ Range Partition (범위 파티션)

  • 특정 범위 값으로 나눔 (날짜, 숫자 기준)

✅ List Partition (리스트 파티션)

  • 특정 값의 집합으로 나눔 (지역 코드, 카테고리 등)

✅ Hash Partition (해시 파티션)

  • 해시 알고리즘으로 자동 분산 → 균등 분할에 적합

✅ Composite Partition (복합 파티션)

  • 위 방식을 혼합 (예: 범위 + 해시)

4. 파티션 생성 예제

📍 Range Partition 예제

CREATE TABLE sales (
    id        NUMBER,
    sale_date DATE,
    amount    NUMBER
)
PARTITION BY RANGE (sale_date) (
    PARTITION sales_q1 VALUES LESS THAN (TO_DATE('2024-04-01','YYYY-MM-DD')),
    PARTITION sales_q2 VALUES LESS THAN (TO_DATE('2024-07-01','YYYY-MM-DD')),
    PARTITION sales_q3 VALUES LESS THAN (TO_DATE('2024-10-01','YYYY-MM-DD')),
    PARTITION sales_q4 VALUES LESS THAN (TO_DATE('2025-01-01','YYYY-MM-DD'))
);

 

📍 List Partition 예제

CREATE TABLE customers (
    id     NUMBER,
    region VARCHAR2(10),
    name   VARCHAR2(50)
)
PARTITION BY LIST (region) (
    PARTITION asia VALUES ('KR','JP','CN'),
    PARTITION europe VALUES ('FR','DE','UK'),
    PARTITION etc VALUES (DEFAULT)
);

 

 

📍 Hash Partition 예제

CREATE TABLE orders (
    order_id    NUMBER,
    customer_id NUMBER,
    amount      NUMBER
)
PARTITION BY HASH (customer_id)
PARTITIONS 4;

 

📍 Composite Partition 예제(Range + Hash)

CREATE TABLE sales_data (
    id        NUMBER,
    sale_date DATE,
    amount    NUMBER
)
PARTITION BY RANGE (sale_date)
SUBPARTITION BY HASH (id) SUBPARTITIONS 4 (
    PARTITION sales_2024 VALUES LESS THAN (TO_DATE('2025-01-01','YYYY-MM-DD')),
    PARTITION sales_2025 VALUES LESS THAN (TO_DATE('2026-01-01','YYYY-MM-DD'))
);

 

5. 파티션 관리 쿼리

📍 파티션 추가

ALTER TABLE sales
ADD PARTITION sales_2025 VALUES LESS THAN (TO_DATE('2026-01-01','YYYY-MM-DD'));

 

📍 파티션 삭

ALTER TABLE sales DROP PARTITION sales_q1;

 

📍 파티션 이름 변경

ALTER TABLE sales RENAME PARTITION sales_q2 TO sales_april;

 

📍 특정 파티션만 조회

SELECT * FROM sales PARTITION (sales_q3);

 

6. 기존 테이블 파티션 확인하기

Oracle에서는 데이터 딕셔너리 뷰를 통해 파티션 정보를 확인할 수 있습니다.

📍 테이블의 파티션 목록 확인

SELECT table_name, partition_name, high_value, tablespace_name
FROM user_tab_partitions
WHERE table_name = 'SALES';

 

  • partition_name → 파티션 이름
  • high_value → 파티션 분할 기준 값
  • tablespace_name → 저장된 테이블스페이스

 

📍 서브파티션까지 확인 (Composite Partition인 경우)

SELECT table_name, partition_name, subpartition_name, high_value
FROM user_tab_subpartitions
WHERE table_name = 'SALES_DATA';

 

 

📍 현재 DB에서 파티션 여부 확인


partitioning_type → RANGE, LIST, HASH, COMPOSITE 여부 표시

 

✅ 정리

  • Oracle 파티션은 대용량 테이블 성능 및 관리 효율성을 높여줌
  • 테이블 생성 시 Range / List / Hash / Composite 방식 적용 가능
  • 기존 테이블의 파티션 구조는 user_tab_partitions, user_part_tables 뷰에서 확인

 

반응형