oracle 테이블 구역의 개념 및 조작

oracle 테이블 섹션 상세 정보


1. 테이블 공간 및 섹션 테이블의 개념


테이블 공간:
하나 이상의 데이터 파일의 집합으로 모든 데이터 대상은 지정된 테이블 공간에 저장되지만 주로 테이블이 저장되기 때문에 테이블 공간이라고 부른다.
파티션 테이블:
표의 데이터 양이 끊임없이 증가하면 조회 데이터의 속도가 느려지고 응용 프로그램의 성능이 떨어지기 때문에 표에 대한 구분을 고려해야 한다.시계를 구분한 후에 논리적으로 시계는 여전히 완전한 시계이다. 단지 시계의 데이터를 물리적으로 여러 개의 시계 공간 (물리 파일) 에 저장할 뿐이다. 이렇게 데이터를 조회할 때 매번 전체 시계를 스캔할 정도는 아니다.

2. 표분구의 구체적인 역할


Oracle의 테이블 파티션 기능은 관리 용이성, 성능 및 가용성을 향상시켜 다양한 애플리케이션에 큰 이점을 제공합니다.일반적으로 구역은 일부 조회와 유지 보수 작업의 성능을 크게 향상시킬 수 있다.그 밖에 구역은 흔히 볼 수 있는 관리 임무를 크게 간소화할 수 있다. 구역은 천메가바이트 데이터 시스템이나 초고가용성 시스템을 구축하는 관건적인 도구이다.
섹션 기능은 테이블, 인덱스 또는 인덱스 조직 테이블을 섹션으로 세분화할 수 있으며 이러한 데이터베이스 대상의 섹션을 섹션이라고 부른다.모든 구역은 자신의 이름이 있고 자신의 저장 특성을 선택할 수 있다.데이터베이스 관리자의 측면에서 볼 때 하나의 구역 뒤에 있는 대상은 여러 개의 구역을 가지고 있는데 이런 구역은 집단 관리도 할 수 있고 단독으로 관리도 할 수 있기 때문에 데이터베이스 관리자가 구역 뒤에 있는 대상을 관리할 때 상당히 유연성을 가진다.그러나 응용 프로그램의 측면에서 볼 때 섹션 뒤에 있는 테이블은 비섹션 테이블과 완전히 같고, SQL DML 명령을 사용하여 섹션 뒤에 있는 테이블에 접근할 때 수정할 필요가 없다.
파티션 테이블 사용:
1) 테이블의 크기가 2GB를 초과합니다.
2) 테이블에는 히스토리 데이터가 포함되어 있으며, 새로운 데이터는 모두 새로운 파티션에 추가됩니다.

3. 표분구의 장단점


장점:
1) 검색 성능 개선: 파티션 객체에 대한 검색은 관심 있는 파티션만 검색하여 검색 속도를 높일 수 있습니다.
2) 가용성 강화: 만약에 테이블의 어떤 구역에 고장이 발생하면 테이블의 다른 구역에 있는 데이터는 여전히 사용할 수 있다.
3) 유지 보수가 편리함: 표의 어떤 구역에 고장이 발생하면 데이터를 복구해야 하며 이 구역만 복구하면 된다.
4) 균형 I/O: 서로 다른 구역을 디스크에 비추어 I/O의 균형을 맞추고 시스템 전체의 성능을 개선할 수 있다.
단점:
구역표와 관련되어 이미 존재하는 시계는 구역표로 직접 전환할 방법이 없다.그러나 Oracle은 온라인으로 테이블을 재정의하는 기능을 제공합니다.

4. 표 구역의 몇 가지 유형과 조작 방법


1. 범위 구분
범위 구역은 모든 구역에 데이터를 기반으로 비추는데, 이 범위는 구역을 만들 때 지정한 구역 키로 결정됩니다.이런 구역 방식은 가장 자주 사용되며, 구역 키는 항상 날짜를 채택한다.예를 들어 판매 데이터를 월별로 구분할 수도 있다.
범위 구역을 사용할 때 다음과 같은 몇 가지 규칙을 고려하십시오.
1) 각 파티션에는 VALUES LESS THEN 자구가 있어야 합니다. 이 파티션에 포함되지 않는 상한 값을 지정합니다.섹션 키의 모든 값이 이 상한치보다 크거나 같은 기록은 다음 높은 섹션에 추가됩니다.
2) 모든 구역은 첫 번째 구역을 제외하고 은밀한 하한값이 있습니다. 이 값은 이 구역의 이전 구역의 상한값입니다.
3) 가장 높은 파티션에서 MAXVALUE가 정의됩니다.MAXVALUE는 불확실한 값을 나타냅니다.이 값은 다른 구역에 있는 모든 구역 키의 값보다 높고, 또한 모든 구역에서 지정한 VALUE LESS THEN의 값보다 높으며, 빈 값을 포함한다고 이해할 수 있습니다.
예1:
만약 CUSTOMER 테이블이 있고 테이블에 데이터 200000줄이 있다고 가정하면, 우리는 이 테이블을 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,
    PHONE        VARCHAR2(15) NOT NULL,
    EMAIL        VARCHAR2(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

)
예 3: 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. 해싱 파티션:
이 섹션은 열을 어느 섹션에 넣을지 확인하기 위해 열 값에 산열 알고리즘을 사용합니다.열의 값이 적당한 조건이 없을 때, 산열 구역을 사용하는 것을 권장합니다.
분산 파티션은 지정된 파티션 번호를 사용하여 데이터를 균일하게 분포하는 파티션 유형으로, 입출력 장치에서 분산 파티션을 수행하여 이러한 파티션 크기를 일관되게 만듭니다.
예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 파티션에 P3SUB1 하위 파티션을 추가합니다.

ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
2) 파티션 제거
다음 코드는 P3 테이블 파티션을 삭제합니다.

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

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)
결합 구역은 산열 구역의 데이터를 다른 구역에 접합하는 것이다. 산열 구역의 데이터가 비교적 크면 산열 구역을 추가한 다음에 접합할 수 있다. 주의해야 할 것은 접합 구역은 산열 구역에만 사용할 수 있다는 것이다.다음 코드를 사용하여 조닝 (zoning) 을 구성합니다.

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; 
이 글은oracle표 구역에 대한 상세한 설명입니다. 더 많은 oracle표 구역에 대한 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보시기 바랍니다. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기