행위

Partition exchange

DB CAFE

Dbcafe (토론 | 기여)님의 2019년 12월 19일 (목) 12:19 판
thumb_up 추천메뉴 바로가기


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;


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

-- 2. 파티션으로 전환할 테이블을 생성합나디. 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;

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

-- 4. Primary Key Constraint 생성합니다. ALTER TABLE SCOTT.TEST_INTERIM ADD CONSTRAINT TEST_INTERIM_PK PRIMARY KEY (ID);

-- 5. 원본테이블과 동일하게 권한을 부여합니다. GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST_INTERIM TO HR;

-- 6. 미리 인덱스/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작업이므로, 빠르게 진행합니다. --7. 테이블명을 수정함, ALTER TABLE SCOTT.TEST RENAME TO TEST_BK; ALTER TABLE SCOTT.TEST_INTERIM RENAME TO TEST;

-- 8 파티션 exchange함.(시간이 약간 소요됨) -- index의 무결성 체크없이 dictionary 정보만 변경하도록 without validation옵션을 추가한다. ALTER TABLE SCOTT.TEST

EXCHANGE PARTITION  TEST_S0001 WITH TABLE SCOTT.TEST_BK      
 INCLUDING INDEXES WITHOUT VALIDATION; 

-- 9. 관련된 object compile함. ALTER PUBLIC SYNONYM TEST COMPILE;

-- 10. 통계정보 수집합니다. EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST_INTERIM', granularity=>'AUTO',estimate_percent=>1);