행위

Partition exchange

DB CAFE

thumb_up 추천메뉴 바로가기


1 테스트 테이블 생성 ,권한 ,시노님[편집]

CREATE TABLE SCOTT.TEST(  ID NUMBER,  COL1  VARCHAR2(10),  COL2  VARCHAR2(10) );
ALTER TABLE SCOTT.TEST ADD  CONSTRAINT TEST_PK  PRIMARY KEY (ID);
GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST TO HR;
CREATE PUBLIC SYNONYM TEST FOR SCOTT.TEST;

2 원본테이블의 범위를 확인[편집]

--  SCOTT.TEST_INTERIM테이블의 TEST_S0001 파티션과 exchange할 예정이므로, 
-- MAX(ID)가 1000000을 넘으면 안된다.
SELECT MAX(ID) FROM SCOTT.TEST;

3 파티션으로 전환할 테이블을 생성[편집]

CREATE TABLE SCOTT.TEST_INTERIM 
( ID NUMBER,  COL1  VARCHAR2(10),  COL2  VARCHAR2(10) )
PARTITION BY RANGE(ID) 
( PARTITION TEST_S0001 VALUES LESS THAN (1000000),   -- 범위가 원본테이블을 포함해야함. 
  PARTITION TEST_S0002 VALUES LESS THAN (2000000),  
  PARTITION TEST_S0003 VALUES LESS THAN (3000000),  
  PARTITION TEST_S0004 VALUES LESS THAN (4000000) 
)ENABLE ROW MOVEMENT;

4 TEST_INTERIM_PK 인덱스 생성[편집]

-- 원본 테이블과 동일하게 인덱스를 생성
CREATE UNIQUE INDEX SCOTT.TEST_INTERIM_PK ON SCOTT.TEST_INTERIM (ID) LOCAL;

5 Primary Key Constraint 생성[편집]

ALTER TABLE SCOTT.TEST_INTERIM ADD  CONSTRAINT TEST_INTERIM_PK  PRIMARY KEY (ID);

6 원본테이블과 동일하게 권한을 부여[편집]

GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST_INTERIM TO HR;

7 미리 인덱스/constraint명을 수정[편집]

alter index SCOTT.TEST_PK rename to TEST_PK_bk;
alter index SCOTT.TEST_INTERIM_PK    rename to TEST_PK;
alter table SCOTT.TEST              rename constraint TEST_PK to TEST_PK_bk;
alter table SCOTT.TEST_INTERIM   rename constraint TEST_INTERIM_PK to TEST_PK;

-- 7~8 단계는 offline작업이므로, 빠르게 진행합니다.

8 테이블명을 수정[편집]

ALTER TABLE SCOTT.TEST RENAME TO TEST_BK;
ALTER TABLE SCOTT.TEST_INTERIM RENAME TO TEST;

9 파티션 exchange함.(시간이 약간 소요됨)[편집]

-- index의 무결성 체크없이 dictionary 정보만 변경하도록 without validation옵션을 추가한다.
ALTER TABLE SCOTT.TEST 
 EXCHANGE PARTITION  TEST_S0001 WITH TABLE SCOTT.TEST_BK      
  INCLUDING INDEXES WITHOUT VALIDATION;

10 관련된 object compile[편집]

ALTER PUBLIC SYNONYM TEST COMPILE;

11 통계정보 수집[편집]

EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST_INTERIM', granularity=>'AUTO',estimate_percent=>1);