728x90
# DIRECT PATH LOAD
- DIRECT PATH INSERT
l HWM 위로 데이터를 입력하는 방법
1. serial 하게 데이터를 입력 : 하나의 프로세서 데이터를 입력
힌트 : /*+append*/
2. parallel 하게 데이터를 입력 : 여러 개의 프로세서가 데이터를 입력
힌트 : /*+parallel*/
n 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 없이 조회하면 오류발생 l /*+ 힌트 */ à 수행방법을 알려주는 명령어 |
n 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 위로 올라감 |
l 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 파일의 data를SQL*Loader를 이용해서 loading 하시오
n 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 |
n 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. |
n 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 |
n 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 ………………………………………………….. |
n 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 |