행위

"Partition exchange"의 두 판 사이의 차이

DB CAFE

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>
  
-- 1. 원본테이블의 범위를 확인한다.
+
=== 원본테이블의 범위를 확인 ===
 +
<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>
-- 2. 파티션으로 전환할 테이블을 생성합나디.
+
=== 파티션으로 전환할 테이블을 생성 ===
 +
<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번째 줄: 22번째 줄:
 
   PARTITION TEST_S0004 VALUES LESS THAN (4000000)  
 
   PARTITION TEST_S0004 VALUES LESS THAN (4000000)  
 
)ENABLE ROW MOVEMENT;  
 
)ENABLE ROW MOVEMENT;  
+
</source>
-- 3. TEST_INTERIM_PK 인덱스 생성합니다.
+
=== 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>
-- 4. Primary Key Constraint 생성합니다.
+
=== 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>
-- 5. 원본테이블과 동일하게 권한을 부여합니다.
+
=== 원본테이블과 동일하게 권한을 부여 ===
 +
<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>
-- 6. 미리 인덱스/constraint명을 수정함
+
=== 미리 인덱스/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작업이므로, 빠르게 진행합니다.
--7. 테이블명을 수정함,
+
=== 테이블명을 수정 ===
 +
<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>
-- 8 파티션 exchange함.(시간이 약간 소요됨)
+
=== 파티션 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>
-- 9. 관련된 object compile함.
+
=== 관련된 object compile ===
 +
<source lang=sql>
 
ALTER PUBLIC SYNONYM TEST COMPILE;
 
ALTER PUBLIC SYNONYM TEST COMPILE;
 
+
</source>
-- 10. 통계정보 수집합니다.
+
=== 통계정보 수집 ===
 +
<source lang=sql>
 
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST_INTERIM', granularity=&gt;'AUTO',estimate_percent=&gt;1);
 
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCOTT','TEST_INTERIM', granularity=&gt;'AUTO',estimate_percent=&gt;1);
 
+
</source>
 
[[Category:oracle]]
 
[[Category:oracle]]

2022년 7월 6일 (수) 15:56 판

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=&gt;'AUTO',estimate_percent=&gt;1);