programing

Oracle에서 범위 파티션을 만들기 위해 기존 테이블을 변경하는 방법

batch 2023. 8. 19. 09:57
반응형

Oracle에서 범위 파티션을 만들기 위해 기존 테이블을 변경하는 방법

10년 데이터가 있는 기존 테이블이 있습니다(폐기물 처리했습니다).

테이블 내의 하나의 날짜 키 열에 있는 기존 테이블을 Range 파티션으로 분할하려고 합니다.

제가 보는 대부분의 예는 다음과 같습니다.CREATE TABLE..PARTITION BY RANGE...새 파티션을 추가합니다.하지만 제 테이블은 기존 테이블입니다.

좀 필요할 것 같아요ALTER진술.

ALTER TABLE TABLE_NAME
PARTITION BY RANGE(CREATED_DATE)
 PARTITION JAN16 VALUES LESS THAN (01-02-2016),
 PARTITION FEB16 VALUES LESS THAN (01-03-2016) AND GREATER THAN(31-01-2016),//OR?
 PARTITION MAR16 VALUES BETWEEN (01-03-2016) AND (31-03-2016),  //OR?

두 가지 질문이 있습니다.

  1. 분할 메커니즘을 추가하기 위해 Alter 문이 필요합니까, 아니면 create 문으로 작업해야 합니까?

  2. 각 파티션에 한 달 데이터만 유지하기 위한 올바른 구문은 무엇입니까?

사용 중인 경우Oracle 12c Release 2싱글을 사용할 수 있습니다.ALTER분할되지 않은 테이블을 분할된 테이블로 변환하는 방법(일방향 이동):

CREATE TABLE my_tab ( a NUMBER(38,0), b NUMBER(38,0)); 

ALTER TABLE MY_TAB MODIFY PARTITION BY RANGE (a) INTERVAL (1000) (   
    PARTITION p1 VALUES LESS THAN (1000)) ONLINE;

다음을 추가하여 인덱스를 변환할 수도 있습니다.

update indexes (index_name [local/global]);

db<>디플 데모

분할되지 않은 테이블에는 두 가지 옵션이 있습니다.

  1. 데이터 내보내기, 테이블 삭제, 새 파티션 테이블 만들기, 데이터 가져오기
  2. 분할 후 파티션 교환 방법을 사용합니다.https://oracle-base.com/articles/misc/partitioning-an-existing-table-using-exchange-partition

또한 매월 새 파티션을 만들려면 SET INTERVAL에 대해 읽어보십시오.예:

CREATE TABLE tst
   (col_date DATE)
 PARTITION BY RANGE (col_date) INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
(PARTITION col_date_min VALUES LESS THAN (TO_DATE('2010-01-01', 'YYYY-MM-DD')));

언급URL : https://stackoverflow.com/questions/35932771/how-do-i-alter-my-existing-table-to-create-a-range-partition-in-oracle

반응형