我有一个Django项目,它使用Oracle 11数据库。我经常收到Django的例外情况:
OperationalError: ORA-03135: connection lost contact
Process ID: 0
Session ID: 0 Serial number: 0
没有特定的Django视图会导致异常。它可以从任何角度来。
从堆栈跟踪来看,这个异常似乎是从中间件内部抛出的。没有第三方中间件可能会导致问题,这都是标准Django内置的。
在哪里可以找到调试此问题的最佳位置?关于这个错误,我在网上很少发现。Django.settings模块中的任何参数(例如数据库配置)会起作用吗?
发布于 2014-11-07 05:52:29
造成此错误的原因有很多:
连接池的配置
检查连接池是否有、超时值、或生存期之类的参数。对于这个参数,我自己也有问题,导致了集合会话一分钟不活动后出现的错误ORA-03135。在我的例子中,解决方案是使用非池连接,但这对于大多数应用程序来说是不可行的。在您的情况下,设置更高的超时可能会有效果。
尝试在DJango和/或中间件上激活最高级别的调试,以查看它是否记录有关池中到期会话的消息。重新启动中间件并花费多长时间才能开始失败。如果时间很短(例如60秒),您可能需要更改超时,并确保池有足够的会话来加载。
网络错误/防火墙
各种网络问题,如丢包或网卡问题,都会导致连接掉线。
为了调试这个命令,使用Sqlplus连接到数据库,并运行任何给定的命令。在此之后,使会话不活动10、20、30、60和120分钟(一次尝试一次)。这将让您知道问题是否仅发生在连接池或SQLPLUS中。如果后者为真,则可能是网络问题或配置(例如防火墙超时)导致会话因不活动而中断。如果会话总是在相同的间隔之后(例如在两个小时之后)死亡,则尤其如此。在其他机器上进行同样的实验,看看超时是否还在发生。如果只发生在某些主机上,则主机连接到的开关可能会出现问题。你的网络工程师可能需要参与进来。
在这种情况下,OS Keepalive配置可能会有所帮助。下面是Windows的链接。http://blogs.technet.com/b/nettracer/archive/2010/06/03/things-that-you-may-want-to-know-about-tcp-keepalives.aspx
调试此类错误的另一种方法是在客户端和/或服务器上启用TNS跟踪。这是通过在客户机和服务器TRACE_LEVEL_CLIENT文件上分别将参数配置为TRACE_LEVEL_SERVER和sqlnet.ora来完成的。要实现这一点,还需要其他参数。查看有关该主题的Oracle文档。
Oracle服务器端断开
数据库可能会因为会话的问题、Oracle中的错误或会话被管理员杀死而断开连接。诊断此类问题的最佳方法是查看数据库alert.log,以匹配您获得日志内容错误的时间。如果会话在服务器上死亡,将有一个条目说明会话已终止,以及包含有关断开连接的其他信息的跟踪文件的路径。如果导致此问题的是Oracle错误,则必须通过Oracle支持搜索适当的修补程序。
此外,用户可能与配置了CONNECTION_TIME或IDLE_TIME的Oracle配置文件相关联。为了进行调试,如果这是问题的原因,请将用户与Oracle配置文件关联,而不受此类限制。
https://stackoverflow.com/questions/26678020
复制相似问题