TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-15 |
제목 | 일반 TABLE을 PARTITIONED TABLE로 변환시 INDEX도 같이 변환하는 방법 | ||
---|---|---|---|
일반 TABLE을 PARTITIONED TABLE로 변환시 INDEX도 같이 변환하는 방법
================================================================ PURPOSE ------- partition exchange방법중 index까지 같이 변환하는 방법을 설명한다.(bul.18004 참조) SCOPE ----- Oracle Partitioning Option은 8~10g Standard Edition에서는 지원하지 않는다. Explanation ----------- 이때 dummy table에 미리 index를 생성해놓고, 이것을 exchange시 index도 같이 partition으로 생성할수 있는데, 이경우 including indexes라는 option을 사용한다. Example ------- 다음 script를 이용해서 이 방법을 test해볼수 있다. --------------- script -------------------------- drop table p_emp; drop table d_y; drop table d_z; CREATE TABLE p_emp (sal NUMBER(7,2), empno number(4), ename varchar2(10)) PARTITION BY RANGE(sal) (partition emp_p1 VALUES LESS THAN (2000), partition emp_p2 VALUES LESS THAN (MAXVALUE)); create table d_y (sal NUMBER(7,2), empno number(4), ename varchar2(10)) tablespace tools; create table d_z (sal NUMBER(7,2), empno number(4), ename varchar2(10)) tablespace tools; insert into d_y select sal, empno, ename from emp where sal < 2000; insert into d_z select sal, empno, ename from emp where sal >= 2000; commit; create index i_p on p_emp(empno) local; create index i_y on d_y(empno) storage ( initial 2k next 2k pctincrease 0) tablespace knam; create index i_z on d_z(empno) storage ( initial 2k next 2k pctincrease 0) tablespace knam; alter table p_emp exchange partition emp_p1 with table d_y including indexes; alter table p_emp exchange partition emp_p2 with table d_z including indexes; ------------ end ------------------------- index가 정상적으로 바뀌었는지 확인하려면 다음 sql을 이용한다. exchange를 하기 전 ------------------ SQL> select segment_name, bytes, blocks, extents from user_segments where segment_name = 'I_Y'; SEGMENT_NAME BYTES BLOCKS EXTENTS -------------------- ---------- ---------- ---------- I_Y 327680 160 5 SQL> select partition_name, bytes, blocks, extents from user_segments where segment_name = 'I_P'; PARTITION_NAME BYTES BLOCKS EXTENTS ------------------------------ ---------- ---------- ---------- EMP_P1 65536 32 1 EMP_P2 65536 32 1 including index option을 사용하지 않은 경우 --------------------------------------- 이 경우 index의 size를 보면 변경되지 않고 기존의 segment그대로 있고, status도 'UNUSABLE'상태이다. SQL> select segment_name, bytes, blocks, extents from user_segments where segment_name = 'I_Y'; SEGMENT_NAME BYTES BLOCKS EXTENTS -------------------- ---------- ---------- ---------- I_Y 327680 160 5 SQL> select partition_name, bytes, blocks, extents from user_segments where segment_name = 'I_P'; PARTITION_NAME BYTES BLOCKS EXTENTS ------------------------------ ---------- ---------- ---------- EMP_P1 65536 32 1 EMP_P2 65536 32 1 SQL> select index_name, partition_name, status from user_ind_partitions where index_name = 'I_P'; INDEX_NAME PARTITION_NAME STATUS ------------------------------ ------------------------------ -------- I_P EMP_P1 UNUSABLE I_P EMP_P2 UNUSABLE including index option을 사용하여 exchage했을경우 ---------------------------------------------- index의 size도 바뀌었고, status가 'USABLE'이다. SQL> select segment_name, bytes, blocks, extents from user_segments where segment_name = 'I_Y'; SEGMENT_NAME BYTES BLOCKS EXTENTS -------------------- ---------- ---------- ---------- I_Y 65536 32 1 SQL> select partition_name, bytes, blocks, extents from user_segments where segment_name = 'I_P'; PARTITION_NAME BYTES BLOCKS EXTENTS ------------------------------ ---------- ---------- ---------- EMP_P1 327680 160 5 EMP_P2 65536 32 1 SQL> select index_name, partition_name, status from user_ind_partitions where index_name = 'I_P'; INDEX_NAME PARTITION_NAME STATUS ------------------------------ ------------------------------ -------- I_P EMP_P1 USABLE I_P EMP_P2 USABLE Reference Documents ------------------- note.198120.1 |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |