본문 바로가기

프로그램개발

ORA-14400 오라클 오류




시스템 운영 중 갑자기


ORA-14400 오라클 오류 발생.



'삽입된 분할 영역 키와 매핑되는 분할 영역이 없음'


처음보는 오류인데 왜 갑자기 뜨지..??


 



아..확인 해보니 몇몇 테이블은 파티션을 년도, 월별로 나누어 저장되도록 되어 있었다.


양도 많고 해서 쌓여가는 데이터를 효율적으로 관리하기 위해,,

 

해결 방법은 해당 파티션 테이블 확인 후 생성해주면 된다.


파티션 테이블 확인 방법은 아래와 같음


select * from dba_tab_partitions where table_name = '테이블 명';

 


 

■ 파티션 테이블이란

용량이 크고 지속적으로 증가하는 테이블들에 대해, 더 작은 단위로 나누어 저장하여 성능향상을 시켜줄 수 있는 테이블


■ 파티션 테이블의 장점

파티션 테이블을 구성해둔다면, 데이터를 가져올 시 이미 줄어있는 범위에서 액세스를 하기 때문에 액세스 횟수가 적고 빠르다


■ 파티션 테이블의 종류

Range, List, Hash


1. Range partition table

범위의 단위로 나누어진 테이블로 영역별로 데이터가 자동적으로 저장된다

ex) 2017.01.01 부터 2017.05.30 까지의 데이터는 A 영역에 저장하고,

2017.06.01 부터 2017.12.31 까지의 데이터는 B 영역에 저장한다고 할 경우


Range partition table 생성

테이블의 어느 컬럼을 기준으로, 어떤 범위의 값으로 테이블을 나눌지를 지정하여 생성


CREATE TABLE mypart

        (my_no NUMBER,

         my_year INT NOT NULL,

         my_month INT NOT NULL,

         my_day INT NOT NULL,

         my_value  VARCHAR2(30)

         )

       PARTITION BY RANGE (my_year, my_month, my_day)

       (PARTITION my_q1 VALUES LESS THAN (2017, 01, 01) TABLESPACE TEST_TBS1,

        PARTITION my_q2 VALUES LESS THAN (2017, 06, 01) TABLESPACE TEST_TBS2

       );


Range partition table 삭제 할 경우

ex) alter table 테이블명 drop partition 파티션명;


Range partition table은 병합도 가능하다

ex) alter table 테이블명 merge partitions 파티션명1, 파티션명2 into partition 파티션명1

update indexes; -- 파티션1과 2를 파티션1로 병합

 

2. List partition table

특정 컬럼 값을 기준으로 파티셔닝을 수행하게 된다


List partition 생성

CREATE TABLE emp_list_pt

       (EMPNO NUMBER NOT NULL,

        ENAME VARCHAR2(10),

        JOB VARCHAR2(9),

        MGR NUMBER(4),

        HIREDATE DATE,

        SAL NUMBER(7, 2),

        COMM NUMBER(7, 2),

        DEPTNO NUMBER(2))

     PARTITION BY LIST (JOB)

     (PARTITION emp_list_pt1 VALUES ('MANAGER') TABLESPACE TEST_TBS1,

      PARTITION emp_list_pt2 VALUES ('SALESMAN') TABLESPACE TEST_TBS2);


3. Hash partition table

데이터를 해쉬 알고리즘에 의해 무작위로 분산시켜 저장하는 방법