PI_PO

SAP PO JDBC Receiver 채널에서 ORA-04054 오류 해결 방법

피오농부 2025. 5. 26. 07:05
반응형

SAP PO 환경에서 Oracle DB와 연동 시 종종 발생할 수 있는 오류 중 하나인 "ORA-04054: database link does not exist" 문제에 대해 구체적인 원인과 해결 방법을 정리해보았습니다. 특히 JDBC Receiver 채널 설정과 관련된 실무 팁을 중심으로 설명합니다.


목차 (Table of Contents)

  1. ORA-04054 오류란?
  2. 오류 발생 원인 분석
  3. SAP PO JDBC 채널의 기본 처리 방식
  4. 해결 방법: 문자열 리터럴과 Batch Mode 설정
  5. 실무 적용 팁
  6. 마무리 정리

1. ORA-04054 오류란?

Oracle DB에서 "ORA-04054: database link does not exist" 오류는 존재하지 않는 DB 링크를 참조하려 할 때 발생합니다. 예를 들어 SQL에서 @bbb.com 형태가 나타나면, Oracle은 이를 DB 링크로 오인해 연결을 시도합니다.


2. 오류 발생 원인 분석

이 오류는 이메일 주소와 같은 '@' 기호가 포함된 데이터가 SQL 문에 포함될 때 발생할 수 있습니다. 특히 SAP PO의 JDBC 어댑터에서 이메일 주소가 포함된 필드 값을 SQL로 전달할 때 아래와 같은 문제가 생깁니다:

  • 예: AA||@||BBB.COM → Oracle이 BBB.COM을 DB 링크로 인식

이는 SAP PO가 기본적으로 문자열을 리터럴로 처리하지 않고, SQL 파서가 이를 문자 리터럴로 인식하지 못해 생기는 문제입니다.


3. SAP PO JDBC 채널의 기본 처리 방식

SAP PO의 JDBC Receiver 채널은 SQL을 직접 전달 방식 또는 **바인딩 변수 방식(sqlBindMode)**으로 처리할 수 있습니다.

  • 기본적으로 SQL을 직접 문자열로 구성하면, Oracle 파서가 @ 뒤를 DB 링크로 잘못 인식할 수 있음
  • 이런 문제를 방지하기 위해 sqlBindMode = true와 함께 Batch Mode 사용을 고려할 수 있습니다

4. 해결 방법: 문자열 리터럴과 Batch Mode 설정

방법 1. PrepareStatement 방식 사용

PrepareStatement를 이용하면 SQL 내 리터럴 문자열을 안전하게 처리할 수 있어 @ 기호로 인한 DB 링크 오인을 방지할 수 있습니다.

방법 2. JDBC Receiver 채널에서 Batch Mode 활성화

JDBC 채널 설정에서 Batch Mode 옵션을 체크하면 내부적으로 SQL이 바인딩 변수 방식으로 처리됩니다. 이 방식은 SELECT, INSERT_UPDATE, EXECUTE, SQL_QUERY 유형에서만 지원됩니다.

주의: Batch Mode는 일부 복합 쿼리에서는 동작하지 않을 수 있으니 테스트가 필수입니다.


5. 실무 적용 팁

  • 에러 메시지: ORA-04054 database link 'BBB.COM' does not exist 가 나타난다면, 데이터에 포함된 @ 기호부터 의심해보세요.
  • SQL 작성 시 이메일 같은 문자열은 반드시 PreparedStatement 혹은 Bind Variable 방식으로 처리하세요.
  • SAP PO 설정에서 sqlBindMode = true, Batch Mode를 함께 사용하는 것이 일반적인 해결책입니다.
  • 공식 SAP 노트나 문서에서는 이 이슈가 구체적으로 명시되어 있지 않아, 커뮤니티나 StackOverflow 등을 참고하면 도움을 받을 수 있습니다.

6. 마무리 정리

SAP PO JDBC Receiver 채널에서의 ORA-04054 오류는 단순한 SQL 문법 오류가 아닌, Oracle의 파싱 방식과 관련된 구조적 이슈입니다. SAP PO 사용자는 반드시 SQL 처리 방식에 대한 이해를 갖추고, 이메일 주소와 같은 데이터를 안전하게 처리할 수 있도록 Batch Mode 설정과 PreparedStatement 사용을 적극 고려해야 합니다.

반응형