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
)
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
)
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
);이 구역의 특징은 어떤 열의 값이 몇 개밖에 없다는 것이다. 이러한 특징을 바탕으로 우리는 목록 구역을 사용할 수 있다.
예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
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
);
)이 섹션은 열을 어느 섹션에 넣을지 확인하기 위해 열 값에 산열 알고리즘을 사용합니다.열의 값이 적당한 조건이 없을 때, 산열 구역을 사용하는 것을 권장합니다.
분산 파티션은 지정된 파티션 번호를 사용하여 데이터를 균일하게 분포하는 파티션 유형으로, 입출력 장치에서 분산 파티션을 수행하여 이러한 파티션 크기를 일관되게 만듭니다.
예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);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)
 );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');다음 코드는 P3 테이블 파티션을 삭제합니다.
ALTER TABLE SALES DROP PARTITION P3;
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;3) 파티션 차단
어떤 구역을 차단하는 것은 어떤 구역의 데이터를 삭제하고 구역을 삭제하지 않으며 다른 구역의 데이터도 삭제하지 않는 것을 가리킨다.테이블에 하나의 구역만 있을 때도 이 구역을 차단할 수 있습니다.다음 코드를 사용하여 파티션을 차단합니다.
ALTER TABLE SALES TRUNCATE PARTITION P2;
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;병합 구역은 인접한 구역을 하나의 구역으로 합친 것이다. 그 결과 구역은 비교적 높은 구역의 경계를 채택할 것이다. 주의해야 할 것은 구역을 경계가 낮은 구역으로 합칠 수 없다는 것이다.다음 코드는 P1 P2 파티션을 통합합니다.
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;분할 구역은 한 구역을 두 개의 새 구역으로 나누는데, 분할 후 원래 구역은 더 이상 존재하지 않는다.HASH 유형의 파티션은 분할할 수 없습니다.
ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22); 결합 구역은 산열 구역의 데이터를 다른 구역에 접합하는 것이다. 산열 구역의 데이터가 비교적 크면 산열 구역을 추가한 다음에 접합할 수 있다. 주의해야 할 것은 접합 구역은 산열 구역에만 사용할 수 있다는 것이다.다음 코드를 사용하여 조닝 (zoning) 을 구성합니다.
ALTER TABLE SALES COALESCA PARTITION;다음 코드는 P21을 P2로 변경합니다.
ALTER TABLE SALES RENAME PARTITION P21 TO P2;문서 구성 단위 간 조회
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 
select * from user_tables a where a.partitioned='YES' 
truncate table table_name; 
alter table table_name truncate partition p5; 이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PLSQL을 사용하여 배열에서 가장 큰 요소 인쇄(Oracle Application Express 11g에서)배열에서 가장 큰 요소를 인쇄하는 것은 기본 코드입니다. 여기서는 Oracle Application Express 11g에서 PLSQL을 사용하여 어레이에서 가장 큰 요소를 인쇄하는 방법을 보여드리겠습니다. Orac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.