TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-16 |
제목 | KEEPALIVE 에 대하여(SQLNET.EXPIRE_TIME) | ||
---|---|---|---|
KeepAlive 란 Idle TCP/IP Connection 의 Time out 기능을 말한다.
TCP/IP 기반으로 remote 로 연결된 상태에서 클라이언트의 갑작스런 리부팅이나 스위치 Off 의 경우 해당 연결을 서버에서 Closing 하지 못하게 된다. 이것은 TCP/IP의 제한인 것이지 오라클의 문제가 아니다. 이 때 KeepAlive가 정확하게 configure되어 있다면 좀 더 빨리 Dead connection 을 발견하고 빨리 Closing할 것이다. TCP/IP 에 관련된 것이므로 KeepAlive를 각 플랫폼 별로 지정하는 방법이 모두 틀리다. 예를들면 유저가 PC 에서 Unix Oracle Server로 연결 후 실수로 다음 쿼리 문을 실행했다. SQL> select * from bigtable, hugetable, massivetable; 적게는 수십분, 많게는 몇시간이 걸릴 작업이라면 유저는 쿼리를 인터럽트하기 보다 reset 버튼을 누르게 될 것이다. 이때 클라이언트 프로세스는 없어졌지만 백그라운드 서버 프로세스는 계속 running 중일것이다. 이런 현상은 수시로 일어날 수 있다. 또한 당연한 것이다. 유저가 사용을 잘못하는 것이기 때문이다. 하지만 SQL*NET 2.1 이상에서 Dead-Connection-Detection 이라 불리는 기능을 지원한다. 이것은 곧 KeepAlive 를 지정할 수 있는 기능이다. 반드시 서버 사이드의 $ORACLE_HOME/network/admin/sqlnet.ora 파일에 다음의 파라미터를 지정해야 한다. 클라이언트에는 지정해봐야 전혀 소용이 없다. sqlnet.expire_time = 1 (단위는 분) Netware를 제외한 모든 Platform, Protocol에서 지원이 된다. # Windows NT 에서 KeepAlive 를 지정하는 방법. (타 플랫폼은 제외) Regedt32 를 실행한다. 레지스트리에서 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters 까지 이동한다. 여기서 키 추가가 아닌 값 추가를 한다. 파라미터는 KeepAliveTime (REG_DWORD) 로 입력한다. 값은 Decimal -> 180000 (for example = 3 minutes) 으로 지정한다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |