Этот код написан на питоне, но в основном он использует OCI
, поэтому его можно воспроизвести на любом другом языке:
import cx_Oracle as db
dsn = '(DESCRIPTION =(CONNECT_TIMEOUT=3)(RETRY_COUNT=1)(TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = SOME_HOST)(PORT = 1531)))(CONNECT_DATA =(SERVICE_NAME = SOME_NAME)))'
connect_string = "LOGIN/PASSWORD@%s" % dsn
conn = db.connect(connect_string)
conn.ping() # WILL HANG FOREVER!!!
Если SOME_HOST
не работает, это зависнет навсегда!
И это не связано с OCIPing
- если я заменю:
ping()
с:
cursor = conn.cursor()
cursor.execute('SELECT 1 FROM DUAL') # HANG FOREVER AS WELL
Это тоже будет висеть.
Я использую SQL*Plus: выпуск 11.2.0.3.0 Production, среда, 6 ноября, 12:17:09 2013 г..
Я пытался обернуть этот код в поток и ждать того же времени, что и убить поток, но это не работает. Этот код создает сам поток, и его невозможно убить из python. Есть ли у вас идеи, как восстановиться?