본문 바로가기
Backend

파티셔닝을 추가하려면?

by hammii 2025. 3. 23.
테이블 생성이 이미 끝난 상태에서 나중에 파티셔닝을 추가하려면 어떻게 해야할까?

 

만약 아래와 같이 transactions (거래) 테이블이 생성되어있을 경우, 처리하는 방법을 알아보자.
CREATE TABLE transactions (
    trans_id NUMBER PRIMARY KEY,
    asset_id NUMBER NOT NULL,
    owner_id NUMBER NOT NULL,
    trans_date DATE DEFAULT SYSDATE,
    trans_price NUMBER NOT NULL,
    CONSTRAINT fk_asset_id FOREIGN KEY (asset_id) REFERENCES assets (asset_id),
    CONSTRAINT fk_owner_id FOREIGN KEY (owner_id) REFERENCES owners (owner_id)
);

 

 

 

1. 파티셔닝을 포함한 임시 테이블(transactions_temp) 생성

CREATE TABLE transactions_temp (
    trans_id NUMBER PRIMARY KEY,
    asset_id NUMBER NOT NULL,
    owner_id NUMBER NOT NULL,
    trans_date DATE DEFAULT SYSDATE,
    trans_price NUMBER NOT NULL,
    CONSTRAINT fk_asset_id_temp FOREIGN KEY (asset_id) REFERENCES assets (asset_id),
    CONSTRAINT fk_owner_id_temp FOREIGN KEY (owner_id) REFERENCES owners (owner_id)
)
PARTITION BY RANGE (trans_date) (
    PARTITION p_2023 VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')),
    PARTITION p_2024 VALUES LESS THAN (TO_DATE('2025-01-01', 'YYYY-MM-DD')),
    PARTITION p_2025 VALUES LESS THAN (TO_DATE('2026-01-01', 'YYYY-MM-DD')),
    PARTITION p_max VALUES LESS THAN (MAXVALUE)
);

 

2. 기존 데이터 복사

INSERT INTO transactions_temp
SELECT * FROM transactions;

 

3. 기존 테이블 삭제 및 이름 변경

DROP TABLE transactions;
RENAME transactions_temp TO transactions;

 

4. 인덱스 및 제약 재생성

ALTER TABLE transactions
ADD CONSTRAINT fk_asset_id FOREIGN KEY (asset_id) REFERENCES assets (asset_id);
ALTER TABLE transactions
ADD CONSTRAINT fk_owner_id FOREIGN KEY (owner_id) REFERENCES owners (owner_id);

 

 

'Backend' 카테고리의 다른 글

JPA 복합키  (0) 2025.04.13
SQL 쿼리 튜닝 방법  (0) 2025.03.30
crontab 기본 형식  (0) 2025.03.23
Spring 예외처리  (0) 2025.03.16
Oracle 제약조건 종류와 사용 방법  (0) 2025.03.15