Partition exchange
DB CAFE
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
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);