クライアントが異常終了したなどのためにOracleのセッションが残ったままになってしまった時に、無効なセッションを切断するための方法。
v$sessionを参照すると、status列がINACTIVE状態のセッションが多数存在する。
logon_time列を見ると結構時間が経っているものもある。
last_call_et列(最後の要求からの経過時間)の値が高い。
この無効なセッションが増えすぎると、新たなセッションの接続が出来なくなり、通常のshutdownが出来なくなる。(abortでshutdownしなければならない)
方法1.SQLNET.ORA
サーバ側の$ORACLE_HOME/network/admin/sqlnet.oraファイルに以下の行を追加
SQLNET.EXPIRE_TIME=X
(X:整数 単位:分)
X分ごとにクライアントにprobeパケットを送信してエラーが発生したクライアントのセッションを切断する。
方法2.TCP KeepAlive
Windows
レジストリに以下を追加
キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters
値:
名前 : KeepAliveTime
種類 : REG_DWORD
値 : 送出間隔(単位は ミリ秒)
Linux
% /sbin/sysctl -w net.ipv4.tcp_keepalive_time=X
(X:整数 単位:秒)
再起動すると、設定がクリアされてしまうので/etc/sysctl.confファイルに以下の行を追加
net.ipv4.tcp_keepalive_time=X
v$sessionを参照すると、status列がINACTIVE状態のセッションが多数存在する。
logon_time列を見ると結構時間が経っているものもある。
last_call_et列(最後の要求からの経過時間)の値が高い。
この無効なセッションが増えすぎると、新たなセッションの接続が出来なくなり、通常のshutdownが出来なくなる。(abortでshutdownしなければならない)
方法1.SQLNET.ORA
サーバ側の$ORACLE_HOME/network/admin/sqlnet.oraファイルに以下の行を追加
SQLNET.EXPIRE_TIME=X
(X:整数 単位:分)
X分ごとにクライアントにprobeパケットを送信してエラーが発生したクライアントのセッションを切断する。
方法2.TCP KeepAlive
Windows
レジストリに以下を追加
キー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters
値:
名前 : KeepAliveTime
種類 : REG_DWORD
値 : 送出間隔(単位は ミリ秒)
Linux
% /sbin/sysctl -w net.ipv4.tcp_keepalive_time=X
(X:整数 単位:秒)
再起動すると、設定がクリアされてしまうので/etc/sysctl.confファイルに以下の行を追加
net.ipv4.tcp_keepalive_time=X