Мы используем cx_Oracle для подключения нескольких потоков к базе данных и выпускаем различные выборки и обновления.Однако по неизвестным причинам сценарий убивается системой при случайных подключениях к базе данных.В системном журнале или файлах сообщений нет никакой информации.
Из-за обработки ошибок мы пытаемся записать трассировки в файл журнала.К сожалению, у нас нет информации о сбое скрипта в лог-файле.Только в stdout распечатка с «PID kill» в последней строке.
Может ли быть проблема в одновременном соединении базы данных с несколькими потоками?В то же время выполняются и другие сценарии, которые также взаимодействуют с базой данных (не многопоточные), но обращаются к другим таблицам.
Это наша функция, которая вызывается для каждого выбора.Для обновлений у нас есть другие функции.
def ora_send_sql( logger, statement):
try:
dsn = cx_Oracle.makedsn(SQL_IP, SQL_PORT, SQL_SID)
con = cx_Oracle.connect(SQL_USR, SQL_PWD, dsn)
cur = con.cursor()
cur.execute(statement)
con.commit()
con.close()
return 0
except cx_Oracle.Warning as w:
logger.warning(" Oracle-Warning: "+ str(e).strip())
pass
except cx_Oracle.Error as e:
error, = exc.args
logger.error(" Oracle-Error-Code:", error.code)
logger.error(" Oracle-Error-Message:", error.message)
return -1
except:
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
logger.exception(" Got Traceback in ora_send_sql: " + str(exc_type) + " Fname=" + str(fname) + " Lineno=" + str(exc_tb.tb_lineno))
return -2