DBSPI40-1: Unable to fetch data from table 'V$SYSSTAT' [ORA-03135: connection lost contact]

先看一下oracle错误ORA-03135: connection lost contact

今晚遇到这个错误,给王工打电话,让我忽略,我之前以为是连接不到数据库了呢。。好吧,我明天把它整理出来。

由于该错误只在夜间主库做备份的时候发生,加上带宽因素,起先没有考虑处理问题.但在查看了日志里收藏的其他两篇文章后,发现该问题即使对异地standby也是有可能解决的.文中提到在standby的sqlnet.ora文件中设置SQLNET.EXPIRE_TIME参数,用来保持primary与standby的连接.按照这个提示,在异地standby上设置SQLNET.EXPIRE_TIME=10.重新启动listner.经过几天的的观察,错误没有再发生.

SQLNET.EXPIRE_TIME:

参数出处:

$ORACLE_HOME/network/admin/sqlnet.ora -> expire_time

时间单位:

分钟

取值范围:

大于0

默认取值:

无

用途解释:

死联接检测DCD(Dead Connection Detection)是 SQL*NetV2.1 和此版本以后的一个新特性, 当它检测到对方 c/s 或者s/s 联接意外终止时, 释放相关占用的资源。

DCD 起初是专为客户机没有从会话中断开联接的情况下断电的环境设计的。

DCD由服务端开始建立联接。 这时候SQL*Net 从参数文件中读取变量, 设置一个定时器定时产生信号。 这个时间间隔是sqlnet.ora文件中的SQLNET.EXPIRE_TIME提供的。

当定时器设定的时间到了之后, 服务器上的SQL*Net 发送一个探测包到客户端。(如果是数据库联接, 目的端的服务器发送探测包到另一端)。 探测包是由空的SQL*Net包组成, 不体现SQL*Net层任何数据, 但会在下一层的网络协议中产生数据流量。

如果客户端的联接仍然是活动的, 探测包被丢弃,计时装置复位。 如果客户端异常断掉,服务器将收到由发送探测包的调用发出的错误。

点赞