Mas*_*sih 7 database oracle oracle11g airflow
我正在尝试使用Airflow创建与oracle数据库实例(oracle:thin)的连接.
根据他们的文档,我输入了我的主机名,后跟端口号和SID:
主持人:example.com:1524/sid
填补其他领域:
Conn类型:Oracle
架构:用户名(文档说明:使用您的用户名作为架构)
登录:用户名
密码:***
建立连接后,它会为我尝试执行的每个查询提供保存错误代码(ORA-12514).好像oracle不让气流连接:
ORA-12514:TNS:监听器当前不知道连接描述符中请求的服务
有人曾经遇到过同样的问题.我的意思是,对于像这样的大平台来说,连接数据库应该不是问题.或者我可能做错了什么.谢谢
版本:Airflow v1.7.0,Oracle11g
编辑:
Mas*_*sih 10
在深入研究源代码之后,最终它是如何为我工作的:
Conn类型:Oracle
主持人:example.com
schema:用户名
login:用户名
端口:端口号
extra:{"sid":"my sid","dsn":"example.com"}
您的连接设置有问题,要么您的设置未正确加载到 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)
Run Code Online (Sandbox Code Playgroud)
对于服务名称的使用,如果您将(端口、架构和额外)留空,您可以将完整的 oracle 连接描述符放在 Host 下:
(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mysidname)))
这在额外的领域对我有用
{ "dsn":"192.168.x.x" , "service_name":"some.service.name" }
Run Code Online (Sandbox Code Playgroud)
我从https://github.com/apache/airflow/blob/master/airflow/hooks/oracle_hook.py#L49
归档时间: |
|
查看次数: |
7397 次 |
最近记录: |