执行简单的SQL查询时,cx_Oracle(5.1.3)会间歇性地抛出一些随机异常。
def execute_query(name, asize=100, mapper=default_mapper, **kwargs):
with session_pool.acquire() as conn:
sql = read_sql(name)
cursor = conn.cursor()
cursor.arraysize = asize
cursor.prepare(sql, name)
cursor.execute(None, kwargs)
return mapper(cursor)
read_sql(name)
只是从文件中读取查询字符串,而session_pool是一个具有大量空闲连接的cx_Oracle.SessionPool
对象。 mapper
是一个行映射器函数,它返回list
dict
。
大多数调用都不会返回任何行,但偶尔会随机抛出
ORA-03106: fatal two-task communication protocol error
ORA-01002: fetch out of sequence
ORA-01403: no data found
ORA-01013: user requested cancel of current operation
此外,查询有时会在继续之前阻塞超过一分钟。它是一个带有一个绑定变量的单个表的静态查询,不能比这更简单。此外,只有一个线程执行此操作。任何人都有类似的经历吗?