Oacle 표 공간 표 파 티 션 상세 설명 및 Oacle 표 파 티 션 조회 사용 방법

이 글 은 다음 과 같은 몇 가지 측면 에서 분 구 표 에 관 한 개념 과 조작 을 정리한다.1.표 공간 과 분 구 표 의 개념 2.표 분 구 의 구체 적 인 역할 3.표 분 구 의 장단 점 4.표 분 구 의 몇 가지 유형 과 조작 방법 5.표 분 구 에 대한 유지 보수 적 조작.(1.)표 공간 과 분 구 표 의 개념 표 공간:하나 이상 의 데이터 파일 의 집합 이다.모든 데이터 대상 은 지정 한 표 공간 에 저장 되 어 있 으 나 주로 표 공간 이 라 고 부 릅 니 다.파 티 션 시트:표 의 데이터 양 이 계속 증가 하면 데 이 터 를 조회 하 는 속도 가 느 려 지고 응용 프로그램의 성능 이 떨 어 집 니 다.이 럴 때 표 에 대해 파 티 션 을 하 는 것 을 고려 해 야 합 니 다.표 가 분 구 된 후에 도 논리 적 으로 표 는 완전한 표 입 니 다.표 의 데 이 터 를 물리 적 으로 여러 표 공간(물리 파일)에 저장 할 뿐 데 이 터 를 조회 할 때 매번 표 전 체 를 스 캔 하지 않 습 니 다.(2).표 분 구 의 구체 적 인 역할 인 Oracle 의 표 분 구 기능 은 관리 가능성,성능 과 가용성 을 개선 함으로써 각종 응용 프로그램 에 큰 이익 을 가 져 왔 다.일반적으로 파 티 션 은 일부 조회 와 유지 작업 의 성능 을 크게 향상 시 킬 수 있다.그 밖 에 분 구 는 흔히 볼 수 있 는 관리 임 무 를 크게 간소화 할 수 있 고 분 구 는 천조 바이트 데이터 시스템 이나 초고 가용성 시스템 을 구축 하 는 관건 적 인 도구 이다.파 티 션 기능 은 표,색인 또는 색인 조직 표를 세그먼트 로 나 눌 수 있 는데 이런 데이터 베이스 대상 의 세그먼트 를 파 티 션 이 라 고 합 니 다.각 파 티 션 은 자신의 이름 이 있 고 저장 기능 도 선택 할 수 있 습 니 다.데이터베이스 관리자 의 측면 에서 볼 때 한 구역 후의 대상 은 여러 개의 구역 을 가진다.이런 구역 은 단체 관 리 를 할 수 있 을 뿐만 아니 라 단독으로 관리 할 수 있 기 때문에 데이터베이스 관리 자 는 구역 후의 대상 을 관리 할 때 상당 한 유연성 을 가진다.단,응용 프로그램의 측면 에서 볼 때 파 티 션 후의 표 는 비 파 티 션 표 와 완전히 같 으 며,SQL DML 명령 으로 파 티 션 후의 표 에 접근 할 때 아무런 수정 이 필요 하지 않 습 니 다.파 티 션 시트 를 언제 사용 합 니까?1.표 의 크기 가 2GB 를 초과 합 니 다.2.표 에 역사 데 이 터 를 포함 하고 새로운 데 이 터 는 모두 새로운 파 티 션 에 추 가 됩 니 다.(3).표 분 구 의 장단 점 표 분 구 는 다음 과 같은 장점 이 있다.1.조회 성능 개선:분 구 대상 에 대한 조 회 는 자신 이 관심 을 가 지 는 분 구 만 검색 하고 검색 속 도 를 높 일 수 있다.2.가용성 강화:표 의 특정한 구역 이 고장 나 면 표 는 다른 구역 의 데 이 터 를 사용 할 수 있 습 니 다.3.유지 보수 가 편리 합 니 다.만약 에 표 의 특정한 구역 에 고장 이 나 면 데 이 터 를 복원 하고 이 구역 만 복원 하면 됩 니 다.4.균형 I/O:서로 다른 파 티 션 을 디스크 에 투사 하여 I/O 를 균형 있 게 하여 전체 시스템 성능 을 개선 할 수 있 습 니 다.단점:분 구 표 관련:이미 존재 하 는 표 는 분 구 표 로 직접 전환 할 수 있 는 방법 이 없다.그러나 오 라 클 은 온라인 재 정의 표 기능 을 제공 했다.(4).표 분 구 의 몇 가지 유형 및 조작 방법
 1.범위 구분:
