SQL Loader
๋น์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ค๋ผํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๋ ๋ฐฉ๋ฒ์ผ๋ก SQL Loader๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. SQL Loader๋ csv๋ tsv ํ์ผ์ฒ๋ผ ํน์ ๊ตฌ๋ถ์๋ ์์น๋ก ์ ์๋์ด ์๋ ํ ์คํธํ์ผ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด์ importํ๋ ๋ฐฉ์์ ๋๋ค. SQL Loader๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด๋ฌํ ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ์ ธ ์๋ ๋ฐ์ดํฐ ํ์ผ๊ณผ importํ๋ ๋ฐ์ดํฐ ํ์ผ ๋ฐ ํ ์ด๋ธ์ ๋ํ ์ ๋ณด๊ฐ ๊ธฐ์ ๋์ด์ ธ ์๋ ์ปจํธ๋กค ํ์ผ ๋๊ฐ์ง๋ฅผ ์ด์ฉํฉ๋๋ค.
SQL Loader ์ค์ต
์ค์ตํ๊ฒฝ
OS : Red Hat Enterprise Linux Server release 6.10
DB : Oracle 11.2.0.1
SID : orcl
host : 601d2fce71dc
์ค์ต๋ชฉํ
- import์ฉ Data file์ ๊ฐ ํ์๋ณ๋ก ์์ฑ
- import์ฉ Control File ํ์๋ณ ์ต์ ๋ณ ์์ฑ
- orcl hr.departments ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ hr.dept_loader ํ ์ด๋ธ๋ก ๋ณต์
Import์ฉ Data file
[oracle@601d2fce71dc ~]$ sqlplus hr/hr
HR ๊ณ์ ์ผ๋ก ์ ์ํด์ ๋ฐ์ดํฐํ์ผ์ ๊ตฌ๋ถ์๋ฅผ ์ด์ฉํ ์นผ๋ผ์ ๊ตฌ๋ถ๊ณผ ์์น๋ก ๊ตฌ๋ถํ ๋ฐ์ดํฐํ์ผ 2๊ฐ์ง๋ฅผ ์ด์ฉํด์ ์ค์ต ์งํํ๊ฒ ์ต๋๋ค.
Comma Seperated
HR@orcl>
select
department_id
|| ',' ||
department_name
|| ',' ||
manager_id
|| ',' ||
location_id
from departments;
Comma ๋จ์๋ก ๊ตฌ๋ถ๊ฐ์ ๊ฐ๋ ๋ฐ์ดํฐ ์์ฑํ์ต๋๋ค.
Position
HR@orcl>
select
rpad(department_id,5)
|| rpad(department_name,31)
|| rpad(manager_id,7)
|| location_id
from departments;
์์น๋ก ๊ตฌ๋ถํ ๋ฐ์ดํฐ ํ์ผ์ ์์ฑํ์ต๋๋ค.
column1 (1:4)
column2 (6:35)
column3 (37:42)
column4 (44:47)
Oracle์์ ์ ๊ณตํ๋ ์ฐ๊ฒฐ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด์ ๊ฐ ํ์๋ณ๋ก Import์ฉ ๋ฐ์ดํฐ ํ์ผ์์ ๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์์ต๋๋ค. ํด๋น ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณต์ฌํด์ Import์ฉ ๋ฐ์ดํฐํ์ผ์ ๋ง๋ค์์ ์ ๋๋ค. ๋ฐ์ดํฐ์ ์์ด ๋ง์ ๊ฒฝ์ฐ spool ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด์ ๋ฐ๋ก ํ์ผ์ ๋ง๋๋ ์์ ์ ํด๋ ๋ฉ๋๋ค.
[oracle@601d2fce71dc ~]$ vi /opt/oracle/departments.dat
๋ณต์ฌํ ๋ด์ฉ์ ํ์ผ์ ์ ์ฅํฉ๋๋ค.
Import Control File
[oracle@601d2fce71dc ~]$ vi /opt/oracle/department.ctl
append(Comma Seperated)
load data
infile '/opt/oracle/departments.dat'
append
into table hr.dept_loader
fields terminated by ','
(
department_id
,department_name
,manager_id
,localtion_id
)
append ์ต์ ์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด์ ์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ์์ ์ถ๊ฐ์ ์ผ๋ก insertํ๋ ์์ ์ ํฉ๋๋ค.
infile - ๋ฐ์ดํฐ ํ์ผ์ ์์น
into table - table ์ค๋ธ์ ํธ์ ์ด๋ฆ
fields terminated by - ๊ตฌ๋ถ์
truncate(Comma Seperated)
load data
infile '/opt/oracle/departments.dat'
truncate
into table hr.dept_loader
fields terminated by ','
(
department_id
,department_name
,manager_id
,localtion_id
)
truncate ์ต์ ์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๊ณ Importํ๋ ๋ฐ์ดํฐ๋ง ๋ฐ์ํฉ๋๋ค.
position datafile import
load data
infile '/opt/oracle/departments.dat'
append
into table hr.dept_loader
(
department_id position(1:4)
,department_name position(6:35)
,manager_id position(37:42)
,location_id position(44:47)
)
์์น๊ธฐ๋ฐ์ผ๋ก Importํ ์ ์์ต๋๋ค.
Import
HR@orcl> create table dept_loader as select * from departments where 1=0;
SQL Loader๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฏธ๋ฆฌ ํ ์ด๋ธ์ ์์ฑํด์ผ Import๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
[oracle@601d2fce71dc ~]$ sqlldr hr/hr control=/opt/oracle/departments.ctl
27๊ฐ์ ํ์ด ์ฑ๊ณต์ ์ผ๋ก Import๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ฐ Control File ์ต์ ์ ๋ฐ๋ผ ๋ฐ์ดํฐ์ import ์ํ๋ฅผ ์ดํ ํ์ธํ๋ฉด ๋ฉ๋๋ค.
Direct Option
[oracle@601d2fce71dc ~]$ sqlldr hr/hr control=/opt/oracle/departments.ctl direct=true
[oracle@601d2fce71dc ~]$ vi departments.log
Direct Option์ ์ฌ์ฉํ๊ณ ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ฉด Path used ๊ฐ์ด Conventional์ด ์๋ Direct๋ก๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. Direct ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋น ๋ฅด๊ฒ Import ์์ ์ ์งํํ ์ ์์ต๋๋ค. ๊ธฐ์กด Conventionalํ ๋ฐฉ์์ Importํ๋ ๊ณผ์ ์์ SGA ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ๋ฉ๋๋ค. ์ด์์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ณต์ ๋๋ ๋ฉ๋ก๋ฆฌ๋ก Import์์ ์ ํ๊ฒ๋๋ฉด ๊ฒฝํฉ์ด ๋ฐ์ํ์ฌ Waiting Event๊ฐ ๋ฐ์ํ ์ ์๊ณ ๊ณต์ ๋๋ ๊ณต๊ฐ์ด๋ค๋ณด๋ ์์ ์ด Directํ ๋ฐฉ์๋ณด๋ค ์๋์ ์ผ๋ก ๋๋ฆฝ๋๋ค. Directํ ๋ฐฉ์์ PGA์์ญ์ ์ฌ์ฉํด์ datafile์ ๋ฐ๋ก Insertํ ์ ์๋ ๋ฐฉ์์ผ๋ก SGA ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
Import ์ดํ
Import๊ฐ ์๋ฃ๋๋ฉด ์์ ๋์ค ์ธ๋ถ์ ์ผ๋ก ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ๊ธฐ๋ก๋๋ logํ์ผ์ดํ๋ ์์ฑ๋ฉ๋๋ค. Import๊ฐ ์ฑ๊ณตํ ์๋ ์์ง๋ง ๋ฐ์ดํฐ ํ์ผ์ ๋ฌธ์ ๋ก ์คํจํ ์๋ ์์ต๋๋ค. ์คํจ์ Discard File๊ณผ Bad File ๋๊ฐ์ง ๋ก๊ทธํ์ผ์ด ์์ฑ๋ ์ ์์ต๋๋ค.
Discard File
Control File์์ ์กฐ๊ฑด์ ๋ง์กฑ์ํค์ง ๋ชปํ ํ๋ค์ด ๊ธฐ๋ก๋ฉ๋๋ค.
Bad File
Insert ํ๊ณ ์ํ๋ ํ ์ด๋ธ์ ์ผ์นํ์ง ์๋ ๋ฐ์ดํฐ๊ฐ Import๋๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์์๋ ํ๋ค์ด ๊ธฐ๋ก๋ฉ๋๋ค.
๋๊ธ