Добрый день!
Есть задача настроить соединения с помощью 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')