범위 파 티 션 은 데 이 터 를 범위 에 따라 모든 파 티 션 에 표시 합 니 다.이 범 위 는 파 티 션 을 만 들 때 지정 한 파 티 션 키 로 결 정 됩 니 다.이런 파 티 션 방식 은 가장 자주 사용 되 고 파 티 션 키 는 항상 날 짜 를 사용한다.예 를 들 어 판매 데 이 터 를 월 별로 구분 할 수 있 습 니 다.범위 구역 을 사용 할 때 다음 과 같은 몇 가지 규칙 을 고려 하 십시오.1.각 구역 마다 VALUES LESS THEN 자구 가 있어 야 합 니 다.이 구역 에 포함 되 지 않 는 상한 값 을 지정 합 니 다.파 티 션 키 의 모든 값 이 이 상한 치 보다 크 거나 같은 기록 은 다음 높 은 파 티 션 에 추 가 됩 니 다.2.모든 파 티 션 은 첫 번 째 를 제외 하고 암시 적 인 하한 값 이 있 습 니 다.이 값 은 바로 이 파 티 션 의 이전 파 티 션 의 상한 값 입 니 다.3.가장 높 은 구역 에서 MAXVALUE 가 정의 된다.MAXVALUE 는 불확실 한 값 을 대표 합 니 다.이 값 은 다른 파 티 션 의 모든 파 티 션 키 보다 높 고 모든 파 티 션 에서 지정 한 VALUE LESS THEN 보다 높 은 값 으로 이해 할 수 있 으 며 빈 값 도 포함 합 니 다.
예 1:만약 에 CUSTOMER 표 가 있다 고 가정 하면 표 에 데이터 20000 줄 이 있 습 니 다.우 리 는 이 표를 CUSTOMER 을 통 해ID 는 구역 을 나 누고 각 구역 은 100000 줄 을 저장 합 니 다.우 리 는 각 구역 을 하나의 표 공간 에 저장 합 니 다.그러면 데이터 파일 은 여러 개의 물리 디스크 를 뛰 어 넘 을 수 있 습 니 다.다음은 표 와 파 티 션 을 만 드 는 코드 입 니 다.다음 과 같 습 니 다.

CREATE TABLE CUSTOMER
(
    CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,
    FIRST_NAME  VARCHAR2(30) NOT NULL,
    LAST_NAME   VARCHAR2(30) NOT NULL,
    PHONEVARCHAR2(15) NOT NULL,
    EMAILVARCHAR2(80),
    STATUS       CHAR(1)
)
PARTITION BY RANGE (CUSTOMER_ID)
(
    PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01,
    PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02
)
예 2:시간 에 따라 구분

CREATE TABLE ORDER_ACTIVITIES
(
    ORDER_ID      NUMBER(7) NOT NULL,
    ORDER_DATE    DATE,
    TOTAL_AMOUNT NUMBER,
    CUSTOTMER_ID NUMBER(7),
    PAID   CHAR(1)
)
PARTITION BY RANGE (ORDER_DATE)
(
  PARTITION ORD_ACT_PART01 VALUES LESS THAN (TO_DATE('01- MAY -2003','DD-MON-YYYY')) TABLESPACEORD_TS01,
  PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUN-2003','DD-MON-YYYY')) TABLESPACE ORD_TS02,
  PARTITION ORD_ACT_PART02 VALUES LESS THAN (TO_DATE('01-JUL-2003','DD-MON-YYYY')) TABLESPACE ORD_TS03
)
MAXVALUE

CREATE TABLE RangeTable
(
  idd   INT PRIMARY KEY ,
  iNAME VARCHAR(10),
  grade INT 
)
PARTITION  BY  RANGE (grade)
(
      PARTITION  part1 VALUES  LESS  THEN (1000) TABLESPACE  Part1_tb,
      PARTITION  part2 VALUES  LESS  THEN (MAXVALUE) TABLESPACE  Part2_tb
);
 
2.목록 파 티 션:
이 구역 의 특징 은 특정한 열의 값 이 몇 개 밖 에 없다 는 것 이다.이러한 특징 을 바탕 으로 우 리 는 목록 구역 을 사용 할 수 있다.
예 1

CREATE TABLE PROBLEM_TICKETS
(
    PROBLEM_ID   NUMBER(7) NOT NULL PRIMARY KEY,
    DESCRIPTION  VARCHAR2(2000),
    CUSTOMER_ID  NUMBER(7) NOT NULL,
    DATE_ENTERED DATE NOT NULL,
    STATUS       VARCHAR2(20)
)
PARTITION BY LIST (STATUS)
(
      PARTITION PROB_ACTIVE   VALUES ('ACTIVE') TABLESPACE PROB_TS01,
      PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02

)

 
예 2

CREATE  TABLE  ListTable
(
    id    INT  PRIMARY  KEY ,
    name  VARCHAR (20),
    area  VARCHAR (10)
)
PARTITION  BY  LIST (area)
(
    PARTITION  part1 VALUES ('guangdong','beijing') TABLESPACE  Part1_tb,
    PARTITION  part2 VALUES ('shanghai','nanjing')  TABLESPACE  Part2_tb
);
)
3.해시 구역:
이러한 파 티 션 은 열 값 에 해시 알고리즘 을 사용 하여 줄 을 어느 파 티 션 에 넣 는 지 확인 합 니 다.열의 값 이 적당 한 조건 이 없 을 때,산열 구역 을 사용 하 는 것 을 권장 합 니 다.해시 파 티 션 은 지정 한 파 티 션 번 호 를 통 해 데 이 터 를 골 고루 분포 하 는 파 티 션 형식 입 니 다.I/O 장치 에서 해시 파 티 션 을 통 해 이 파 티 션 의 크기 를 일치 시 키 기 때 문 입 니 다.
예 1:

CREATE TABLE HASH_TABLE
(
  COL NUMBER(8),
  INF VARCHAR2(100)
)
PARTITION BY HASH (COL)
(
  PARTITION PART01 TABLESPACE HASH_TS01,
  PARTITION PART02 TABLESPACE HASH_TS02,
  PARTITION PART03 TABLESPACE HASH_TS03
)
약자:

CREATE TABLE emp
(
    empno NUMBER (4),
    ename VARCHAR2 (30),
    sal   NUMBER
)
PARTITION BY  HASH (empno) PARTITIONS 8
STORE IN (emp1,emp2,emp3,emp4,emp5,emp6,emp7,emp8);
 
hash 파 티 션 의 가장 중요 한 체 제 는 hash 알고리즘 에 따라 구체 적 인 기록 을 어느 파 티 션 에 삽입 해 야 하 는 지 계산 하 는 것 입 니 다.hash 알고리즘 에서 가장 중요 한 것 은 hash 함수 입 니 다.Oracle 에서 hash 파 티 션 을 사용 하려 면 파 티 션 의 수량 만 지정 하면 됩 니 다.구역 의 수량 은 2 의 n 제곱 을 사용 하 는 것 을 권장 합 니 다.그러면 각 구역 간 의 데이터 분 포 를 더욱 고 르 게 할 수 있 습 니 다.4.조합 범위 산열 구역
이 파 티 션 은 범위 파 티 션 과 목록 파 티 션 을 바탕 으로 표 는 먼저 특정한 열 에 따라 범위 파 티 션 을 한 다음 에 특정한 열 에 따라 목록 파 티 션 을 하고 파 티 션 중의 파 티 션 을 하위 파 티 션 이 라 고 합 니 다.

CREATE TABLE SALES
(
PRODUCT_ID VARCHAR2(5),
SALES_DATE DATE,
SALES_COST NUMBER(10),
STATUS VARCHAR2(20)
)
PARTITION BY RANGE(SALES_DATE) SUBPARTITION BY LIST (STATUS)
(
   PARTITION P1 VALUES LESS THAN(TO_DATE('2003-01-01','YYYY-MM-DD'))TABLESPACE rptfact2009
  (
      SUBPARTITION P1SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
      SUBPARTITION P1SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
  ),
   PARTITION P2 VALUES LESS THAN (TO_DATE('2003-03-01','YYYY-MM-DD')) TABLESPACE rptfact2009
  (
      SUBPARTITION P2SUB1 VALUES ('ACTIVE') TABLESPACE rptfact2009,
      SUBPARTITION P2SUB2 VALUES ('INACTIVE') TABLESPACE rptfact2009
  )
)
5.복합 범위 산열 구역:
이런 구역 은 범위 구역 과 해시 구역 을 바탕 으로 표 는 먼저 특정한 열 에 따라 범위 구역 을 나 눈 다음 에 특정한 열 에 따라 해시 구역 을 나눈다.

