首页 文章

如何将Airflow连接到oracle数据库

提问于
浏览
4

我正在尝试使用Airflow创建与oracle数据库实例(oracle:thin)的连接 .

根据他们的documentation我输入了我的主机名,后跟端口号和SID:

主持人:example.com:1524/sid

填补其他领域:

Conn Type :Oracle

Schema :用户名(documentation表示:使用您的用户名进行架构)

Login :用户名

Password :* * *

Create Connection Page -- Airflow

Build 连接后,它会为我尝试执行的每个查询提供保存错误代码(ORA-12514) . 好像oracle不让气流连接:

ORA-12514:TNS:监听器当前不知道连接描述符中请求的服务

ORA-12514

有人曾经遇到过同样的问题 . 我的意思是,对于像这样的大平台来说,连接数据库应该不是问题 . 或者我可能做错了什么 . 谢谢

版本:Airflow v1.7.0,Oracle11g

EDIT:

我使用的是我在Oracle SQLDeveloper客户端中使用的相同主机名:
Oracle client connection configuration

3 回答

  • 3

    对于服务名称使用,如果您将(port,schema和extra)留空,则可以将完整的oracle连接描述符放在Host下:

    (DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = mysidname)))

  • 4

    在深入研究源代码之后,最终它是如何为我工作的:

    Conn类型:Oracle

    主持人:example.com

    schema:用户名

    login:用户名

    端口:端口号

    extra:{“sid”:“my sid”,“dsn”:“example.com”}

  • 7

    您的连接设置有问题,您的设置未正确加载到oracle挂钩,或者您缺少保存/加载连接设置的python包 . 您可以通过硬编码您的凭据来测试它 .

    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)
    

相关问题