programing

기류를 Oracle 데이터베이스에 연결하는 방법

elecom 2023. 10. 15. 16:58
반응형

기류를 Oracle 데이터베이스에 연결하는 방법

Airflow를 사용하여 Oracle db 인스턴스(oracle:thin)에 대한 연결을 생성하려고 합니다.

그들의 문서에 따르면 나는 내 호스트 이름을 입력한 다음 포트 번호와 SID를 입력했습니다.

호스트: example.com:1524/sid

기타 필드를 다음과 같이 채웠습니다.

연결 유형: Oracle

스키마: 사용자 이름(설명: 스키마에 사용자 이름 사용)

로그인: 사용자 이름

비밀번호: * * *

Create Connection Page -- Airflow

연결이 설정되면 실행하려고 했던 모든 쿼리에 대한 저장 오류 코드가 나타납니다(ORA-12514).Oracle은 다음과 같이 흐름이 연결되도록 허용하지 않는 것 같습니다.

ORA-12514: TNS: 수신기가 현재 연결 설명자에 요청된 서비스를 알지 못합니다.

ORA-12514

이전에 같은 문제를 겪은 적이 있는 사람.제 말은 이런 큰 플랫폼에서는 데이터베이스에 연결하는 것이 문제가 되지 않는다는 것입니다.아니면 제가 뭔가 잘못하고 있는 것 같습니다.감사해요.

버전:기류 v1.7.0, Oracle 11g

편집:

Oracle SQL Developer 클라이언트에서 사용하는 것과 동일한 호스트 이름을 사용하고 있습니다.

소스 코드를 자세히 조사한 후에, 이것이 마침내 저에게 어떻게 작동했는지를 알게 되었습니다.

연결 유형: Oracle

호스트: example.com

스키마: 사용자 이름

로그인: 사용자 이름

포트: 포트 번호

추가: {"sid": "my sid", "dsn": "example.com "}

연결 설정에 문제가 있습니다. 설정이 오라클 후크에 제대로 로드되지 않거나 연결 설정을 저장/로드하는 파이썬 패키지가 없습니다.자격 증명을 하드 코딩하여 테스트할 수 있습니다.

https://github.com/airbnb/airflow/blob/master/airflow/hooks/oracle_hook.py

conn = self.get_connection(self.oracle_conn_id)
dsn = conn.extra_dejson.get('dsn', None)
sid = conn.extra_dejson.get('sid', None)
service_name = conn.extra_dejson.get('service_name', None)
if dsn and sid and not service_name:
    dsn = cx_Oracle.makedsn(dsn, conn.port, sid)
    conn = cx_Oracle.connect(conn.login, conn.password, dsn=dsn)
elif dsn and service_name and not sid:
    dsn = cx_Oracle.makedsn(dsn, conn.port, service_name=service_name)
    conn = cx_Oracle.connect(conn.login, conn.password, dsn=dsn)
else:
    conn = cx_Oracle.connect(conn.login, conn.password, conn.host)

서비스 이름 사용의 경우(포트, 스키마 및 추가) 비워 두면 호스트 아래에 전체 오라클 연결 설명자를 넣을 수 있습니다.

(설명 = (ADDESCONNECT = (PROTOCT = TCP)(HOST = 로컬 호스트)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATE)(SERVICE_NAME = mysidNAME))

이것은 추가 분야에서 나에게 효과가 있었습니다.

{ "dsn":"192.168.x.x" , "service_name":"some.service.name" }

https://github.com/apache/airflow/blob/master/airflow/hooks/oracle_hook.py#L49 에서 연락 드립니다.

Ad hoc 쿼리 드롭다운에 연결이 보이지 않는 사람이 있다면 어댑터를 설치해야 합니다.pip install cx_Oracle서버에 설치할 수 있습니다.

언급URL : https://stackoverflow.com/questions/36945811/how-to-connect-airflow-to-oracle-database

반응형