"Partition exchange"의 두 판 사이의 차이
DB CAFE
(새 문서: 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...) |
(→파티션 테이블 생성) |
||
(같은 사용자의 중간 판 3개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
+ | === 테스트 테이블 생성 ,권한 ,시노님 === | ||
+ | <source lang=sql> | ||
CREATE TABLE SCOTT.TEST( ID NUMBER, COL1 VARCHAR2(10), COL2 VARCHAR2(10) ); | CREATE TABLE SCOTT.TEST( ID NUMBER, COL1 VARCHAR2(10), COL2 VARCHAR2(10) ); | ||
ALTER TABLE SCOTT.TEST ADD CONSTRAINT TEST_PK PRIMARY KEY (ID); | ALTER TABLE SCOTT.TEST ADD CONSTRAINT TEST_PK PRIMARY KEY (ID); | ||
GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST TO HR; | GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST TO HR; | ||
CREATE PUBLIC SYNONYM TEST FOR SCOTT.TEST; | CREATE PUBLIC SYNONYM TEST FOR SCOTT.TEST; | ||
− | + | </source> | |
− | + | === 원본테이블의 범위를 확인 === | |
+ | <source lang=sql> | ||
-- SCOTT.TEST_INTERIM테이블의 TEST_S0001 파티션과 exchange할 예정이므로, | -- SCOTT.TEST_INTERIM테이블의 TEST_S0001 파티션과 exchange할 예정이므로, | ||
-- MAX(ID)가 1000000을 넘으면 안된다. | -- MAX(ID)가 1000000을 넘으면 안된다. | ||
SELECT MAX(ID) FROM SCOTT.TEST; | SELECT MAX(ID) FROM SCOTT.TEST; | ||
− | + | </source> | |
− | + | === 파티션으로 전환할 테이블을 생성 === | |
+ | <source lang=sql> | ||
CREATE TABLE SCOTT.TEST_INTERIM | CREATE TABLE SCOTT.TEST_INTERIM | ||
( ID NUMBER, COL1 VARCHAR2(10), COL2 VARCHAR2(10) ) | ( ID NUMBER, COL1 VARCHAR2(10), COL2 VARCHAR2(10) ) | ||
19번째 줄: | 23번째 줄: | ||
PARTITION TEST_S0004 VALUES LESS THAN (4000000) | PARTITION TEST_S0004 VALUES LESS THAN (4000000) | ||
)ENABLE ROW MOVEMENT; | )ENABLE ROW MOVEMENT; | ||
− | + | </source> | |
− | + | === TEST_INTERIM_PK 인덱스 생성 === | |
− | -- 원본 테이블과 동일하게 인덱스를 | + | <source lang=sql> |
+ | -- 원본 테이블과 동일하게 인덱스를 생성 | ||
CREATE UNIQUE INDEX SCOTT.TEST_INTERIM_PK ON SCOTT.TEST_INTERIM (ID) LOCAL; | CREATE UNIQUE INDEX SCOTT.TEST_INTERIM_PK ON SCOTT.TEST_INTERIM (ID) LOCAL; | ||
− | + | </source> | |
− | + | === Primary Key Constraint 생성 === | |
+ | <source lang=sql> | ||
ALTER TABLE SCOTT.TEST_INTERIM ADD CONSTRAINT TEST_INTERIM_PK PRIMARY KEY (ID); | ALTER TABLE SCOTT.TEST_INTERIM ADD CONSTRAINT TEST_INTERIM_PK PRIMARY KEY (ID); | ||
− | + | </source> | |
− | + | === 원본테이블과 동일하게 권한을 부여 === | |
+ | <source lang=sql> | ||
GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST_INTERIM TO HR; | GRANT DELETE, INSERT, SELECT, UPDATE ON SCOTT.TEST_INTERIM TO HR; | ||
− | + | </source> | |
− | + | === 미리 인덱스/constraint명을 수정 === | |
+ | <source lang=sql> | ||
alter index SCOTT.TEST_PK rename to TEST_PK_bk; | alter index SCOTT.TEST_PK rename to TEST_PK_bk; | ||
alter index SCOTT.TEST_INTERIM_PK rename to TEST_PK; | 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 rename constraint TEST_PK to TEST_PK_bk; | ||
alter table SCOTT.TEST_INTERIM rename constraint TEST_INTERIM_PK to TEST_PK; | alter table SCOTT.TEST_INTERIM rename constraint TEST_INTERIM_PK to TEST_PK; | ||
− | + | </source> | |
-- 7~8 단계는 offline작업이므로, 빠르게 진행합니다. | -- 7~8 단계는 offline작업이므로, 빠르게 진행합니다. | ||
− | + | === 테이블명을 수정 === | |
+ | <source lang=sql> | ||
ALTER TABLE SCOTT.TEST RENAME TO TEST_BK; | ALTER TABLE SCOTT.TEST RENAME TO TEST_BK; | ||
ALTER TABLE SCOTT.TEST_INTERIM RENAME TO TEST; | ALTER TABLE SCOTT.TEST_INTERIM RENAME TO TEST; | ||
− | + | </source> | |
− | + | === 파티션 exchange함.(시간이 약간 소요됨) === | |
+ | <source lang=sql> | ||
-- index의 무결성 체크없이 dictionary 정보만 변경하도록 without validation옵션을 추가한다. | -- index의 무결성 체크없이 dictionary 정보만 변경하도록 without validation옵션을 추가한다. | ||
ALTER TABLE SCOTT.TEST | ALTER TABLE SCOTT.TEST | ||
EXCHANGE PARTITION TEST_S0001 WITH TABLE SCOTT.TEST_BK | EXCHANGE PARTITION TEST_S0001 WITH TABLE SCOTT.TEST_BK | ||
INCLUDING INDEXES WITHOUT VALIDATION; | INCLUDING INDEXES WITHOUT VALIDATION; | ||
− | + | </source> | |
− | + | === 관련된 object compile === | |
+ | <source lang=sql> | ||
ALTER PUBLIC SYNONYM TEST COMPILE; | ALTER PUBLIC SYNONYM TEST COMPILE; | ||
− | + | </source> | |
− | + | === 통계정보 수집 === | |
+ | <source lang=sql> | ||
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST_INTERIM', granularity=>'AUTO',estimate_percent=>1); | EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST_INTERIM', granularity=>'AUTO',estimate_percent=>1); | ||
+ | </source> | ||
+ | [[Category:oracle]] |
2022년 7월 6일 (수) 15:58 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
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);