Alert 日志報錯: Wed May 22 18:02:47 2019 *********************************************************************** Fatal NI connect error 12170. VERSION INFORMATION: TNS for Linux: Version 11.2.0.4.0 - Production Oracle Bequeath NT Protocol Adapter for Linux: Version 11.2.0.4.0 - Production TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.4.0 - Production Time: 22-MAY-2019 18:02:47 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.171.32.9)(PORT=44186)) WARNING: inbound connection timed out (ORA-3136)
處理方案
文檔 ID 2331569.1
引入此超時限制是為了抵御惡意客戶端嘗試使用無效證書的連接請求來攻擊數據庫服務器的情形。
以下是這個錯誤的最可能的原因
1.通常該錯誤拋出都是由於客戶端或者應用嘗試使用了錯誤的userid或者密碼來連接。參考下面的文檔: Note: 793259.1 ORA-1017 May Cause ORA-3136 WARNING : Inbound Connection Timed Out in Alert Log
2.服務器收到有效的客戶端連接請求,但客戶端需要很長時間才能進行超過默認60秒的身份驗證。
3.數據庫服務器負載很重,因此無法在指定的超時時間內完成客戶端登錄。
要了解是什么導致了這個問題,可以做下面的檢查
在大多數情況下,數據庫服務器可以在默認值60秒內完成客戶端連接的認證。如果需要更長的時間,則在實施變通方法之前,請檢查以下項目
1.檢查數據庫服務器上的本地連接是否可以很快完成。
2.如果本地連接速度很快,請在網絡管理員的幫助下檢查底層網絡延遲。
3.檢查你的數據庫性能是否有問題。
4.檢查警報日志中是否有關於 ORA-600 或 ORA-7445 的嚴重錯誤,並首先解決它們。這些嚴重錯誤可能會引發數據庫服務器的緩慢。
使用下面指導步驟來設置這些參數的值使其高於默認的60秒
修改$RDBMS/network/admin/sqlnet.ora 文件(不是GIHome)
添加:
SQLNET.INBOUND_CONNECT_TIMEOUT = 120
不需要重啟監聽。
通過檢查監聽trace 確認是否生效。
lsnrctl trace support --啟用trace
lsnrctl trace off --關閉trace
niotns: Enabling CTO, value=120000 (milliseconds) <== 120 seconds
niotns: Not enabling dead connection detection.
niotns: listener bequeathed shadow coming to life...
我的方法
我的數據庫為 11.2.0.4.0 單機,經測試以上方法沒生效。自己整理處理方法如下:
1.優化SQL 降低壓力
2.修改inbound_connect_timeout=120
操作
執行以下操作,不需要重啟監聽
lsnrctl set inbound_connect_timeout 120 lsnrctl save_config
參數保存到了listener.ora
檢查是否生效
打開監聽trace
lsnrctl trace support cat /u01/app/oracle/diag/tnslsnr/oracle/listener/trace/ora_xxx.trc | grep mill
2019-05-23 15:56:52.729683 : nstoSetupTimeout:ATO enabled for ctx=0x0x14c3850, val=60000(millisecs) 2019-05-23 15:56:52.732543 : nstoSetupTimeout:ATO enabled for ctx=0x0x14c3850, val=60000(millisecs) --修改120前,默認60s 2019-05-23 15:58:26.076381 : nstoSetupTimeout:ATO enabled for ctx=0x0x14c6c20, val=120000(millisecs) --修改為120后 2019-05-23 15:58:26.079273 : nstoSetupTimeout:ATO enabled for ctx=0x0x14c6c20, val=120000(millisecs)
確認成功關閉trace
lsnrctl trace off
回滾操作
如果需要修改回60,執行:
lsnrctl set inbound_connect_timeout 60 lsnrctl save_config
悲劇
悲劇的是仍然不能解決問題,哈哈!
關閉監聽ADR
參考:https://www.cndba.cn/dave/article/1942vi $RDBMS/network/admin/listener.ora
DIAG_ADR_ENABLED_LISTENER=OFFINBOUND_CONNECT_TIMEOUT_LISTENER=180 #如果listener名字為LISTENER2,修改為DIAG_ADR_ENABLED_LISTENER2
vi $ORACLE_HOME/network/admin/sqlnet.ora
DIAG_ADR_ENABLED=OFFSQLNET.INBOUND_CONNECT_TIMEOUT=180
重啟監聽
lsnrctl stop;lsnrctl start