Найти - Пользователи
Полная версия: Подскажите как проверить соединение с ORACLE с помощью Cx.Oracle
Начало » Python для экспертов » Подскажите как проверить соединение с ORACLE с помощью Cx.Oracle
1
Olegenok
Добрый день!

Есть задача настроить соединения с помощью cx.Oracle к 8-ми БД ORACLE для получения данных из них с помощью REST FLASK приложения.

Данные для соединения с базами лежат в словаре. По которому я прохожу в цикле и пытаюсь установить соединения, в случае ошибки выдается DataBaseError (например, я ввожу не правильные данные для коннекта). Но у меня возникает проблема в одной из БД, до которой нет сетевого доступа (не проходит с сервера telnet). Падает приложение на момент поднятия пула к ней и начинает работать цикл заново - все соединения опять создаются. Это видно по логам приложения. Не знаю как правильно обработать ситуацию, когда вообще нет ответа от сервера БД. В except я вообще не попадаю, чтобы выйти из этой итерации цикла.

Пробовала в пуле установить параметр cx_Oracle.SPOOL_ATTRVAL_TIMEDWAIT, вроде как по описанию библиотеки cx_Oracle он как раз нужен для попытки устанавливать соединение в течение некоторого времени. Но ничего не происходит нового.

for idx,word in enumerate(data_conn):

log.info('Trying to establish a connection to DB ' + str(word)+ ‘\n’ )

try:
log.info('Попытка поднять пул')

pool=cx_Oracle.SessionPool(word ,word,word,1,2,1, threaded =True,getmode=cx_Oracle.SPOOL_ATTRVAL_TIMEDWAIT)
log.info('DB '+ str(word)+' the pool is established'+ ‘\n’)

pool_list[word]=pool

connection = pool.acquire()
log.info('DB '+ str(word)+' the connection is established'+ ‘\n’)
connection_list[word]=connection


except cx_Oracle.DatabaseError as excp_db:

log.info('DatabaseError')

pool_list[word]=None
connection_list[word]=None

log.error('DB '+str(word)+' connection error ‘+str(excp_db)+ ’\n')

except:
log.info('Other errors')

pool_list[word]=None
connection_list[word]=None

log.error('DB '+str(word)+' OTHER error ‘+ ’\n')
clipper1995
Если не попадаешь в except, нужно сделать raise?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB