[사용 명령어]
create table <테이블명>{
··········
)
partition by range(<컬럼명>)
(
partition<파티션명>value less then(<상한 값>)[tablespace<테이블스페이스명>],
partition<파티션명>value less then(<상한 값>)[tablespace<테이블스페이스명>],
··········
);
- 범위 파티션으로 구현된 테이블을 생성한다.
- values less then : 상한 값을 정의 한다. (범위에 포함되지 않는다.)

alter table<테이블명>
add partition<파티션명>value less then(<상한값>)[tablespace<테이블스페이스명>];
- 테이블에 범위 파티션을 추가한다.

'Table' 카테고리의 다른 글

리스트 파티션 테이블 생성과 관리  (0) 2012.02.28
테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
테이블 move와 인덱스 rebuild  (0) 2012.02.26
세그먼트  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
[사용 명령어]
select table_owner, table_name, partition_name, high_value, tablespace_name
from dba_tab_partitions;
- 테이블의 파티션을 조회한다.
- high_value : 리스트 파티션은 일치하는 값, 범위 파티션에서는 상한 값을 나타낸다.

select owner, name, column_name
from dba_part_key_columns;
 - 파티션의 기준이 되는 컬럼을 조회한다.


create table<테이블명>(
 ··········
)
partition by list(<컬럼명>)
(
partition<파티션명>values(<컬럼값>)[tablespace<테이블스페이스명>],
partition<파티션명>values(<컬럼값>)[tablespace<테이블스페이스명>],
 ··········
);
- 파티션으로 구현된 테이블을 생성한다.
- list절에 컬럼명을 여러 개 지정할 수 없다.

alter table<테이블명>
drop partition<파티션명>;
- 파티션을 삭제한다.

파티션은 별다른 튜팅 이슈가 없는 매우 큰 테이블에서 진가를 발휘한다. 기능과 객체 분석이 완벽한 경우에 단순히 테이블의 행이 너무 많아서 성능에 문제가 된다면 그 이유는 예상치 못한 데이터의 폭주일 것이다. 이런 경우 재설계나 재구축 없이 테이블의 재구축만으로 성능을 배가 할 수 있다. 분할된 각 파티션의 다른 디스크 테이블스페이나 디스에 저장된다면 성능이 더 좋아질 수 있다.


'Table' 카테고리의 다른 글

범위 파티션 테이블 생성과 관리  (0) 2012.02.28
테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
테이블 move와 인덱스 rebuild  (0) 2012.02.26
세그먼트  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
SELECT d.tn,
       ROUND (total / 1000000) "TOTAL(MB)",
       ROUND (FREE / 1000000) "FREE(MB)",
       TO_CHAR (ROUND (free / total * 100, 1), '99.9') || '%' RATE
  FROM (  SELECT TABLESPACE_NAME TN, SUM (BYTES) TOTAL
            FROM DBA_DATA_FILES
        GROUP BY TABLESPACE_NAME) D,
       (  SELECT TABLESPACE_NAME TN, SUM (BYTES) FREE
            FROM DBA_FREE_SPACE
        GROUP BY TABLESPACE_NAME) F
 WHERE D.TN = F.TN;

'Table' 카테고리의 다른 글

범위 파티션 테이블 생성과 관리  (0) 2012.02.28
리스트 파티션 테이블 생성과 관리  (0) 2012.02.28
테이블 move와 인덱스 rebuild  (0) 2012.02.26
세그먼트  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
alter table <테이블명> move [tablespace <테이블스페이명>];
- 테이블을 지정한 테이블스페이스로 이동한다.
- 테이블스페이스를 지정하지 않으면 현재 저장된 테이블 스페이스에 재구성한다.

alter index <인덱스명> rebuild [tablespace <테이블스페이스명>];
- 인덱스를 지정한 테이블스페이지로 이동한다.
- 테이블스페이스를 지정하지 않으면 현재 저장된 테이블스페이스에 재구성한다.

테이블을 MOVE하는 경우
- chaining 행 수가 많을 때
- 사용 중인 블록이 많고 블록의 이용률이 낮을 때

인덱스를 rebuild하는 경우
- 테이블이 move된 경우
- 테이블에 insert 뿐만 아니라 update나 delete 작업이 많고 rebuild한지 6개월 이상이 지났을 때
- leaf 블록에 지워진 데이터가 많은 겨우



'Table' 카테고리의 다른 글

