11gr2 alert日志中報TNS-12535 TNS-00505原因及解決方法
前面新裝了11GR2 RAC,某天在做巡檢的時候發(fā)現(xiàn)alert日志中存在如下報錯:
Fatal NI connect error 12170.
VERSION INFORMATION:
TNS for Solaris: Version 11.2.0.3.0 - Production
Oracle Bequeath NT Protocol Adapter for Solaris: Version 11.2.0.3.0 - Production
TCP/IP NT Protocol Adapter for Solaris: Version 11.2.0.3.0 - Production
Time: 16-MAY-2013 04:57:41
Tracing not turned on.
Tns error struct:
ns main err code: 12535
TNS-12535: TNS:operation timed out
ns secondary err code: 12560
nt main err code: 505
TNS-00505: Operation timed out
nt secondary err code: 145
nt OS err code: 0
Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=171.17.108.18)(PORT=55532))
Thu May 16 04:58:27 2013
觸發(fā)原因:
是由于程序異常斷開導致超時,11g R1如果出現(xiàn)如上的錯誤信息會寫入到sqlnet.log,11g R2會寫入到alert.log,
其實出現(xiàn)此錯誤是正常的現(xiàn)象。
如果從深層次分析為什么出現(xiàn)這些錯誤,詳細如下:
一個客戶端連接整個步驟:
1、客戶端發(fā)起一個connection連接監(jiān)聽
2、監(jiān)聽啟動一個專屬進程(
服務器進程,也就是我們通常說的LOCA=NO進程)用于接收這個connection
3、在專屬進程啟動之后,監(jiān)聽會將這個connection傳遞給這個專屬進程
4、專屬進程通過這個connection來跟客戶端握手
5、專屬進程跟客戶端信息交換需要建立一個session
6、session打開
當在以上的第3步到第4步時客戶端關閉,所以當專屬進程嘗試跟客戶端聯(lián)系時發(fā)現(xiàn)連接已關閉時,就會報出我們看到的錯誤!!
如果不想讓這些信息打印在alert日志中,設置如下:
在sqlnet.ora設置
DIAG_ADR_ENABLED = OFF
在listener.ora設置
DIAG_ADR_ENABLED_<listenername> = OFF
重啟監(jiān)聽