본문 바로가기

문제 해결 과정/DB

SQL*Loader / Oracle Client 연결 이슈

1. 문제 증상 (Symptoms)

SQL*Loader

  • SQL*Loader-704
  • ORA-12545: 대상 호스트 또는 객체가 존재하지 않습니다

Python (oracledb)

  • DPI-1047: Oracle Client library cannot be loaded

SQL*Plus

  • ORA-12545
  • ORA-12154: TNS: 지정된 접속 식별자를 해결할 수 없습니다

2. 원인 분석 (Root Cause)

① Oracle Client 라이브러리 미인식

  • Python oracledb가 oci.dll을 찾지 못함
  • Oracle Client 경로 미설정 또는 잘못된 경로 사용

② 클라이언트별 연결 방식 불일치

  • sqlldr, sqlplus, Python이 서로 다른 방식의 접속 문자열 사용
  • 일부는 TNS Alias, 일부는 EZCONNECT 사용

③ TNS Alias 설정 위치 오류

  • TESTDB alias가 sqlnet.ora에 정의됨
  • → TNS Alias는 반드시 tnsnames.ora에 정의해야 함
  • 이로 인해 ORA-12154 발생

3. 해결 과정 (Solution)

A. Oracle Client 경로 명시

설정 파일

  • db.properties

설정 값

db.client_lib=C:\\app\\client\\user\\product\\12.2.0\\client_1\\bin

확인 사항

  • 해당 경로에 oci.dll 존재 여부 확인

B. sqlnet.ora 인증 방식 수정

파일 경로

C:\\app\\client\\user\\product\\12.2.0\\client_1\\network\\admin\\sqlnet.ora

변경 내용

SQLNET.AUTHENTICATION_SERVICES = (NONE)

⚠️ NTS 인증 방식은 해당 PC 환경에서 실패하여 사용하지 않음


C. TNS Alias(TESTDB) 정상 등록

파일 경로

C:\\app\\client\\user\\product\\12.2.0\\client_1\\network\\admin\\tnsnames.ora

설정 내용

TESTDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST ={IP})(PORT ={port}))
    (CONNECT_DATA =
      (SID = ORCL)
    )
  )

D. SQL*Plus 접속 테스트

주의 사항

  • 비밀번호에 ! 포함 → 반드시 따옴표 사용
C:\\app\\client\\user\\product\\12.2.0\\client_1\\bin\\sqlplus.exe"userid/password@TESTDB"

E. SQL*Loader가 TNS Alias 사용하도록 코드 수정

변경 내용

  • db_insert.py
    • db.tns 값이 있으면 EZCONNECT 대신 TNS Alias 사용하도록 분기 처리

설정 파일

db.tns=TESTDB


4. 결과 (Result)

  • sqlplus → TESTDB로 정상 접속
  • sqlldr → 동일한 TNS Alias 사용 시 ORA-12545 완전 해결
  • Python / SQLLoader / SQLPlus 모두 동일한 Oracle Client & TNS 설정으로 통일

5. 점검 및 참고 명령어 (Reference)

SQL*Loader 실행 경로 확인

(Get-Command sqlldr).Source

TNS Ping 테스트

C:\\app\\client\\user\\product\\12.2.0\\client_1\\bin\\tnsping.exe TESTDB

포트 연결 테스트

powershell-Command"Test-NetConnection {IP} -Port {port}"


6. 정리 메모 (재발 방지 포인트)

  • TNS Alias는 무조건 tnsnames.ora
  • 인증 문제 발생 시 sqlnet.ora부터 확인
  • 모든 도구(sqlplus / sqlldr / Python)는 동일한 Oracle Client 사용 여부 점검
  • DPI-1047 → 거의 100% Client 경로 문제