티스토리 뷰
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;
'ORACLE > ADMIN' 카테고리의 다른 글
Oracle Partition Table(Range, List) (0) | 2020.08.05 |
---|---|
Oracle Transportable Tablespace(TTS) (0) | 2020.08.03 |
Oracle 데이터 이동 Datapump(expdp, impdp) 사용하기(2) (0) | 2020.07.31 |
Oracle 데이터 이동 Datapump(expdp, impdp) 사용하기(1) (0) | 2020.07.30 |
Oracle 접속(tnsnames.ora) 실습 (0) | 2020.07.29 |