2013. 2. 8. 10:47

[Oracle] Session Timeout

SQL> SELECT PROFILE, LIMIT FROM DBA_PROFILES WHERE RESOURCE_NAME = 'IDLE_TIME';

PROFILE                        LIMIT
------------------------------ ----------------------------------------
DEFAULT                        UNLIMITED

 

 

SQL> SELECT PROFILE FROM DBA_USERS WHERE USERNAME = USER;

PROFILE
------------------------------
DEFAULT

 

 

sqlnet.ora에도 timeout 설정하는 부분 있습니다. 그건 network단으로 idle time 조정하는 것입니다.


sqlnet.expire_time = 3   (단위 : 분)

 

 

'Database / Sql' 카테고리의 다른 글

[MSSQL] LOCK 확인 및 처리 방법  (0) 2013.03.05
[Oracle] ROLLUP, GROUPING SETS  (0) 2013.02.13
[Oracle] Session Timeout  (0) 2013.02.08
[Oracle] 테이블 하나만 복원하기  (0) 2013.02.07
[Oracle] SID와 Service Name의 차이  (0) 2013.01.25
[Oracle] ROWID 구성  (0) 2013.01.03
Trackback 0 Comment 0
2010. 3. 22. 18:37

[Oracle] sqlnet.ora

Sqlnet.ora 파일은 클라이언트가 오라클 서버로 어떻게 접속할 것인가를 설정하는 파일입니다.

- 파일 위치 : %ORACLE_HOME%\NETWORK\ADMIN

- Sqlnet.ora 파일 내의 NAMES.DIRECTORY_PATH 파라미터는 오라클 클라이언트가 데이터베이스 접속 시 별칭(String name alias)의   확인하는 순서를 지정 합니다.  (TNSNAMES(로컬네임서버), ONAMES(오라클네임서버), HOSTNAME(호트스네임서버)) ->TNSNAMES(로컬네임서버) : tnsnames.ora 파일의 정보를 이용

  Ex) NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

예를 들어 다음과 같이 입력할때
sqlplus scott/tiger@aaa

SQL*Plus 유틸리티는 sqlnet.ora 파일의 NAMES.DIRECTORY_PATH 항목을 이용하여 aaa Alias에 대한 해석을 하게 됩니다.
먼저 클라이언트는 tnsnames.ora 파일을 사용하여 오라클의 이름(Alias)에 해당 하는 데이터베이스가 어디에 있는 건지 확인합니다.
만약 tnsnames.ora 파일에 이름이 없다면, 클라이언트는 오라클 이름 서버(Oracle Names server)를 사용하여 Alias를 해석 할려고 하며
현재 오라클 이름 서버 대신에 LDAP(Lightweight Directory Access Protocol)의 사용을 권장한다.
마지막으로 클라이언트는 DNS나 네트워크 정보 서비스(NIS)와 같은 호스트 이름 풀이 방법을 통해 이름 해석을 시도 합니다.

- Sqlnet.ora 파일내의 SQLNET.AUTHENTICATION_SERVICES 파라미터는 클라이언트가 오라클 서버로 접속할 때, 오라클이 어떠한 인증 서비스를 사용할 것인가를 나타 냅니다. 기본적으로 오라클 9i와 오라클 8i는 다음과 같은 설정으로 윈도우 인증이 가능하다.  (NTS: 윈도우인증, NONE:일반)

  Ex) SQLNET.AUTHENTICATION_SERVICES= (NTS)

오라클 계정 접속과 윈도우 인증 방식 모두 지원하려면, 서버의 Sqlnet.ora 파일내의 SQLNET.AUTHENTICATION_SERVICES  파라미터를 다음과 같이 수정 합니다.

SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)

만약 인증모드를 NONE으로 설정하면 sys 계정으로 로그인 시 반드시 암호를 입력해야 합니다. 즉 sqlplus /nolog -> SQL> connect / as sysdba; 라고 접속이 불가능합니다. 이는 보안상 일종의 접근제어에 해당된다고 할 수 있겠죠.

- AUTOMATIC_IPC = ON

AUTOMATIC_IPC = { ON | OFF }
위 parameter는 "SQLNET.ORA"파일에 설정할 수 있으며 ON으로 되어 있는경우 SQL*Net이 같은 alias정보를 가진 local database가 있는지 check하게 됩니다. 만일 local database가 있다면 connection은 network layer를 건너뛰고 local -Inter Process Communication(IPC)- connection을 맺게 됩니다. 따라서 이 setting은 database server쪽에 사용할 수 있는 것이지 client machine SQL*Net에는 아무 쓸모 없습니다. database server쪽에 사용하더라도 local database에 SQL*Net connection이 반드시 필요한 경우가 아니라면 사용하시 않는 것(OFF로 설정) 이 좋습니다.

- TRACE_LEVEL_CLIENT = OFF

client쪽에 trace 설정 방법입니다. client쪽 sqlnet.ora file에 다음을 setting하면 됩니다.

TRACE_LEVEL_CLIENT = 0
TRACE_DIRECTORY_CLIENT = $ORACLE_HOME/network/trace (UNIX)
TRACE_FILE_CLIENT = client

그리고 sqlplus로 접속해 보시면 에러가 나시면서 $ORACLE_HOME/network/trace 에 client.trc 파일이 생길 것입니다.

server쪽에 trace 설정 방법입니다. server쪽 sqlnet.ora file에 다음을 setting하고 listener를 다시 시작 합니다.

UNIX일 경우
TRACE_LEVEL_SERVER = 0
TRACE_DIRECTORY_SERVER = $ORACLE_HOME/network/trace
TRACE_FILE_SERVER = SERVER

윈도우일 경우
TRACE_LEVEL_SERVER = 0
TRACE_DIRECTORY_SERVER = C:\app\Administrator\product\11.1.0\db_1\NETWORK\ADMIN
TRACE_FILE_SERVER = SERVER

그리고 sqlplus로 접속해 보시면 에러가 나시면서 $ORACLE_HOME/network/trace 에 client.trc 파일이 생길 것입니다.

- NAMES.DEFAULT_DOMAIN = WORLD

- NAME.DEFAULT_ZONE = WORLD

- SQLNET.EXPIRE_TIME = 0

  Netware를 제외한 모든 Platform, Protocol에서 지원이 된다.

# Windows NT 에서 KeepAlive 를 지정하는 방법(타 플랫폼은 제외)
Regedt32 를 실행한다. 레지스트리에서 HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters까지
이동한다. 여기서 키 추가가 아닌 값 추가를 한다. 파라미터는  KeepAliveTime (REG_DWORD) 로 입력한다.
값은 Decimal  -> 180000 (for example = 3 minutes) 으로 지정한다.

- TCP.NODELAY=YES 

이 parameter "network\admin" (oracle8의 경우 "NET80\ADMIN") directory에 있는 "PROTOCOL.ORA"라는 파일에 추가한다.  

대부분의 경우 TCP/IP 정보는 network을 통하여 최소한 하나의 완전한 packet이 구성될 때가지 버퍼링이 된 후 보낸다.  
즉, 이 의미는 어떤 경우의 명령어들은 직접 발행이 되지 않고 TCP/IP 정보를 보낼 수 있을 때까지 버퍼링이 유지된다. 이는 잠재적으로
timeouts 또는  에러를 유발할 수 있다.  이러한 에러를 피할 수 있도록 TCP.NODELAY를 이용하여 OFF를 시키면 된다.

tcp.nodelay = yes

Trackback 0 Comment 0