- Direct load insert
: 서브쿼리를 사용한 insert 문- SQL*loader
: csv 나 text 파일을 데이터베이스에 이행- export / import
: 테이블 또는 테이블스페이스를 통째로 이행
Direct load insert: high water mark 위에 데이터를 입력하는 것
포맷된 디스크와 포맷되지 않은 디스크의 경계선
direct load insert를 하게 되면 HWM 위로 INSERT를 하게 되어서 입력 속도가 빨라짐
create table emp2
as
select *
from emp;
delete from emp2;
commit;
-- 아래의 insert 문은 HWM 아래에 입력하는 INSERT 문입니다.
insert into emp2
select *
from emp;
SELECT * from emp2;
delete from emp2;
commit;
--- HWM 위로 데이터를 입력합니다.
insert /*+ append */ into emp2
select *
from emp;
select * from emp2;
-- commit을 해줘야 HWM이 위로 올라가서 select문을 읽을 수 있게됨
commit;
을 하면 select 문이 조회가 됨
create table dept_backup
as
select * from dept;
delete from dept_backup;
commit;
insert /*+ append */ into dept_backup
select * from dept;
-- 조회 안됨
select * from dept_backup;
commit;
-- commit 후 조회 됨
select * from dept_backup;
truncate table dept_backup;
alter session enable parallel dml;
insert /*+ parallel(dept_backup,4) */ into dept_backup
select *
from dept;
select * from dept_backup;
commit;
select * from dept_backup;
- HWM 아래로 입력했을 때 속도
- HWM 위로 입력했을 때 속도
- HWM 위로 병렬도를 4로 입력했을 때 속도
-- mcustsum 테이블 만드는 쿼리문
drop table mcustsum purge;
create table mcustsum as
select rownum custno,
'2025' || lpad(ceil(rownum / 100000), 2, '0') salemm,
decode(mod(rownum, 12), 1, 'A', 'B') salegb,
round(dbms_random.value(1000, 100000), -2) saleamt
from dual
connect by level <= 1200000;
set timing on
create table mcustsum2
as
select *
from mcustsum;
delete from mcustsum2;
commit;
insert into mcustsum2
select *
from mcustsum;
select * from mcustsum2;
delete from mcustsum2;
commit;
insert /*+ append */ into mcustsum2
select *
from mcustsum;
commit;
select * from mcustsum2;
truncate table mcustsum2;
alter session enable parallel dml;
insert /*+ parallel(mcustsum2, 4) */ into mcustsum2
select *
from mcustsum;
commit;
select * from mcustsum2;
- pump를 이용한 데이터 이행 (가장 많이 사용) → 비교적 빨리 수행됨
- 서브쿼리를 사용한 insert (direct load insert : HWM 위로 데이터 입력) → 6개월 ~ 1년 프로젝트
AS-IS —> TO-BE 이행 시 개인정보 데이터를 암호화, 컬럼 추가·삭제 등의 변화, 컬럼 길이의 변화
- CSV 파일을 테이블에 입력(direct path load)
--> 은행과 은행간의 계좌 이체 내역을 공유할때 엑셀로 주고 받는 경우가 많음
- append 힌트 --> 하나의 프로세서가 insert를 수행
- parallel 힌트 --> 여러 개의 프로세서가 insert를 수행
insert /*+ parallel(sales_new, 병렬도 ) */ into sales_new
select /*+ parallel(sales,병렬도) */
from sales;