客户端出现TNS-12542和TNS-12560,但有时连接也正常.
在客户端SQLNET.ORA设置trace
+++++++++++++++++++++++++++++
TRACE_LEVEL_CLIENT=16
TRACE_FILE_CLIENT=CLIENT
TRACE_DIRECTORY_CLIENT=c:\arc
TRACE_TIMESTAMP_CLIENT=on
TRACE_UNIQUE_CLIENT=on
+++++++++++++++++++++++++++++
在trace log可以看到如下错误信息
+++++++++++++++++++++++++++++
[27-JUL-2009 09:53:16:259] nttcni: trying to connect to socket 728.
[27-JUL-2009 09:53:16:259] ntt2err: entry
[27-JUL-2009 09:53:16:259] ntt2err: soc 728 error - operation=1, ntresnt[0]=512, ntresnt[1]=48, ntresnt[2]=0
[27-JUL-2009 09:53:16:259] ntt2err: exit
[27-JUL-2009 09:53:16:368] nttcni: exit
[27-JUL-2009 09:53:16:368] nttcon: exit
[27-JUL-2009 09:53:16:368] nserror: entry
[27-JUL-2009 09:53:16:368] nserror: nsres: id=0, op=65, ns=12542, ns2=12560; nt[0]=512, nt[1]=48, nt[2]=0; ora[0]=0, ora[1]=0, ora[2]=0
[27-JUL-2009 09:53:16:368] nsopen: unable to open transport
+++++++++++++++++++++++++++++
Cause
Problem is caused due to the fact that the free ports in the windows client has been exhausted and it is trying to make use of a port which is in TIME_WAIT state which gives the error TNS-12542: Address already in use.
Solution
There are 2 solutions available:
1.) Increase the free port range:
======================
Start Registry Editor (Regedt32.exe).
Locate the following key in the registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
On the Edit menu, click Add Value, and then add the following registry value:
Value Name: MaxUserPort Data Type: REG_DWORD Value: 65534
Valid Range: 5000-65534 (decimal) Default: 0x1388 (5000 decimal)
Description: This parameter controls the maximum port number used when an application requests any
available user port from the system. Normally, ephemeral (that is, short-lived) ports are allocated between the values of 1024 and 5000 inclusive.
2.) Decrease the value for TIME_WAIT state:
================================
TcpTimedWaitDelay (new in Windows NT versions 3.51 SP5 and later)
Key: Tcpip\Parameters
Value Type: REG_DWORD - Time in seconds
Valid Range: 30-300 (decimal)
Default: 0xF0 (240 decimal)
Description: This parameter determines the length of time that a connection will stay in the TIME_WAIT state when being closed. While a connection is in the TIME_WAIT state, the socket pair
cannot be re- used. This is also known as the "2MSL" state, as by RFC the value should be twice
the maximum segment lifetime on the network. See RFC793 for further details.
详细可参考MicorSoft上的说明
阅读(1709) | 评论(0) | 转发(0) |