程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> INBOUND_CONNECT_TIMEOUT與SQLNET.INBOUND_CONNECT_TIMEOUT小結,sqlnet.sendtimeout

INBOUND_CONNECT_TIMEOUT與SQLNET.INBOUND_CONNECT_TIMEOUT小結,sqlnet.sendtimeout

編輯:Oracle教程

INBOUND_CONNECT_TIMEOUT與SQLNET.INBOUND_CONNECT_TIMEOUT小結,sqlnet.sendtimeout


   關於sqlnet.ora的參數SQLNET.INBOUND_CONNECT_TIMEOUT,它表示等待用戶認證超時的時間,單位是秒,缺省值是60秒,如果用戶認證超時了,服務器日志alert.log顯示出錯信息"WARNING: inbound connection timed out (ORA-3136)",sqlnet.log裡面出現TNS-12535: TNS:operation timed out錯誤信息。

   關於listener.ora的參數inbound_connect_timeout_監聽器名,它表示等待用戶連接請求超時的時間,單位是秒,缺省值是60秒,如果連接請求超時了,監聽器日志listener.log顯示出錯信息"TNS-12525: TNS:listener has not received client's request in time allowed"。

   其中sqlnet.ora裡面的參數為SQLNET.INBOUND_CONNECT_TIMEOUT, listener.ora裡面的參數設置為INBOUND_CONNECT_TIMEOUT_listener_name ,其中根據監聽名字來替換listener_name。官方文檔關於兩者的介紹如下所示:

 

SQLNET.INBOUND_CONNECT_TIMEOUT parameter in sqlnet.ora on the database server

Specify the time, in seconds, for a client to connect with the database server and provide the necessary authentication information. If the client fails to establish a connection and complete authentication in the time specified, then the database server terminates the connection. In addition, the database server logs the IP address of the client and an ORA-12170: TNS:Connect timeout occurred error message to the sqlnet.log file. The client receives either an ORA-12547: TNS:lost contact or an ORA-12637: Packet receive failed error message.

INBOUND_CONNECT_TIMEOUT_listener_name in listener.ora

Specify the time, in seconds, for the client to complete its connect request to the listener after the network connection had been established.

If the listener does not receive the client request in the time specified, then it terminates the connection. In addition, the listener logs the IP address of the client and an ORA-12525: TNS:listener has not received client’s request in time allowed error message to the listener.log file

 

查看inbound_connect_timeout值

1:查看SQLNET.INBOUND_CONNECT_TIMEOUT的設置值,一般進入$ORACLE_HOME/network/admin下,查看sqlnet.ora參數文件即可。

2:查看監聽INBOUND_CONNECT_TIMEOUT參數,可以查看listener.ora參數文件。但是有時候,例如默認情況,參數文件裡面沒有設置這個參數,或是有些動態監聽沒有配置listener.ora,那麼可以使用lsnrctl命令查看,如下所示:

LSNRCTL> show
The following operations are available after show
An asterisk (*) denotes a modifier or extended command:
 
rawmode                     displaymode                 
rules                       trc_file                    
trc_directory               trc_level                   
log_file                    log_directory               
log_status                  current_listener            
inbound_connect_timeout     startup_waittime            
snmp_visible                save_config_on_stop         
dynamic_registration        
 
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER parameter "inbound_connect_timeout" set to 60
The command completed successfully
LSNRCTL> 

 

設置SQLNET.INBOUND_CONNECT_TIMEOUT值

我們首先設置SQLNET.INBOUND_CONNECT_TIMEOUT為30秒,這個參數修改後立即生效,不需要做任何其它操作。

[oracle@DB-Server admin]$ vi sqlnet.ora
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/10.2.0/db_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.
 
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.INBOUND_CONNECT_TIMEOUT=30
 
 
C:\Users>sqlplus /@mytest
 
SQL*Plus: Release 11.2.0.1.0 Production on 星期日 2月 28 10:57:09 2016
 
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
 
ERROR:
ORA-01017: invalid username/password; logon denied
 
 
請輸入用戶名:

 

當30秒後,此時,在sqlnet.log裡面就能看到新增了一條關於TNS-12535的錯誤記錄,其中10.20.34.14是我客戶端的IP地址。

 

告警日志裡面你會看到WARNING: inbound connection timed out (ORA-3136)錯誤。有意思的是,監聽日志裡面你不會看到任何錯誤信息。(可以用了對比這兩個參數的區別)

 

設置INBOUND_CONNECT_TIMEOUT_listener_name的值

這個參數可以通過lsnrctl命令設置,如下所示,當然最簡單的還是設置listener.ora參數文件。這個參數也是立即生效,不需要重啟監聽。

LSNRCTL> show inbound_connect_timeout
NL-00853: undefined show command "inbound_connect—meout".  Try "help show"
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER parameter "inbound_connect_timeout" set to 60
The command completed successfully
LSNRCTL> set inbound_connect_timeout 20
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER parameter "inbound_connect_timeout" set to 20
The command completed successfully
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER parameter "inbound_connect_timeout" set to 20
The command completed successfully
LSNRCTL> 

此時我們用telnet來模擬用戶連接請求超時的時間,如下所示,當超過20秒,就會自動退出

[root@test ~]# time telnet 192.168.9.124 1521
Trying 192.168.9.124...
Connected to 192.168.9.124 (192.168.9.124).
Escape character is '^]'.
Connection closed by foreign host.
 
real    0m20.019s
user    0m0.001s
sys     0m0.003s

此時在listener.log裡面,你就能看到TNS-12525的錯誤,如下所示

28-FEB-2016 11:32:20 * <unknown connect data> * (ADDRESS=(PROTOCOL=tcp)(HOST=10.20.34.14)(PORT=38051)) * establish * <unknown sid> * 12525
 
TNS-12525: TNS:listener has not received client's request in time allowed
 
TNS-12535: TNS:operation timed out
 
TNS-12606: TNS: Application timeout occurred

注意:set inbound_connect_timeout只對當前環境生效,如果重啟監聽服務,則會失效,如下所示

LSNRCTL> set inbound_connect_timeout 18
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER parameter "inbound_connect_timeout" set to 18
The command completed successfully
LSNRCTL> reload
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
The command completed successfully
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
LISTENER parameter "inbound_connect_timeout" set to 60
The command completed successfully

此時需要使用命令set save_config_on_stop on保存配置信息,使其永遠生效。但是我測試發現,動態監聽也無法使用set save_config_on_stop on保存配置信息,需要修改配置文件(注意,修改listener.ora,需要重啟監聽使之生效)。如下所示

 

關於兩者之間的關系,一般INBOUND_CONNECT_TIMEOUT_listener_name的值應該低於SQLNET.INBOUND_CONNECT_TIMEOUT的值,官方文檔介紹如下,

When specifying values for these parameters, consider the following

recommendations:

Set both parameters to an initial low value.

Set the value of the INBOUND_CONNECT_TIMEOUT_listener_name parameter to a lower value than the SQLNET.INBOUND_CONNECT_TIMEOUT parameter.

For example, you can set INBOUND_CONNECT_TIMEOUT_listener_name to 2 seconds and INBOUND_CONNECT_TIMEOUT parameter to 3 seconds. If clients are unable to complete connections within the specified time due to system or network delays that are normal for the particular environment, then increment the time as needed.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved