데이터베이스 분류
SQL*LOADER 1편
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 12,610 조회
- 0 추천
- 목록
본문
SQL*LOADER 1편
일반 text file(오라클에서는 flat file이라고 부른다.)의 데이터를 오라클DB에 넣기 위한 방법은 2가지가 있다. 고정길이레코드를 가진 데이터와 가변길이레코드를 가진 데이터 고정길이 레코드 데이터 백지영 80 80 80 한심해 20 20 30 조신한 50 80 90 여자면 30 100 98 이런일 80 90 65 없었지 65 95 85 가변길이 레코드 데이터 myunggyu, 강명규, 750509, 남자, 프로그래머 piruks, 강병욱, 730301, 남자, 수학자 gildong, 홍길동, 700101, 남자, 도둑님 flat파일로부터 데이터를 삽입하기 위한 테이블을 생성하자. SQL> connect kang/xxxxxx 연결되었습니다. SQL> create table fix_table 2 ( 3 name varchar2(6), 4 국어 number, 5 영어 number, 6 수학 number 7 ); 테이블이 생성되었습니다. SQL> create table var_table 2 ( 3 id varchar2(15), 4 name varchar2(10), 5 birth char(7), 6 sex char(5), 7 vocation varchar2(15) 8 ); 테이블이 생성되었습니다. SQL> 테이블이 생성되었습니다. 제어파일에 데이터파일의 내용이 함께 존재할 경우 fix_togather.ctl이라는 파일의 내용이다. load data infile * append into table fix_table ( name position(1:6) char, 국어 position(8:10) integer external, 영어 position(12:14) integer external, 수학 position(16:19) integer external ) begindata 백지영 80 80 80 한심해 20 20 30 조신한 50 80 90 여자면 30 100 98 이런일 80 90 65 없었지 65 95 85 OS에서 작업 아래 명령에 실행후, 결과로그가 fix_togather.log파일에 기록된다. 만일 테이블의 정의에 벗어나는 형식의 데이터(레코드)는 bad file에 저장된다. 아래와 같은 경우 fix_togather.bad라는 파일에 적합하지 않는 레코드들이 저장된다. E:> SQL*Loader: Release 8.1.6.0.0 - Production on 목 Nov 30 14:59:21 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. 커밋 시점에 도달 - 논리 레코드 개수 5 커밋 시점에 도달 - 논리 레코드 개수 6 E:> fix_togather.log파일의 내용 SQL*Loader: Release 8.1.6.0.0 - Production on 목 Nov 30 14:59:21 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. 제어 파일: fix_togather.ctl 데이터 파일: fix_togather.ctl 잘못된 파일: fix_togather.bad 폐기 파일: 지정 사항 없음 (모든 폐기된 레코드 허용) 로드할 건수: ALL 생략 건수: 0 허용 오류수: 50 바인드 배열: 64 행, 최대 65536 바이트 계속: 지정 사항 없음 사용된 경로: 규약 테이블 FIX_TABLE, 로드되었습니다 개개의 논리 레코드로부터 이 테이블에 적당한 Insert 옵션: APPEND 열 이름 위치 Len Term Encl 데이터유형 ------------------------------ ---------- ----- ---- ---- --------------------- NAME 1:6 6 CHARACTER 국어 8:10 3 CHARACTER 영어 12:14 3 CHARACTER 수학 16:19 4 CHARACTER 테이블 FIX_TABLE: 6 행들 로드되었습니다. 데이터 오류 때문에 0 행들(이)가 로드되지 않았습니다 모든 WHEN절이 실패하여 0 행들(이)가 로드되지 않았습니다 모든 필드가 NULL이어서 0 행들(이)가 로드되지 않았습니다 바인드 배열에 할당된 영역: 1664바이트(64 행) 바인드 배열외에 메모리에 할당된 영역: 0 바이트 생략된 논리 레코드의 합계: 0 읽어낸 논리 레코드의 합계: 6 거부된 논리 레코드의 합계: 0 폐기된 논리 레코드의 합계: 0 목 Nov 30 14:59:21 2000에 실행 개시 목 Nov 30 14:59:26 2000에 실행 종료 경과 시간: 00:00:05.39 CPU 시간: 00:00:00.08 SQL> select * from fix_table; NAME 국어 영어 수학 ------ ---------- ---------- ---------- 백지영 80 80 80 한심해 20 20 30 조신한 50 80 90 여자면 30 100 98 이런일 80 90 65 없었지 65 95 85 6 개의 행이 선택되었습니다. 나중의 테스트를 위해 삽입된 데이터를 지운다. SQL> delete from fix_table; 6 행이 삭제되었습니다. SQL> commit; 커밋이 완료되었습니다. SQL> 제어파일과 데이터파일이 분리된 경우 제어파일(fix_data.ctl)의 내용 load data infile 'fix_data.dat' badfile 'fix_data.bad' discardfile 'fix_data.dsc' insert into table fix_table ( name position(1:6) char, 국어 position(8:10) integer external, 영어 position(12:14) integer external, 수학 position(16:19) integer external ) 데이터파일(fix_data.dat)의 내용 백지영 80 80 80 한심해 20 20 30 조신한 50 80 90 여자면 30 100 98 이런일 80 90 65 없었지 65 95 85 E:>sqlldr userid=kang/xxxxxx control=fix_data SQL*Loader: Release 8.1.6.0.0 - Production on 목 Nov 30 15:10:49 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. 커밋 시점에 도달 - 논리 레코드 개수 5 커밋 시점에 도달 - 논리 레코드 개수 6 E:> fix_data.log파일의 내용 SQL*Loader: Release 8.1.6.0.0 - Production on 목 Nov 30 15:10:49 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. 제어 파일: fix_data.ctl 데이터 파일: fix_data.dat 잘못된 파일: fix_data.bad 폐기 파일: fix_data.dsc (모든 폐기된 레코드 허용) 로드할 건수: ALL 생략 건수: 0 허용 오류수: 50 바인드 배열: 64 행, 최대 65536 바이트 계속: 지정 사항 없음 사용된 경로: 규약 테이블 FIX_TABLE, 로드되었습니다 개개의 논리 레코드로부터 이 테이블에 적당한 Insert 옵션: INSERT 열 이름 위치 Len Term Encl 데이터유형 ------------------------------ ---------- ----- ---- ---- --------------------- NAME 1:6 6 CHARACTER 국어 8:10 3 CHARACTER 영어 12:14 3 CHARACTER 수학 16:19 4 CHARACTER 테이블 FIX_TABLE: 6 행들 로드되었습니다. 데이터 오류 때문에 0 행들(이)가 로드되지 않았습니다 모든 WHEN절이 실패하여 0 행들(이)가 로드되지 않았습니다 모든 필드가 NULL이어서 0 행들(이)가 로드되지 않았습니다 바인드 배열에 할당된 영역: 1664바이트(64 행) 바인드 배열외에 메모리에 할당된 영역: 0 바이트 생략된 논리 레코드의 합계: 0 읽어낸 논리 레코드의 합계: 6 거부된 논리 레코드의 합계: 0 폐기된 논리 레코드의 합계: 0 목 Nov 30 15:10:49 2000에 실행 개시 목 Nov 30 15:10:54 2000에 실행 종료 경과 시간: 00:00:04.64 CPU 시간: 00:00:00.08 가변길이 레코드는 필드구분자로 레코드내의 필드를 구분한다. 보통 ,로 구분자를 쓰는 경우가 많다. 제어파일에 데이터파일의 내용이 함께 존재할 경우 var_togather.ctl이라는 파일의 내용이다. load data infile * append into table var_table fields terminated by "," ( id, name, birth, sex, vocation) begindata myunggyu, 강명규, 750509, 남자, 프로그래머 piruks, 강병욱, 730301, 남자, 수학자 gildong, 홍길동, 700101, 남자, 도둑님 E:> SQL*Loader: Release 8.1.6.0.0 - Production on 목 Nov 30 15:28:23 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. 커밋 시점에 도달 - 논리 레코드 개수 2 커밋 시점에 도달 - 논리 레코드 개수 3 E:> SQL> select * from var_table; ID NAME BIRTH SEX VOCATION --------------- ---------- ------- ----- --------------- myunggyu 강명규 750509 남자 프로그래머 piruks 강병욱 730301 남자 수학자 gildong 홍길동 700101 남자 도둑님 SQL> 마찬가지로 결과로그는 var_togather.log에 저장된다. 제어파일과 데이터파일이 분리된 경우 제어파일(var_data.ctl)의 내용 load data infile 'var_data.dat' badfile 'var_data.dat' discardfile 'fix_data.dsc' append into table var_table fields terminated by "," ( id, name, birth, sex, vocation) 데이터파일(var_data.dat)의 내용 myunggyu, 강명규, 750509, 남자, 프로그래머 piruks, 강병욱, 730301, 남자, 수학자 gildong, 홍길동, 700101, 남자, 도둑님 위에서 삽입된 데이터들을 일단 지우자 SQL> delete from var_table; 3 행이 삭제되었습니다. SQL> commit; 커밋이 완료되었습니다. SQL> E:>sqlldr userid=kang/xxxxxx control=var_data SQL*Loader: Release 8.1.6.0.0 - Production on 목 Nov 30 15:36:12 2000 (c) Copyright 1999 Oracle Corporation. All rights reserved. 커밋 시점에 도달 - 논리 레코드 개수 2 커밋 시점에 도달 - 논리 레코드 개수 3 E:> SQL> select * from var_table; ID NAME BIRTH SEX VOCATION --------------- ---------- ------- ----- --------------- gildong 홍길동 700101 남자 도둑님 myunggyu 강명규 750509 남자 프로그래머 piruks 강병욱 730301 남자 수학자 SQL> SQL*LOADER 1편 끝
"무단배포금지: 클라우드포털(www.linux.co.kr)의 모든 강좌는 저작권에 의해 보호되는 콘텐츠입니다. 무단으로 복제하여 배포하는 행위는 금지되어 있습니다."
관련자료
-
이전
-
다음
댓글 0
등록된 댓글이 없습니다.