[ORACLE] ORA-12542: TNS:address already in use

 

ORA-12542:
    TNS:address already in use
Cause:
    Specified listener address is already being used.
Action:
    Start your listener with a unique address.

訊息:

ORA-12542: TNS:位址已使用

環境:

Windows Server 2003 + IIS + Oracle Database Server

狀況:

系統執行程式時出現TNS:位址已使用的訊息,但實際上並沒有其它的服務使用1521或1526埠
且此狀況在不做任何處理下就回復正常。

原因:

Oracle Client會透過TNS Client連到Database Server, 而作業系統會為Client連線動態配置連接埠 (MaxUserPort; Default=1024-5000)
而當連線結束時, 此連接埠會保留240秒 (TcpTimedWaitDelay; Default=240)
所以在短時間(240秒)內, 同時系統有大量連線時, 而超過可動態配置的連接埠的話, Windows 會沒有可用的連接埠可用, 因而造成此訊息.

處理:

    1. 增加可用的動態配置連接埠數
      1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 新增機碼
      2. Value Name: MaxUserPort
      3. Data Type: REG_DWORD
      4. Value: 65534
      5. Valid Range: 5000-65534 (decimal)
      6. Default: 0x1388 (5000 decimal)
    2. 減少連線結束時, 此連接埠的保留時間
      1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters新增機碼
      2. Value Name: TcpTimedWaitDelay
      3. Data Type: REG_DWORD
      4. Value: 60
      5. Valid Range: 30-300 (decimal)
      6. Default: 0xF0 (240 decimal)
    3. 減少動態連線的需求

參考資料:

http://forums.oracle.com/forums/thread.jspa?threadID=709714

發表留言