如果TCP/IP KeepAlive 设置过长,那么在Pirmary意外down机之后,Standby上的partially filled archived log 无法被正常register,会报ORA-332错误。

修改操作系统的TCP/IP KeepAlive值就可以了。

以下总结了几种操作系统中修改TCP/IP KeepAlive值的方法。

Problem Description: 
====================   
How to implement Solaris TCP/IP KeepAlive mechanism.

To change the keepalive interval on Solaris (SPARC) servers you have to use the maintenance command ndd.

 It is not possible to configure this information in the /etc/system file. 
To find out the current value of the TCP/IP keepalive interval use the following command:    
 ndd /dev/tcp tcp_keepalive_interval 
The value returned is in units of milliseconds, eg.     
% ndd /dev/tcp tcp_keepalive_interval    
7200000 
Which in this case works out to 2 hours. 
To change this value you use ndd with the '-set' flag, eg:     
 # ndd -set /dev/tcp tcp_keepalive_interval 1200000

Problem Description: 
====================   
How to implement Windows NT TCP/IP KeepAlive mechanism.
    
Problem Explanation: 
====================   
It is important to implement the Windows NT TCP/IP KeepAlive mechanism  to prevent dead sessions from accumulating when SQL*Net/Net8 Dead Connection Detection [SQLNET.EXPIRE_TIME] is set to zero or unset in the SQLNET.ORA file. 

Solution Description: 
=====================   
To implement the Windows NT TCP/IP KeepAlive mechanism, click:  
   Start > Run > Regedit.exe 
In the Registry,navigate to:
   HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters     
   Edit - Add value: KeepAliveTime (REG_DWORD)
      Decimal  -> 180000 (for example = 3 minutes)
   The parameter will not be present the first time you modify the parameter,
   so you will need to add it. The default value is 2 hours.

Problem Description: 
====================   
How to implement Linux TCP/IP KeepAlive mechanism.

修改/proc/sys/net/ipv4/tcp_keepalive_time
# echo 120 > /proc/sys/net/ipv4/tcp_keepalive_time