반응형
   http://iotn.co.kr/power/zboard.php?id=9_1_bbs&no=939
최길호 2008-07-04 14:58:56, 조회 : 2,514

출처: http://forums.oracle.com/forums/thread.jspa?messageID=1612957&tstart=0

"WARNING: inbound connection timed out (ORA-3136)"은 client에서 Oracle에 접속시 
SQLNET.INBOUND_CONNECT_TIMEOUT에 기술된 시간에 인증을 받을수 없는 경우에 발생 합니다.

SQLNET.INBOUND_CONNECT_TIMEOUT은 기본적인 값이 60 SEC 이며 정의된 시간에 인증이 않되면
alert log file에 "WARNING: inbound connection timed out (ORA-3136)"를 발생 합니다.

AIX Oracle 10.2.0.2 

alert.log
=================================================
WARNING: inbound connection timed out (ORA-3136)

조치
=================================================
$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.INBOUND_CONNECT_TIMEOUT=0

or

lsnrctl
===================================================================================
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Linux4U2_DB)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 60        <<<< 60 sec
The command completed successfully

LSNRCTL> set inbound_connect_timeout 0
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Linux4U2_DB)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 0        <<<< Change Value
The command completed successfully

test
===================================================================================
Linux env not exist sqlnet.ora file
[Linux4U2_DB :/home/gh]$ ls $ORACLE_HOME/network/admin/sqlnet.ora
ls: /oracle/product/10.2/network/admin/sqlnet.ora: No such file or directory

LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Linux4U2_DB)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 0
The command completed successfully

LSNRCTL> set inbound_connect_timeout 60
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Linux4U2_DB)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 60
The command completed successfully

LSNRCTL> stop
LSNRCTL> start
LSNRCTL> show inbound_connect_timeout
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=Linux4U2_DB)(PORT=1521)))
LISTENER parameter "inbound_connect_timeout" set to 0
The command completed successfully

inbound_connect_timeout = 0 [ default ]


최길호
oracle 10.2 

LISTENER parameter "inbound_connect_timeout" set to 10 
telnet loclhost 1521 
[10초 경과] 
Connection closed by foreign host. 

listener.log 
======================================================================= 
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
반응형
반응형

PRODBA 카페의 [용돌이]님이 작성하신 글입니다.

http://cafe.naver.com/prodba/11505


처음 ORA-3136을 접했을때 생각해봤던 건데 도움이 될까 해서 정리해서 올립니다.

 

10g가 되면서 inbound_connect_timeout 이 60초로 바뀌게 되었고 그로 인해서 가끔씩 alert에 제목과 같은

 

메지시가 나오곤 합니다.

 

우선 ORA-3136이 발생되는 경우를 살펴보면

 

CASE 1

 

WIPPY@/oracle> sqlplus /@rac1
SQL*Plus: Release 10.2.0.4.0 - Production on Wed Jan 7 13:33:27 2009
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
ERROR:
ORA-01017: invalid username/password; logon denied
Enter user-name:

 

이상태에서 타이핑 없이 대기를 하게되면 60초 후에 alert log에 ORA-3136 이 떨어지게 됩니다.

 

그렇다면 그 60초 동안 어떤일이 발생하는가?

 

1. ps -ef|grep LOCAL=NO 로 확인해 보면 process가 하나 늘어나 있는 것을 볼 수 있습니다.

 

2. v$process 나 v$resource_limit를 보면 process가 하나 늘어나 있는 것을 볼 수 있습니다.

 

위를 통해서 60초를 강제로 설정해 놓은 이유를 알 수 있습니다.

 

누군가 악의적인 목적으로 저런식의 접속을 한다음 끊지 않으면 설정해 놓은 process개수를 다 채워버리게 되고

 

정상적인 connection이 처리되지 못하는 문제가 있겠죠. 따라서 60초를 주기로 oracle에서는 저런 process를 강제로

 

죽이는 것입니다.

 

ORA-3136을 발생시키지는 않지만 유사한 경우가 있습니다.

 

CASE 2

 

WIPPY@/oracle> telnet 192.168.0.11 1521
Trying 192.168.0.11...
Connected to 192.168.0.11 (192.168.0.11).
Escape character is '^]'.

 

위와 같이 했을 경우에는 다음과 같은 현상이 나타나게 됩니다.

 

1. ps -ef|grep LOCAL=NO 로 확인해 보면 process하나 늘어나 있는 것을 볼 수 있습니다.

 

2. v$process 나 v$resource_limit를 보면 변화가 없습니다.

 

즉 OS상에서는 process가 뜨지만 oracle의 view에는 반영이 되지 않는 상황입니다.

 

이러한 상황도 system resource를 사용하는 것이기 때문에 그다지 좋은 상황은 아니겠죠.

 

 

위에 유사한 두가지 CASE에 대해서 설명을 했는데 ORA-3136 에 대해서 좀 찾아보신 분들은 알겠지만 이 메세지를 안나오게

 

하기위해서는 sqlnet.ora 에 SQLNET.INBOUND_CONNECT_TIMEOUT = 0 설정을 하거나 listener.ora에

 

INBOUND_CONNECT_TIMEOUT_<listener_name> = 0 을 설정하라고 합니다.

 

제가 테스트 해본 결과에 의하면

 

sqlnet.ora - SQLNET.INBOUND_CONNECT_TIMEOUT = 0 : sqlplus /@RAC1 에만 영향을 줍니다.

listener.ora - INBOUND_CONNECT_TIMEOUT_<listener_name> = 0  : telnet 192.168.0.11 1521 에만 영향을 줍니다.

 

즉 APP의 접속 형태에 따라 sqlner.ora와 listener.ora를 취사선택하거나 둘다 설정을 해야할 필요성이 있는 것입니다.

 

 

INBOUND_CONNECT_TIMEOUT을 설정할때는 위와 같은 내용을 인지하고 설정을 하셔야 할것으로 생각됩니다.

 

무작정 ERROR를 보이지 않게 하기 위해서 설정을 한다면 보안상 심각한 문제를 야기할 수도 있으니까요.

 

즉 ORA-3136이 발생하게 되면 connection이 늦게 처리되는 APP에 대해서 먼저 확인하고 60초 안에 접속이 이루어 지도록

 

APP단의 수정을 해야 하는 것이 우선이라고 생각합니다.

 

## 10.2.0.4 linux에서 테스트한 결과 입니다. 버전에 따라 차이가 있을 수 있음을 .. 이해하시길..


---------------------------------------------------------------------------------

나의 의견 : alert file에 ora-3136이 떴을때 웬지 모를 불안감이 생겼었지만.. 

이 에러에 대해서 조금 알고나니..

유용한 에러라 생각되어집니다. 

inbound_connect_timeout을 유용하게 사용할 수 있을 것 같습니다.


반응형

+ Recent posts