본문 바로가기

ETL Tools/Oracle Data Integrator

LKM Oracle(SQLLDR) Fail on Unix

기본적으로 들어 있는 LKM은 Windows 기반으로 작성된 모듈이기 때문에 Unix기반에서 Error가 발생할 수 있다.

이때는 Turning for Unix 과정이 필요하다.

이 과정이라는 것은 sqlldr 명령을 sh file을 통해 호출하도록하는것이다.

다음과 같은 과정을 추가한다.

1. sqlldr 명령어를 가진 sh file을 생성한다.

2. 파일의 권한을 변경한다.

3. os.system을 통해 해당 파일을 호출한다.



OdiOutFile -File=<%=snpRef.getSrcTablesList("", "[WORK_SCHEMA]/[TABLE_NAME].sh", "", "")%>
#!/bin/sh
sqlldr control=<%=snpRef.getSrcTablesList("", "[WORK_SCHEMA]/[TABLE_NAME].ctl", "", "")%> log=<%=snpRef.getSrcTablesList("", "[WORK_SCHEMA]/[TABLE_NAME].log", "", "")%> userid=<%=snpRef.getInfo("DEST_USER_NAME")%>/<%=snpRef.getInfo("DEST_PASS")%>@<%=snpRef.getInfo("DEST_DSERV_NAME")%> 1> <%=snpRef.getSrcTablesList("", "[WORK_SCHEMA]/[TABLE_NAME].out", "", "")%> 2>&1


Prior to the 'Call sqlldr' command and following the 'Generate shell' command below, add a new 'chmod shell' step on the 'Command on Target' tab to the LKM as follows:

  • set the Technology: Operating System
  • set the Context : <Execution Context>
  • set the command:
chmod a+x <%=snpRef.getSrcTablesList("", "[WORK_SCHEMA]/[TABLE_NAME].sh", "", "")%>


Modify the 'Call sqlldr' step to execute on the Jython technology and replace the code with the following Jython script:

import os
if os.system("<%=snpRef.getSrcTablesList("", "[WORK_SCHEMA]/[TABLE_NAME].sh", "", "")%>") <> 0 :
           raise "sqlldr has generated an error code"

Verify Unix User Account For Priviliges
Verify that the Unix user which is used to launch the ODI (Sunopsis) Agent has access to the 'sqlldr' executable binary in its shell PATH variable. Can try to issue the command sqlldr from orcledi\oracledi\bin on the Unix box, if it returns sqlldr not found, that means the ODI (Sunopsis) agent cannot access sqlldr.