我正在尝试使用Airflow创建与oracle数据库实例(oracle:thin)的连接。
根据他们的documentation我输入了我的主机名,后跟端口号和SID:
主持人:example.com:1524/sid
填写其他字段:
Conn Type :Oracle
架构:用户名(documentation说:使用您的用户名进行架构)
登录:用户名
密码:* * *
设置连接后,它会为我尝试执行的每个查询( ORA-12514 )提供保存错误代码。 似乎oracle不允许气流连接:
ORA-12514:TNS:侦听器当前不知道连接描述符中请求的服务
之前是否有人遇到过同样的问题。我的意思是,对于像这样的大平台来说,连接数据库应该不是问题。或者我可能做错了什么。感谢
版本:Airflow v1.7.0,Oracle11g
修改
答案 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
。