본문 바로가기

빅데이터과정/WORKSHOP 1

#25_140717_WSHOP_DIRECT PATH LOAD

728x90

# DIRECT PATH LOAD




  • DIRECT PATH INSERT




HWM 위로 데이터를 입력하는 방법
1.     serial 하게 데이터를 입력 하나의 프로세서 데이터를 입력
힌트 : /*+append*/
2.     parallel 하게 데이터를 입력 여러 개의 프로세서가 데이터를 입력
힌트 : /*+parallel*/




append insert


문제153. emp테이블과 똑같은 emp800 이라는 테이블을 생성하고(emp테이블의 구조만 가져와서 생성). emp테이블의 data를 emp800에 입력하는데 HWM 위로 입력하시오

create table emp800 as
select * from emp where 1=2;

insert /*+ append */ into emp800
select * from emp;
commit;


HWM 을 DATA 위로 올린다
commit 없이 조회하면 오류발생
/*+ 힌트 */ à 수행방법을 알려주는 명령어


  

parallel insert

SQL> alter session enable parallel dml;
병렬로 입력하기 위해서는 반드시 입력해줘야함
위 명령어는 이 세션에서만 유효만
SQL> insert /*+ parallel(emp800,4) */ into emp800
    select * from emp;
4개의 프로세서가 emp800에 parallel 하게 입력
오라클의 CPU 개수만큼 동작함(show parameter cpu)
SQL> select * from emp800;
select * from emp800
ERROR at line 1:
ORA-12838: cannot read/modify an object after modifying it in parallel
commit; 을해줘야지 HWM 위로 올라감









SQL*Loader 로 data 입력시 conventional load와 Direct payt load의 차이는?
sqlldr scott/tiger control=control07.ctl 뒤에 direct = y 옵션을 사용한다
HWM 위로 data를 입력한다
data insert 될 때 check 제약 조건이 비활성화 된다
data insert 될 때 트리거 작동 비활성화
맨 마지막에 commi을 하기 때문에 중간에 다른 세션에서 데이터를 볼 수 없으나conventional load는 중간중간에 commit하기 때문에 다른 세션에서 볼 수 있다.
index를 data가 완전히 insert 된후에 구성한다
redo를 발생하지 않는다(장애가 났을 때 복구 못한다 – 필요하면 다시 로드)









문제154. scott 유저로 접속해서 depart_test 테이블을 생성하고 control07.txt 파일의 dataSQL*Loader를 이용해서 loading 하시오


ctl 파일 insert(conventional load)


# SCOTT 에서

SQL> create table depart_test
    (did number(10),
    dname varchar2(30),
    last_updated date);

[dbdb:~]$ sqlldr scott/tiger
control = control07.ctl

SQL> select count(*) from depart_test;

  COUNT(*)
----------
    451584




ctl 파일 insert(direct path load)

[dbdb:~]$ sqlldr scott/tiger control=control07.ctl direct=y
direct 쓰자 속도가 훨씬 빠른 것을 확인 할 수 있다
SQL*Loader: Release 11.2.0.1.0 - Production on Thu Jul 17 11:29:58 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Load completed - logical record count 451586.




controlfile의 내용(data file의 문법이 들어있는 파일)

load data
infile *
모든 데이터를 파일로 로드하겠다
into table depart_test
depart_test 테이블에 데이터를 로드하겠다
fields terminated by ','
단어와 단어사이의 구분은 콤마(,)로 하겠다
optionally enclosed by '"'
단어중에 양쪽에 더블쿼테이션 마크를 사용한 단어가 있을 수 있다.(예 “:SMITH”)
(did, dname, last_updated date 'yyyy-mm-dd')
begindata

Data file의 내용

begindata
10,Electric,2000-01-05
11,Marketing,2000-07-05
12,transport,1999-03-02
13,manage,2001-03-05
10,Electric,2000-01-05
11,Marketing,2000-07-05
12,transport,1999-03-02
13,manage,2001-03-05
10,Electric,2000-01-05
11,Marketing,2000-07-05
12,transport,1999-03-02
13,manage,2001-03-05
…………………………………………………..


control07.log
결과 레포트를 확인할 수 있다
Table DEPART_TEST:
  451584 Rows successfully loaded.
  2 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.

  Date cache:
   Max Size:      1000
   Entries :         4
   Hits    :    451580
   Misses  :         0

Bind array size not used in direct path.
Column array  rows :    5000
Stream buffer bytes:  256000
Read   buffer bytes: 1048576

Total logical records skipped:          0
Total logical records read:        451586
Total logical records rejected:         2
reject 된 파일이 2개가 발생했고 이는 bad 파일에 들어간다
Total logical records discarded:        0
Total stream buffers loaded by SQL*Loader main thread:      166
Total stream buffers loaded by SQL*Loader load thread:        0

Run began on Thu Jul 17 11:29:58 2014
Run ended on Thu Jul 17 11:30:02 2014

Elapsed time was:     00:00:04.30
CPU time was:         00:00:00.39


'빅데이터과정 > WORKSHOP 1 ' 카테고리의 다른 글

#25_140717_WSHOP_EXTERNAL TABLES  (0) 2014.07.17
#25_140717_WSHOP_DATA PUMP  (0) 2014.07.17
#24_140716_WSHOP_DIRECT LOAD INSERT  (0) 2014.07.16
#24_140716_WSHOP_복구 어드바이져  (0) 2014.07.16
#24_140716_WSHOP_백업(RMAN)  (0) 2014.07.16