10

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

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

主机:example.com:1524/sid

填写其他字段为:

连接类型:甲骨文

架构:用户名(文档说:使用您的用户名作为架构)

登录:用户名

密码:* * *

创建连接页面——气流

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

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

ORA-12514

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

版本:Airflow v1.7.0,Oracle11g

编辑:

我使用的主机名与在 Oracle SQLDeveloper 客户端中使用的主机名相同: Oracle客户端连接配置

4

5 回答 5

16

在深入研究了源代码之后,这就是它最终对我有用的方式:

连接类型:甲骨文

主机:example.com

架构:用户名

登录:用户名

端口:端口号

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

于 2016-04-29T23:36:15.437 回答
6

您的连接设置有问题,您的设置未正确加载到 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)
于 2016-04-29T23:23:51.317 回答
5

对于服务名称的使用,如果您将(端口、模式和额外)留空,您可以将完整的 oracle 连接描述符放在主机下:

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

于 2017-04-21T22:28:15.860 回答
5

这在额外的领域对我有用

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

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

于 2019-06-11T17:14:54.490 回答
4

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

于 2019-08-05T14:15:21.967 回答