Заявление cx_Oracle застревает

При использовании cx_Oracle(Python) код переходит в ожидание, когда выполняется следующий оператор:

some_connection.execute(some_sql)

Что может быть причиной?


person fieldtraveller    schedule 06.02.2016    source источник
comment
Трудно сказать, не видя этот файл some_sql. Скорее всего причина в какой-то ошибке в some_sql.   -  person krokodilko    schedule 06.02.2016


Ответы (1)


Не видя фактического SQL, о котором идет речь, трудно сказать наверняка. Некоторые возможные ответы включают в себя:

1) на самом деле выполнение SQL занимает много времени (и вам просто нужно набраться терпения)

2) SQL заблокирован другой транзакцией (и эту транзакцию необходимо сначала зафиксировать или откатить)

Вы можете узнать это, изучив содержимое dba_locks, особенно просмотрев столбец blocking_others. Вы также можете попытаться ввести тот же SQL в SQL*Plus и посмотреть, ведет ли он себя так же.

person Anthony Tuininga    schedule 06.02.2016
comment
Это произошло потому, что предыдущая транзакция не была зафиксирована. - person fieldtraveller; 24.02.2016
comment
Есть ли способ сказать cx_Oracle, чтобы он не ждал вечно? - person avatarofhope2; 06.04.2019
comment
Вы можете использовать функцию callTimeout, доступную в Oracle Client 18.1 и cx_Oracle 7. - person Anthony Tuininga; 06.04.2019
comment
Функция callTimeout, кажется, помогает, спасибо. Также помогло поиграться с настройками sqlnet.ora. - person avatarofhope2; 15.04.2019