create table dinya_test
 (
 transaction_id number primary key,
 item_id number(8) not null,
 item_description varchar2(300),
 transaction_date date
 )
 partition by range(transaction_date)subpartition by hash(transaction_id)  subpartitions 3 store in (dinya_space01,dinya_space02,dinya_space03)
 (
     partition part_01 values less than(to_date(‘2006-01-01','yyyy-mm-dd')),
     partition part_02 values less than(to_date(‘2010-01-01','yyyy-mm-dd')),
     partition part_03 values less than(maxvalue)
 );
 
(5).표 파 티 션 에 대한 유지 보수 작업:
1.파 티 션 추가
다음 코드 는 SALES 표 에 P3 파 티 션 을 추가 하 였 습 니 다.

ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
메모:위 에 추 가 된 파 티 션 경 계 는 마지막 파 티 션 경계 보다 높 아야 합 니 다.다음 코드 는 SALES 표 의 P3 파 티 션 에 P3SUB 1 서브 파 티 션

ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
을 추가 하 였 습 니 다.
2.파 티 션 아래 코드 를 삭제 하고 P3 표 파 티 션 을 삭 제 했 습 니 다.

ALTER TABLE SALES DROP PARTITION P3;
 
다음 코드 에서 P4SUB 1 하위 파 티 션 을 삭 제 했 습 니 다.

ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
 
메모:삭 제 된 파 티 션 이 표 의 유일한 파 티 션 이 라면 이 파 티 션 은 삭제 할 수 없습니다.이 파 티 션 을 삭제 하려 면 표를 삭제 해 야 합 니 다.3.분 구 를 절단 합 니 다.
어떤 파 티 션 을 차단 하 는 것 은 특정한 파 티 션 의 데 이 터 를 삭제 하고 파 티 션 을 삭제 하지 않 으 며 다른 파 티 션 의 데 이 터 를 삭제 하지 않 는 다 는 것 을 말한다.표 에 한 개의 파 티 션 만 있 을 때 도 이 파 티 션 을 차단 할 수 있 습 니 다.다음 코드 를 통 해 파 티 션 을 차단 합 니 다:

ALTER TABLE SALES TRUNCATE PARTITION P2;
 
다음 코드 를 통 해 하위 파 티 션 을 차단 합 니 다:

ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
 
4.합병 구역
합병 구역 은 인접 한 구역 을 하나의 구역 으로 합 친 것 으로 그 결과 구역 은 비교적 높 은 구역 의 경 계 를 사용 할 것 이다.주의해 야 할 것 은 구역 을 경계 가 비교적 낮은 구역 으로 합 칠 수 없다 는 것 이다.다음 코드 는 P1 P2 구역 의 합병 을 실현 했다.

ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
 
5.분할 구역
파 티 션 을 나 누 어 하나의 파 티 션 을 두 개의 새 파 티 션 으로 나 누고 나 누 면 원래 파 티 션 이 존재 하지 않 습 니 다.HASH 유형의 파 티 션 을 분리 할 수 없 도록 주의 하 세 요.
ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22); 
6.연결 구역(coalesca)의 결합 구역 은 해시 구역 의 데 이 터 를 다른 구역 에 연결 하 는 것 입 니 다.해시 구역 의 데이터 가 비교적 클 때 해시 구역 을 추가 한 다음 에 연결 할 수 있 습 니 다.주의해 야 할 것 은 연결 구역 은 해시 구역 에 만 사용 할 수 있 습 니 다.다음 코드 를 통 해 연결 구역:

ALTER TABLE SALES COALESCA PARTITION;
7.표 파 티 션 이름 바 꾸 기
다음 코드 는 P21 을 P2

ALTER TABLE SALES RENAME PARTITION P21 TO P2;
 
로 변경 합 니 다.
8.관련 조회
크로스 파 티 션 조회

select sum( *) from
(select count(*) cn from t_table_SS PARTITION (P200709_1)
union all
select count(*) cn from t_table_SS PARTITION (P200709_2)
);
 
조회 표 에 몇 개의 구역 이 있 는 지

SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
 
색인 정보 조회

select object_name,object_type,tablespace_name,sum(value)
from v$segment_statistics
where statistic_name IN ('physical reads','physical write','logical reads')and object_type='INDEX'
group by object_name,object_type,tablespace_name
order by 4 desc

-- :
select * from DBA_PART_TABLES

-- :
select * from ALL_PART_TABLES

-- :
select * from USER_PART_TABLES

-- :
select * from DBA_TAB_PARTITIONS

-- :
select * from ALL_TAB_PARTITIONS

-- :
select * from USER_TAB_PARTITIONS

-- :
select * from DBA_TAB_SUBPARTITIONS

-- :
select * from ALL_TAB_SUBPARTITIONS

-- :
select * from USER_TAB_SUBPARTITIONS

-- :
select * from DBA_PART_KEY_COLUMNS

-- :
select * from ALL_PART_KEY_COLUMNS

-- :
select * from USER_PART_KEY_COLUMNS

-- :
select * from DBA_SUBPART_KEY_COLUMNS

-- :
select * from ALL_SUBPART_KEY_COLUMNS

-- :
select * from USER_SUBPART_KEY_COLUMNS

-- oracle
select * from user_tables a where a.partitioned='YES'

--
truncate table table_name;

--
alter table table_name truncate partition p5;

좋은 웹페이지 즐겨찾기