ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于客户端报的ORA-12542

关于客户端报的ORA-12542

原创 Linux操作系统 作者:流浪人生 时间:2009-06-24 09:28:13 0 删除 编辑

      最近用户一个小应用系统总是出故障,windows的系统上跑一个VB写的小客户端程序,出现问题的时候,系统会弹出以下信息:
      [Microsoft] [ODBC driver for oracle] ORA-12542:TNS:address already in use

      查询了oracle的错误代码: oerr ora 12542
      12542,00000,"TNS:address already in use"
       // *Cause: Speified listener address is already being used.
       // *Action: Start your listener with a unique address.

       这个显然是不能说明问题的,这个应该是针对服务器启动listener时的报错的解释

        由于无权查看服务器,只好到metalink上查了一下,看看大家都是什么情况下碰到的,还好查到了一个文章,很适合用来解释我们的这个问题

        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.


        方法提交给了开发人员,看看情况

       下午去看了一下机器,发现大量 time_wait的连接,查了一下listener的日志,应用程序大量开连接,关闭不及时

        看来本次的诊断是对症的,修改的注册表,看看情况

        ps:俩天了,系统还没出过问题,看来对症了

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3326/viewspace-607363/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-11

  • 博文量
    17
  • 访问量
    50981