2016-04-29 9 views
4

エアフローを使用してoracle dbインスタンス(oracle:thin)への接続を作成しようとしています。エアフローをOracleデータベースに接続する方法

は彼らのdocumentationによると、私はポート番号が続く私のホスト名を入力し、SID:

ホスト:

コネティカットタイプ

は、などの他のフィールドを埋めexample.com:1524/sid Oracle

スキーマ:ユーザー名(documentation:スキーマにユーザー名を使用)

ログイン:ユーザ名

パスワード:* * *接続がセットアップされた後、それは私が実行しようとしたすべてのクエリの保存エラーコードを示します

Create Connection Page -- Airflow

ORA-12514)。 Oracleは空気の流れを接続するために聞かせていないように思え:

ORA-12514:TNS:リスナーは現在、接続記述子に

ORA-12514

を要求されたサービスを認識していませんが、誰かが同じことを経験しています問題が発生する前に。私はデータベースに接続することは、このような大きなプラットフォームでは問題ではないはずです。あるいは私はおそらく何か間違っている。おかげ

バージョン:通気v1.7.0、Oracle11g

EDIT:

私はオラクルのsqldeveloperクライアントで使用するのと同じホスト名を使用しています: Oracle client connection configuration

+0

通常、接続が正しくないか、DB上のリスナーがセットアップされていることを示します(TCP(HOST = localhost)(PORT = 1521))(CONNECT_DATA = SERVER = DSIICATED)不適切に。 DBリスナーは完全修飾名を期待していますか? –

+0

@TGrayこれは、Oracle SQLDelveloperで使用するホスト名とまったく同じです(別のスクリーンショット・フォームoracleクライアント構成を追加しました)。 – Masih

+0

私はこの回答をstackoverflowで参照します:http://stackoverflow.com/questions/10786782/ora-12514-tnslistener-does-not-currently-know-of-service-requested-in-connect- d –

答えて

6

、これは最終的にどのようにそれが私の仕事です:

コネティカットタイプ:Oracle

ホスト:例。comの

スキーマ:ユーザー名

ログイン:ユーザー名

ポート:ポート番号

エクストラ:{ "SID": "私のSID"、 "DSN": "example.com"}

サービス名を使用するため
+0

dsnとは何ですか?ODBCタイプの接続を使用していますか?サービス名を使用した接続はどうですか? – Tagar

+0

答えは "dns"ではなく "dsn"です。私はDNSが何であるか知っています。私の質問は、Oracleデータベースへのエアフロー接続に関するものでした。 Oracleには「DSN」または「データ・ソース名」という用語がありません。これはODBCの用語です。それが私が尋ねた理由です。ありがとう。 – Tagar

+0

nevermind .. @kavehmbの他の回答で指摘されているソースコードを見て、私の質問に答えました。 – Tagar

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) 
+0

ソースコードを参考にしていただきありがとうございます。私が持っていたすべての質問に答えました。 – Tagar

1

、あなたが残した場合(ポート、スキーマおよび余分)、空、あなたがホストの下に完全なOracle接続記述子を置くことができます。

(DESCRIPTION =(ADDRESS =(PROTOCOL =

関連する問題