2016-04-29 6 views
4

Я пытаюсь создать соединение с экземпляром dc oracle (оракул: тонкий) с помощью Airflow.Как подключить базу данных Airflow к оракулу

По их documentation я вошел в мое имя хоста следует номер порта и SID:

Ведущий: example.com:1524/sid

заполнены другие поля:

Conn Тип: Oracle

Schema: имя пользователя (documentation говорит: используйте ваше имя пользователя для схемы)

Войти: Имя пользователя

Пароль: * * *

Create Connection Page -- Airflow

После соединения установки, это дает сохранить код ошибки для каждого запроса, который я попытался выполнить (ORA-12514). Похоже, оракул не позволяет воздуха для подключения:

ORA-12514: TNS: слушатель не в настоящее время известно о запрашиваемой услуги в дескрипторе соединения

ORA-12514

ли кто-то испытал то же самое проблема перед тем. Я имею в виду, что подключение к базе данных не должно быть проблемой для такой большой платформы. Или я, вероятно, что-то делаю неправильно. Благодаря

Версия: Airflow v1.7.0, Oracle11g

EDIT:

Я использую то же имя хоста, который я использую в Oracle SQLDeveloper клиента: Oracle client connection configuration

+0

Это обычно указывает на то, что ваше соединение неверно или что слушатель в БД настроен ненадлежащим образом. Ваш слушатель БД ожидает полного имени? –

+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

После копаться в исходном коде, это то, что в конце концов, как это работает для меня:

Conn Тип: Oracle

Ведущий: пример.ком

схема: имя пользователя

Логин: Имя пользователя

порт: номер порта

дополнительно: { "Sid": "мой с.и.д.", "DSN": "example.com"}

+0

Что такое dsn - используется ли соединение типа ODBC? как насчет соединения с использованием имени службы? – Tagar

+0

ваш ответ имеет «dsn», а не «dns». Я знаю, что такое 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

для использования имени службы, если вы оставите (порт, схемы и дополнительные) пусто, вы можете поместить полный оракул дескриптор соединения под хост:

(DESCRIPTION = (ADDRESS = (ПРОТОКОЛ = TCP) (HOST = localhost) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mysidname)))