故障排除指南 ORA-3136:WARNING Inbound Connection Timed Out (文檔 ID 2331569.1)
文檔內容
Oracle Net Services - 版本 10.2.0.5 到 12.2.0.1 [發行版 10.2 到 12.2]
適用於:
Oracle Database - Enterprise Edition - 版本 10.2.0.5 到 12.2.0.1 [發行版 10.2 到 12.2]
本文檔所含信息適用於所有平台
用途
在警報日志中看到的“ORA-3136 WARNING inbound connection timed out”的故障排除指南。
在版本 10gR2 RDBMS 中引入的在database和listener上 INBOUND CONNECT TIMEOUT 的默認超時。
Oracle Net 的參數 SQLNET.INBOUND_CONNECT_TIMEOUT 和 INBOUND_CONNECT_TIMEOUT_listener_name 的當前默認值為60秒。
如果任何客戶端無法提供憑證,或者由於任何原因無法在60秒內完成認證過程,則會引發該錯誤
在 alert.log 中:
WARNING: inbound connection timed out (ORA-3136)
排錯步驟
在警告日志中報的“WARNING: inbound connection timed out (ORA-3136)”標識了客戶端無法在參數 SQLNET.INBOUND_CONNECT_TIMEOUT 指定的時間內完成身份驗證過程。
該參數在10gR1被引入,默認值是60秒或1分鍾。
在11gR1及更高版本中,ORA-3136 錯誤通常伴隨有timeout的錯誤,而且可能還包含建立連接使用的客戶端的IP以及客戶端端口號。
例如:
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production
TCP/IP NT Protocol Adapter for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production
Oracle Bequeath NT Protocol Adapter for IBM/AIX RISC System/6000: Version 11.2.0.1.0 - Production
Time: 24-AUG-2017 03:55:01
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS:operation timed out
ns secondary err code: 12606
nt main err code: 0
nt secondary err code: 0
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=10.x.y.z)(PORT=63510)) <--客戶端IP和臨時端口的記錄
WARNING: inbound connection timed out (ORA-3136)
注意當alert日志中提供了客戶端ip地址和臨時端口時,通常可以使用該信息來確定該連接是什么時候被listener所“processed”的,可以在listener的日志中查找這樣一段信息: (HOST=10.x.y.z)(PORT=63510))
下面是該連接在listener 日志中的相關記錄:
24-AUG-2017 03:54:01 * (CONNECT_DATA=(SID=gisprod)(CID=(PROGRAM=E:\Program?Files??x86?\myapp.bin)(HOST=myclient)(USER=myuser))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.x.y.z)(PORT=63510)) * establish
注意listener日志中的timestamp:24-AUG-2017 03:54:01
注意alert日志中的timestamp: Time: 24-AUG-2017 03:55:01
可以清楚的看到該案例中inbound connect timeout 設置為1分鍾,並且該客戶端當時驗證失敗。
該連接正是在數據庫上被終止的1分鍾前在listener上被建立的。
以下是這個錯誤的最可能的原因 -
- 通常該錯誤拋出都是由於客戶端或者應用嘗試使用了錯誤的userid或者密碼來連接。
參考下面的文檔: Note: 793259.1 ORA-1017 May Cause ORA-3136 WARNING : Inbound Connection Timed Out in Alert Log - 服務器收到有效的客戶端連接請求,但客戶端需要很長時間才能進行超過默認60秒的身份驗證。
- 數據庫服務器負載很重,因此無法在指定的超時時間內完成客戶端登錄。
要了解是什么導致了這個問題,可以做下面的檢查
在大多數情況下,數據庫服務器可以在默認值60秒內完成客戶端連接的認證。如果需要更長的時間,則在實施變通方法之前,請檢查以下項目:
1. 檢查數據庫服務器上的本地連接是否可以很快完成。
2. 如果本地連接速度很快,請在網絡管理員的幫助下檢查底層網絡延遲。
3. 檢查你的數據庫性能是否有問題。
4. 檢查警報日志中是否有關於 ORA-600 或 ORA-7445 的嚴重錯誤,並首先解決它們。這些嚴重錯誤可能會引發數據庫服務器的緩慢。
使用下面指導步驟來設置這些參數的值使其高於默認的60秒:
編輯服務器端的 sqlnet.ora文件並添加該參數。需要注意的是RAC環境中,數據庫參考的sqlnet.ora文件是在它自己的home下,並不在listener運行的Grid下。
說白了,添加下面的這行命令到$RDBMS_HOME/network/admin目錄下的sqlnet.ora文件:
SQLNET.INBOUND_CONNECT_TIMEOUT=<n> 其中<n>的單位是秒。
例如:
改完之后,既不需要重啟listener也不需要重啟數據庫,除非數據庫是運行在shared server 模式下。
下一個dedicated server 進程spawn 的時候將獲得新設置的值。
檢查數據庫服務器 SQLNET.INBOUND_CONNECT_TIMEOUT 是否處於生效狀態:
例如:
a. 對於 Dedicated server,啟用 support 級別 sqlnet trace 將顯示超時值,如下所示:
niotns: Not enabling dead connection detection.
niotns: listener bequeathed shadow coming to life...
b. 對於共享服務器設置,
$ telnet <數據庫服務器 IP> <調度器端口>
示例:
telnet 會話應在120秒后斷開連接,這表明 sqlnet.inbound_connect_timeout 處於生效狀態。
如果您對此問題還有其他問題,請在 My Oracle Support 中創建一個服務請求,並提供以下信息:
a. 在 support 級別生成客戶端和匹配的服務器跟蹤信息。
Note 395525.1 How to Enable Oracle Net Client,Server,Listener,Kerberos and External procedure Tracing from Net Manager (netmgr):
Note 374116.1 How to Match Oracle Net Client and Server Trace Files
b. 從數據庫服務器上傳 sqlnet.ora,listener.ora Sqlnet.log,&Alert_ <sid> .log
參考
NOTE:395525.1 - How to Enable Oracle SQL*Net Client , Server , Listener , Kerberos and External procedure Tracing from Net Manager
NOTE:730066.1 - Troubleshooting ORA-3136 Connection Timeouts Errors - Database Diagnostics
NOTE:345197.1 - Connections that Used to Work in Oracle 10gR1 Now Intermittently Fail with ORA-3113,ORA-3106 or ORA-3136 from 10.2 Onwards
NOTE:374116.1 - How to Match Oracle Net Client and Server Trace Files