티스토리 뷰

ORACLE/ADMIN

Oracle SQL*Loader

공부하는알파카 2020. 8. 4. 10:56

SQL*Loader

-비오라클 데이터를 오라클 데이터로 옮길 때 사용하는 유틸리티이다.

-반드시 텍스트 파일 형식으로 만들어 import 해야한다.

-텍스트 파일 형식의 데이터 파일과 이 데이터 파일에 대한 정보가 적혀 있는 컨트롤 파일 두가지를 사용한다.

 

 

 

SQL*Loader 실습

 

OS 환경 : Oracle Linux 6.3
DB 환경 : Oracle Database 12.1.0.2
SID : testdb

 

SQL*Loader를 위한 디렉토리 객체를 생성한다.

testdb> create directory loader_dir as ‘/home/oracle/testdb/loader’;

 

 

 

유저에게 권한을 부여한다.

testdb> grant read, write on directory loader_dir to hr, scott;

 

 

 

 

HR 계정으로 접속하여 emp_test 테이블의 데이터를 조회한다.

testdb> select * from emp_test;

 

 

 

 

SCOTT 계정으로 접속하여 emp 테이블의 데이터를 조회한다. 이 데이터를 HR 계정의 emp_test 테이블에 추가할 것이다.

testdb> conn scott/tiger
testdb> select empno, ename, hiredate, sal, deptno from emp;

 

 

 

 

SCOTT 계정으로 접속해서 구분자를 이용하여 칼럼을 구분한 데이터파일을 생성한다.

[testdb@host01 loader]$ sqlplus scott/tiger		--/home/oracle/testdb/loader
testdb> set linesize 80
testdb> set pagesize 100
testdb> set feedback off
testdb> set heading off
testdb> spool emp_sample1.dat
testdb> select empno || ‘,’ || ename || ‘,’ || hiredate || ‘,’ || sal || ‘,’ || deptno from emp;
testdb> spool off

 

 

 

 

 

SCOTT 계정으로 접속해서 위치를 이용해 구분한 데이터파일을 생성한다.

testdb> spool emp_sample2.dat 
testdb> select rpad(empno,5)|| rpad(ename, 21)|| rpad(hiredate,10)|| rpad(sal, 11)||rpad(deptno, 4) from emp;
testdb> spool off

 

 

 

 

 

해당 위치로 가서 파일이 잘 생성되었는지 확인한다.

[testdb@host01 loader]$ ls /home/oracle/testdb/loader/

 

 

 

 

첫 번째로 만들었던 파일을 열어서 데이터만 남기고 필요없는 부분들은 지운다.

[testdb@host01 loader]$ vi emp_sample1.dat

 

 

 

두 번째로 만들었던 파일을 열어서 데이터만 남기고 필요없는 부분들은 지운다.

[testdb@host01 loader]$ vi emp_sample2.dat

 

 

 

컨트롤 파일을 생성한다. 위에서 ',' 구분자로 생성한 데이터파일을 hr.emp_test 테이블에 추가적으로 insert 한다.

[testdb@host01 testdb]$ vi emp1.ctl
load data
infile '/home/oracle/testdb/loader/emp_sample1.dat'	# 데이터파일의 위치
append				# 기존 테이블에 추가적으로 데이터 insert
into table hr.emp_test		# table 오브젝트의 이름
fields terminated by ','	# 구분자
(empno, 
ename, 
hiredate, 
salary, 
deptno)

 

 

 

 

SQL*Loader 명령어로  import를 수행한다.

[testdb@host01 testdb]$ sqlldr hr/hr control=/home/oracle/testdb/emp1.ctl

 

 

 

 

HR 계정으로 접속하여 emp_test 를 확인한다.

testdb> conn hr/hr
testdb> select * from emp_test;

 

 

 

 

컨트롤 파일을 생성한다. 위에서 위치 구분자로 생성한 데이터파일을 hr.emp_test 테이블에 추가적으로 insert 한다.

[testdb@host01 testdb]$ vi emp2.ctl 
load data
infile '/home/oracle/testdb/loader/emp_sample2.dat'	#데이터파일의 위치
truncate			# 기존 테이블의 데이터 삭제 후 insert
into table hr.emp_test
(empno position(1:4), 
ename position(6:25), 
hiredate position(27:36), 
salary position(38:47), 
deptno position(49:52))

 

 

 

 

SQL*Loader 명령어로  import를 수행한다.

[testdb@host01 ~]$ sqlldr hr/hr control=/home/oracle/testdb/emp2.ctl

 

 

 

17행을 갖고 있던 emp_test 테이블의 데이터들이 다 삭제되고 다시 14행이 insert 되었다.

testdb> select * from emp_test;

 

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함