プロシージャを含む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 秒) 後に最初のキープアライブ プローブを送信すると、接続がアクティブでなくなったことを検出し、接続を閉じてスクリプトが戻ります。
なぜデータベース システムが接続を切断するのか理解できません。冗長性を高めるためにデータベースの最後に設定はありますか? それとも、これはいくつかのファイアウォール設定に関連している可能性がありますか? また、2 時間 10 分では、2 時間部分が tcp_keepalive_time から来ていると推測できます。これは 10 分部分になります。データベース側の再試行はありますか?
編集:DBAと私は問題を調べました.TCP接続が私の側で確立されているのを見て、彼は私の側からの接続を見ていませんでした.