【问题标题】:SQLAlchemy and Oracle 12c Connection IssuesSQLAlchemy 和 Oracle 12c 连接问题
【发布时间】:2017-02-21 15:11:53
【问题描述】:

我在 Python 3.5 上使用 SQLAlchemy CORE (1.0.12) 连接我组织的 Oracle 数据库。在我的组织将 Oracle 数据库从 11g 升级到 12c 之前,我的数据库脚本可以正常运行。升级后,我在尝试将数据插入现有表时通常会遇到以下错误。

sqlalchemy.exc.OperationalError: (cx_Oracle.OperationalError) ORA-03135: connection lost contact
Process ID: 10355
Session ID: 184 Serial number: 60376

在升级过程中我没有更改任何 SQLAlchemy 脚本,并且错误不会总是发生,通常仅在我尝试插入大型数据集时发生。我研究了与 ORA-03135 错误代码相关的问题,并确认我没有遇到任何防火墙问题(我有时可以连接)或超时(错误提示会在几秒钟内出现,这对于超时来说太快了)。

有没有其他人遇到过这个问题并找到了解决方案?

Traceback (most recent call last):
  File "C:\ross\repository\Analytics\OptTekSQL\run.py", line 5, in <module>
'Demand Analysis 8/17/16')
  File "C:\ross\repository\Analytics\OptTekSQL\optsql\data_load.py", line 43, in demand_output_load
s.insert_df(df, 'ACCDC_DEMAND_OUTPUTS')
  File "C:\ross\repository\Analytics\OptTekSQL\optsql\base.py", line 38, in insert_df
self.eng.connect().execute(ins, data)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\engine\base.py", line 914, in execute
return meth(self, multiparams, params)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\sql\elements.py", line 323, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\engine\base.py", line 1010, in _execute_clauseelement
compiled_sql, distilled_params
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\engine\base.py", line 1146, in _execute_context
context)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\engine\base.py", line 1341, in _handle_dbapi_exception
exc_info
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\util\compat.py", line 200, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\util\compat.py", line 183, in reraise
raise value.with_traceback(tb)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\engine\base.py", line 1116, in _execute_context
context)
  File "C:\Users\palmer\AppData\Local\Continuum\Anaconda2\envs\py3\lib\site-packages\sqlalchemy\dialects\oracle\cx_oracle.py", line 964, in do_executemany
cursor.executemany(statement, parameters)

【问题讨论】:

  • 你在 python 运行的机器上更新了 Oracle Client 库吗?
  • 哎呀,我没有,虽然 SQLAlchemy 1.1 的更新似乎已经完成了这个技巧。我会尝试更新客户端
  • 注意:我已经更新了我的 Oracle 客户端,但问题仍然存在,有人有解决方案吗?

标签: python oracle sqlalchemy oracle12c


【解决方案1】:

我们遇到了这个确切的问题,以下解决方法防止了错误:

在oracle数据库服务器上,在sqlnet.ora文件中添加参数(使用较大的数字比如下面防止超时):

SQLNET.SEND_TIMEOUT=600000

在客户端通过python连接数据库的sqlnet.ora中也添加相同的参数。

【讨论】:

  • 您能否详细说明在客户端的sqlnet.ora通过python连接数据库时添加相同的参数?我正在做。 engine = create_engine(os.environ['DATABASE_URL'], echo=False) Session = sessionmaker(bind=engine)
猜你喜欢
  • 2020-05-25
  • 1970-01-01
  • 2018-06-09
  • 2021-06-27
  • 2020-05-24
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多