Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 9.0.0 | 

분할 PROMOTE 문

설명

분할(partition) PROMOTE 문은 분할 테이블에서 사용자가 지정한 분할을 독립적인 일반 테이블로 승격(promote)한다. 이것은 거의 접근하지 않는 매우 오래된 데이터를 쌓아놓을(archiving) 목적으로만 유지하려 할 때 유용하다. 해당 분할을 일반 테이블로 승격함으로써 유용한 데이터는 더 적은 수의 분할을 갖게 되므로 접근 부하는 줄이고 오래된 데이터는 편리하게 보존할 수 있다.

분할 PROMOTE 문은 영역 분할(range partition) 테이블과 리스트 분할(list partition) 테이블에만 허용된다. 해시 분할 테이블은 사용자가 제어할 수 있는 방법이 없으므로 승격을 허용하지 않는다.

분할이 일반 테이블로 승격될 때 그 테이블은 오직 데이터와 비고유 로컬 인덱스만 상속받는다. 이것은 다음의 테이블 속성들이 승격된 테이블에 저장되지 않는다는 것을 의미한다.

  • 기본 키
  • 외래 키
  • 고유 인덱스
  • AUTO_INCREMENT 속성 및 시리얼
  • 트리거
  • 메서드
  • 상속 관계(수퍼클래스와 서브클래스)

다음 속성들은 승격된 테이블에서도 그대로 사용된다.

  • 레코드 속성(칼럼 타입들)
  • 테이블 속성
  • 로컬 인덱스(고유 인덱스, 기본 키, 외래 키가 아닌 일반 인덱스)
제약 사항
  • 외래 키가 존재하는 분할 테이블의 분할은 승격할 수 없다.
  • 해시 분할 테이블을 승격하는 것은 허용되지 않는다.
구문

ALTER TABLE identifier PROMOTE PARTITION <identifier_list>

  • <identifier_list> : 승격할 분할 이름
예제

다음은 리스트 분할을 승격한 예이다.

CREATE TABLE t(i int) PARTITION BY LIST(i) (

    partition p0 values in (1, 2, 3),

    partition p1 values in (4, 5, 6),

    partition p2 values in (7, 8, 9),

    partition p3 values in (10, 11, 12)

);

 

ALTER TABLE t PROMOTE PARTITION p1, p2;

승격 이후 테이블 t의 파티션은 p0, p3만 가지게 되며, p1, p2는 각각 t__p__p1, t__p__p2인 테이블로 접근할 수 있다.

csql> ;schema t

=== <Help: Schema of a Class> ===

 <Class Name>

     t

 <Sub Classes>

     t__p__p0

     t__p__p3

 <Attributes>

     i                    INTEGER

 <Partitions>

     PARTITION BY LIST ([i])

     PARTITION p0 VALUES IN (1, 2, 3)

     PARTITION p3 VALUES IN (10, 11, 12)

 

csql> ;schema t__p__p1

=== <Help: Schema of a Class> ===

 <Class Name>

     t__p__p1

 <Attributes>

     i                    INTEGER

다음은 범위 분할을 승격한 예이다.

CREATE TABLE t(i int, j int) PARTITION BY RANGE(i) (

        PARTITION p0 VALUES LESS THAN (1),

        PARTITION p1 VALUES LESS THAN (10),

        PARTITION p2 VALUES LESS THAN (100),

        PARTITION p3 VALUES LESS THAN MAXVALUE

      );

 

CREATE UNIQUE INDEX u_t_i ON t(i);

CREATE INDEX i_t_j ON t(j);

 

ALTER TABLE t PROMOTE PARTITION p1, p2;

승격 이후 테이블 t의 파티션은 p0, p3만 가지게 되며, p1, p2는 각각 t__p__p1, t__p__p2인 테이블로 접근할 수 있다. 승격된 테이블 t__p__p1, t__p__p2에는 기본 키, 외래 키, 고유 키 등 테이블의 일부 속성이나 인덱스가 제거된 상태라는 점에 주의한다.

csql> ;schema t

=== <Help: Schema of a Class> ===

 <Class Name>

     t

 <Sub Classes>

     t__p__p0

     t__p__p3

 <Attributes>

     i                    INTEGER

     j                    INTEGER

 <Constraints>

    UNIQUE u_t_i ON t (i)

    INDEX i_t_j ON t (j)

 <Partitions>

     PARTITION BY RANGE ([i])

     PARTITION p0 VALUES LESS THAN (1)

     PARTITION p3 VALUES LESS THAN MAXVALUE

 

csql> ;schema t__p__p1

=== <Help: Schema of a Class> ===

 <Class Name>

     t__p__p1

 <Attributes>

     i                    INTEGER

     j                    INTEGER

 <Constraints>

    INDEX idx_t_j ON t (j)