SQL*Loader의 DATA 파라미터에 확장자 없는 파일명을 지정하면 dat 확장자가 자동으로 추가되고 이로 인해 에러가 발생할 수 있습니다.
If you do not specify a file extension, then the default is .dat.
테스트를 위해 아래와 같이 테이블을 생성하겠습니다.
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER, c2 NUMBER);
아래 내용으로 t1.dat 파일과 t1 파일을 생성하겠습니다.
1,2
아래와 같이 컨트롤 파일을 생성하겠습니다.
LOAD DATA
TRUNCATE INTO TABLE t1
FIELDS TERMINATED BY ","
TRAILING NULLCOLS
(
c1
, c2
)
data 파라미터에 t1.dat 파일을 지정하면 정상적으로 데이터가 적재되는 것을 볼 수 있습니다.
$ sqlldr userid=tuna/tuna control=t1.ctl data=t1.dat
Table T1:
1 Row successfully loaded.
data 파라미터에 t1 파일을 지정하면 dat 확장자가 자동으로 추가되어 에러가 발생합니다.
$ sqlldr userid=tuna/tuna control=t1.ctl data=t1
SQL*Loader-500: Unable to open file (t1.dat)
SQL*Loader-553: file not found
SQL*Loader-509: System error: No such file or directory
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
Table T1:
0 Rows successfully loaded.
아래 쉘 스크립트는 확장자가 없는 파일에 대해 심볼릭 링크를 생성하고 심볼릭 링크로 SQL*Loader를 실행한 후 심볼릭 링크를 삭제합니다.
#!/bin/bash
control=$1
data=$2
if [[ ${data} = *.* ]]
then
sqlldr userid=tuna/tuna control=${control} data=${data}
else
ln -s ${data} ${data}.sln
sqlldr userid=tuna/tuna control=${control} data=${data}.sln
rm -f ${data}.sln
fi
확장자가 있는 t1.dat 파일을 지정하면 지정한 파일이 적재됩니다.
$ sh sqlldr.sh t1.ctl t1.dat
...
Table T1:
1 Row successfully loaded.
...
$ cat t1.log
...
Control File: t1.ctl
Data File: t1.dat
Bad File: t1.bad
Discard File: none specified
...
확장자가 없는 t1 파일을 지정하면 심볼릭 링크가 가리키는 t1 파일이 적재됩니다.
$ sh sqlldr.sh t1.ctl t1
...
Table T1:
1 Row successfully loaded.
...
$ cat t1.log
...
Control File: t1.ctl
Data File: t1.sln
Bad File: t1.bad
Discard File: none specified
...
참고