I. 테스트 환경 구성
1. 스키마 생성 및 권한 부여
테스트 스키마 생성 및 권한 부여
create tablesapce PT_TEST datafile '+DATA' size 3G; create user TEST identified by TEST default tablespace PT_TEST; grant CONNECT, RESOURCE, UNLIMITED TABLESPACE to TEST;
2. 테스트용 원본 테이블 생성
A) 세션 병렬 처리 설정
세션 병렬 처리 설정
alter session enable parallel ddl; alter session enable parallel dml; alter session force parallel dml parallel 8; alter session force parallel ddl parallel 8; alter session force parallel query parallel 8; -- cpu_count 파라미터보다 1 적은 숫자로 입력 (최대값)
B) 원본 테이블 생성
테스트용 원본 테이블 생성
create table TEST.OPTEST ( BASE_DT varchar2(8) not null, TESTCOL1 varchar2(20) not null, TESTCOL2 number not null, TESTCOL3 char(20) not null, TESTCOL4 varchar2(20), TESTCOL5 char(20), TESTCOL6 nchar(20), TESTCOL7 varchar2(20), TESTCOL8 varchar2(20), TESTCOL9 varchar2(20), constraint PK_OPTEST primary key (BASE_DT,TESTCOL1,TESTCOL2) ) tablespace USERS; -- 초기 데이터는 USERS에 적재
C) 랜덤 데이터 입력
랜덤 데이터 입력
insert into TEST.OPTEST select to_char(sysdate-dbms_random.value(0,365*7),'RRRRMMDD') as BASE_DT, dbms_random.string('A',20) as TEST_COL1, dbms_random.value(0,1000) as TEST_COL2, dbms_random.string('A',20) as TEST_COL3, dbms_random.string('A',20) as TEST_COL4, dbms_random.string('A',20) as TEST_COL5, NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 2 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 4 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 6 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 8 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 10 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 12 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 14 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 16 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 18 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) as TEST_COL6, --20 dbms_random.string('A',20) as TEST_COL7, dbms_random.string('A',2) || -- 2 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 8 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) || -- 14 NCHR(dbms_random.value(44032, 55203)) || NCHR(dbms_random.value(44032, 55203)) as TEST_COL8, --20 dbms_random.string('A',20) as TEST_COL9 from DUAL connect by level <= 5000000; -- 메모리 부족 발생시 1000000건으로 5번 수행
II. 테이블 파티셔닝
1. 테이블 파티셔닝
기술 메모
- 12c부터 지원되며, 다른 작업에 비해 후속 작업이 적은 방식
: 기존 테이블의 구조를 바꾸는 것이므로, rename하거나 제약조건이나 종속된 객체를 복사하는 작업이 없음 - 파티션 키 컬럼이 선투 컬럼인 인덱스는 자동으로 pre-fixed local 파티션 인덱스로 변환됨
: 파티션 키 컬럼 포함되지 않거나, 선두 컬럼이 아닌 인덱스는 drop 후 재생성하는 방식으로 local 파티션 인덱스로 변환해야 함 - 파티션 세그먼트를 할당하고 기존의 데이터를 이동하는 방식이므로 테이블 크기 만큼의 공간이 필요함
: 데이터 펌프를 제외한 모든 방식에 테이블스페이스 내의 추가 공간이 필요함
: 용량이 부족할 경우 ORA-01652 에러가 발생하며 작업 취소됨 (인덱스 파티셔닝 과정 중에 발생할 경우에도, 전체 작업이 취소됨)