我有一个带有过程的 sql 脚本。我使用它运行它
sqlplus -s @script.sql logfile.log myparam1 myparam2
但是大约 2 小时 10 分钟后,我的脚本以
ERROR:
ORA-03114: not connected to ORACLE
DECLARE
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 12345
Session ID: 33 Serial number: 54321
我有以下 tcp 设置
-bash-4.1$ cat /proc/sys/net/ipv4/tcp_keepalive_time (which is two hours)
7200
-bash-4.1$ cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75
-bash-4.1$ cat /proc/sys/net/ipv4/tcp_keepalive_probes
9
当脚本运行时,我检查了 TCP 连接是否在我的末端建立,但在数据库端(数据库服务器机器)没有这样的连接。
我的理论是数据库服务器以某种方式断开了连接。当我的系统在 2 小时(7200 秒)后发送第一个 keepalive 探测时,它发现连接不再处于活动状态并关闭连接并返回脚本。
我无法理解为什么数据库系统会断开连接?数据库端是否有任何设置来增加详细程度?或者这可能与某些防火墙设置有关?此外,在 2 小时 10 分钟内,我们可以猜测 2 小时部分来自 tcp_keepalive_time,10 分钟部分是多少。任何数据库端重试?
编辑:DBA 和我查看了这个问题,我看到 TCP 连接在我的最后已建立,他没有看到任何来自我这边的连接。