Instant Client 파일을 마운트하고 lib_dir를 지정해도 libnnz19.so 또는 64-bit Oracle Client library를 찾지 못한다.
원본에서는 custom 파일 안내 후에도 libnnz 로딩 실패가 남았다. 여기의 OS loader 경로 교정은 Oracle 공식 문서에 근거한 추가 해법이다. Thin mode 전환은 DB 버전·암호화 요구와 호환될 때만 별도로 검토한다.
같은 배포본의 Instant Client와 OS 의존성을 task 실행 환경에 갖추고 Python 시작 전에 동적 라이브러리 검색 경로를 설정한다.
확인 수준: 추가 조사 해법 · 해당 케이스 적용 결과 미확인
적용 조건: <...>와 예시 DB·테이블·경로·수치는 실제 확인값으로 바꾼다. 명령과 메뉴는 참고 문서를 바탕으로 보강한 예시이며 대상 시스템에서 실행하지 않았다. 버전·원인에 따른 분기와 남은 확인 사항은 아래에 명시한다.
python -c 'import platform,struct; print(platform.machine(),struct.calcsize("P")*8)'
file '<instantclient-dir>/libclntsh.so'
ldd '<instantclient-dir>/libclntsh.so'
ls -l '<instantclient-dir>'/libnnz*.so
not found가 남으면 해당 OS에서 지원하는 의존 패키지를 runtime image에 설치한다. 다른 Oracle 버전의 .so를 섞지 않는다.export LD_LIBRARY_PATH='<instantclient-dir>':${LD_LIBRARY_PATH:-}
python -c 'import oracledb; oracledb.init_oracle_client(); print(oracledb.clientversion())'
os.environ만 바꾸거나 이전 BashOperator task에서 export한 값은 다음 task 프로세스에 보장되지 않는다.from airflow.providers.oracle.hooks.oracle import OracleHook
hook = OracleHook(oracle_conn_id="oracle_test", thick_mode=True)
with hook.get_conn() as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1 FROM dual")
print(cur.fetchone())
library 초기화, 실제 task의 SELECT 1 및 연결 close가 모두 성공하는지 확인한다.