如何将Airflow连接到oracle数据库

时间:2016-04-29 19:08:37

标签: database oracle oracle11g airflow

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

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

主持人:example.com:1524/sid

填写其他字段:

Conn Type :Oracle

架构:用户名(documentation说:使用您的用户名进行架构)

登录:用户名

密码:* * *

Create Connection Page -- Airflow

设置连接后,它会为我尝试执行的每个查询( ORA-12514 )提供保存错误代码。 似乎oracle不允许气流连接:

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

ORA-12514

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

版本:Airflow v1.7.0,Oracle11g

修改

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

5 个答案:

答案 0 :(得分:7)

在深入研究源代码之后,最终它是如何对我有用的:

Conn类型:Oracle

主持人:example.com

架构:用户名

登录:用户名

端口:端口号

额外:{“sid”:“我的sid”,“dsn”:“example.com”}

答案 1 :(得分:4)

您的连接设置有问题,要么您的设置未正确加载到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)

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

这在其他领域对我有用

<canvas id=canvas style='border: 1px solid pink'></canvas>
<button id=button>crop canvas</button>

我来自https://github.com/apache/airflow/blob/master/airflow/hooks/oracle_hook.py#L49

答案 4 :(得分:1)

如果没有人在即席查询下拉列表中看不到连接-您需要在气流服务器上安装适配器:pip install cx_Oracle