리스트 파티션 테이블 생성과 관리  (0) 2012.02.28
테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
세그먼트  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
partition 관리  (0) 2012.02.25
오라클에서 세그먼트란 디스크의 공간을 차지하는 모든 오브젝트를 통칭하는 용어다. 테이블이나 인덱스와 같이 실제로 저장되는 데이터가 있는 것들은 모두 세그먼트이고, 뷰처럼 저장되는 데이터가 없는 것들은 세그먼트라 부르지 않는다. 예외적으로 mview는 세그먼트에 속한다.

'Table' 카테고리의 다른 글

테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
테이블 move와 인덱스 rebuild  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
partition 관리  (0) 2012.02.25
Partition table  (0) 2012.02.25
1. system tablespace는 딕셔너리를 제외한 세그먼트를 절대 생성하지 않는다.
2. 테이블과 인덱스를 동일한 디스크(테이블 스페이스)에 저장하지 않는다.
3. 관계(relationship)에 의해 번번히 조인되는 테이블들을 동일한 디스크(테이블 스페이스)에 저장하지 않는다.

'Table' 카테고리의 다른 글

테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
테이블 move와 인덱스 rebuild  (0) 2012.02.26
세그먼트  (0) 2012.02.26
partition 관리  (0) 2012.02.25
Partition table  (0) 2012.02.25

'Table' 카테고리의 다른 글

테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
테이블 move와 인덱스 rebuild  (0) 2012.02.26
세그먼트  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
Partition table  (0) 2012.02.25

○ 관련 dictionary 및 view 정보

dba_tab_partitions

dba_part_tables

dba_ind_partitions

○ Partiton Table 생성

SQL> CREATE TABLE DEPT

(deptno number not null,

dname varchar2(10) not null,

loc varchar2(14))

PARTITION BY RANGE(deptno)

(PARTITION part1 VALUES LESS THAN(30).

PARTITION part2 VALUES LESS THAN(MAXVALUE));

○ LOCAL PREFIX INDEX 생성

- index 의 파티션이 Table의 파티션과 동일하게 생성된다.

SQL> CREATE INDEX deptloc1_idx dept(deptno) LOCAL

○ LOCAL NON-PREFIX INDEX 생성

SQL> CREATE INDEX deptloc2_idx dept(loc) LOCAL;

○ GLOBAL PREFIX INDEX 생성

- index 의 파티션이 Table의 파티션과는 다르게 생성된ㄷ.

CREATE INDEX dept_idx ON(dname)

GLOBAL PARTITION BY RANGE(dname)

(PARTITION p1 VALUES LESS THAN('N'),

PARTITION P2 VALUES LESS THAN(MAXVALUE) );

○ Partition 추가

SQL> alter table dept

add partition p3 values less than('20101010') tablespace TBS01;

○ Partition 삭제

SQL> alter table dept

drop partiton p3 ;

○ Partition 나누기 ( Split)

SQL> alter table dept

split partition p3

at('20100229')

into ( partition p3_1 tablespace TBS01,

partition p3_2 tablespace TBS02);

==> 20100229 값 이하는 P3_1 파티션에, 20100229 값 이상(20100301)은 P3_2 에 입력된다.

○ Partition Name 변경

SQL> alter table part_table rename partition part_01 to part_02;

○ Partition의 Tablespace 옮기는 방법

SQL> alter table part_table move partition tablespace TBS01 nologging;

○ Partition Truncate

SQL> alter table part_table truncate partition part_02;

○ Partition 물리적 속성 변경

SQL> alter table part_table storage( next 10m ); ==> 모든 파티션의 속성값이 변경됨

SQL> alter table part_table modify partition part_02 storage( initial 100m );

==> 해당 파티션의 속성값만 변경됨

○ Partition Exchage

- 파티션 테이블을 일반 테이블로 변경하거나,

일반 테이블을 파티션 테이블로 변경시킬 때 사용가능하다.

SQL> CREATE TABLE p_emp

(sal number(7,2))

PARTITION BY RANGE(sal)

(PARTITION emp_p1) values less than(2000),

partition emp_p2 values less than(4000)) ;

SQL> create table dummy_y

as

select sal from emp

where sal <2000;

SQL> create table dummy_z

as

select sal from emp

where sal between 2000 and 3999;

SQL> alter table p_emp exchange Partition emp_p1 with table dummy_y;

SQL> alter table p_emp exchange Partition emp_p2 with table dummy_z;

'Table' 카테고리의 다른 글

테이블스페이스 남아 있는 공간 확인  (0) 2012.02.26
테이블 move와 인덱스 rebuild  (0) 2012.02.26
세그먼트  (0) 2012.02.26
테이블 생성시 고려할 사항  (0) 2012.02.26
partition 관리  (0) 2012.02.25

+ Recent posts