SQL의 모든 것/SQL의 실무
오라클 CREATE TABLE [PARTITION BY]
IT너드남
2024. 6. 6. 00:18
ORACLE 12g 기준 및 실무 영역으로 작성한 글임을 알려드립니다.
실제 프로젝트를 개발하다보면, 모델링 혹은 요구사항 등 다양한 상황들에 의해 또는 DB 성능 이슈로 인해 테이블들을 다량 파티션 해야하는 경우가 있다.
가장 좋은 경우는 설계 단계부터 데이터 양이 많은 주제 영역을 예측하여 파티션을 할당하는 게 가장 좋겠지만, 늘 그런 꽃다운 상황은 일어나지 않는 것 같다.
아래 코드는 파티션 테이블 생성 방법이다.
CREATE TABLE 스키마명.테이블명 (
컬럼명 데이터타입(길이) ,
컬럼1 VARCHAR2(100) ,
컬럼2 VARCHAR2(100) ,
컬럼3 VARCHAR2(100) ,
컬럼4 VARCHAR2(100) ,
컬럼5 NUMBER NOT NULL,
컬럼6 DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT PK명 PRIMARY KEY (PK컬럼1, PK컬럼2))
PARTITION BY RANGE (PK가 되는 일자컬럼)
(
PARTITION 파티션명 VALUES LESS THAN (기준일자),
PARTITION 파티션명 VALUES LESS THAN (20240501),
PARTITION 파티션명 VALUES LESS THAN (20240502),
...
PARTITION 파티션명 VALUES LESS THAN (MAXVALUE)
);
COMMENT ON TABLE 스키마명.테이블명 IS '테이블_코멘트';
COMMENT ON COLUMN 스키마명.테이블명.컬럼명 IS '컬럼_코멘트';
파티션 기준이 되는 PK 일자컬럼을 범위로 잡고 시작하는 파티션 일자부터 설정하되, 마지막은 MAXVALUE로 설정해준다.
다만, 파티션 테이블을 생성한다는 의미는 해당 테이블을 DROP 시키고 재생성 한다는 의미이기 때문에 사이트 DB 성능에 따라 적재되어 있던 데이터들을 다시 재적재 하는데 걸리는 시간이 다르기 때문에 해당 부분은 의논 혹은 상의를 통해 진행되어야 한다.
말 그대로 이미 생성되어 있는 테이블에 파티션을 생성할 수는 없다. 파티션을 할당하여 테이블을 재생성 후 데이터 재적재가 이루어져야 한다.
한 가지 팁이 있다. 보통 파티션 테이블을 생성하는 경우에는 테이블 압축까지 이뤄진다. 아래 코드를 보자.
ALTER TABLE 스키마명.테이블명 COMPRESS FOR QUERY HIGH;
파티션 테이블을 생성했다면 위 코드로 테이블 압축까지 진행해주자.
다만, 사이트마다 제약조건이나 테이블 변경 조건이 다르기 때문에 한 개인이 판단하고 실행하여서는 안된다.
분명 해당 과정으로는 완벽한 파티션 및 압축 단계라고 할 수 없다.
다음 과정은 댓글 작성 시 자세히 알려드리도록 하겠다.