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 에러가 발생하며 작업 취소됨 (인덱스 파티셔닝 과정 중에 발생할 경우에도, 전체 작업이 취소됨)