소소한 일상에서 책읽기 중

[OTN] EXPLANATION ABOUT LOG FILE OF LISTENER 본문

DB까다롭다

[OTN] EXPLANATION ABOUT LOG FILE OF LISTENER

다솜여우 2012. 1. 3. 17:47
EXPLANATION ABOUT LOG FILE OF LISTENER
게시일: 2007. 2. 5 오후 8:44
       
제품 : SQL*NET

작성날짜 : 2002-11-24

EXPLANATION ABOUT LOG FILE OF LISTENER
======================================

PURPOSE


이 글은 고객이 listener를 사용하는 중에 어떠한 문제를 발견했을 때,
listener의 log file에서 얻을 수 있는 정보가 어떠한 것들이 있는지
설명합니다.

Oracle의 Networking software는 Oracle 7.x에서는 SQL*Net, Oracle 8.x에
서는 Net 8.x, 그리고 Oracle 9.x에서는 Net Services라는 이름으로 불리고
있습니다. 편의상 여기서는 모두 Oracle Net Client로 부르기로 하겠습니다.

Explanation


Listener의 log file은 다음과 같은 정보를 기록합니다.

1. Listener Log Audit Trail 정보
Oracle Net Client들이 Oracle Database에 대한 connection request들이
모두 기록됩니다. 즉, Client가 언제 어디서 연결 요청을 했는가를 확인
할 수 있습니다.
이들 client 중에는 Oracle Net Client software에 외에도 lsnrctl
(Listener Control) command와 JDBC THIN, 그 외 나머지 Oracle Net Client
를 사용하지 않는 3rd party software까지 포함됩니다.
Client 중에는 널리 사용되는 Pro*C, Pro*CoBOL 등의 Oracle Precompiler
제품을 통하여 작성된 것과, JDBC OCI, ODBC 등을 사용하는 application들
이 있습니다만, 이 들은 모두 Oracle Net Client를 이용하여 통신을 하기
때문에 listener의 log file에는 같은 형식으로 기록됩니다.

TIMESTAMP * CONNECT DATA [* PROTOCOL INFO] * EVENT [* SID] * RETURN CODE

a. lsnrctl command의 경우에는 예를 들어 다음과 같은 형식으로
기록됩니다.
31-AUG-2002 12:04:31 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=stage)(USER=cyo))(COMM AND=status)(ARGUMENTS=64)(SERVICE=LISTENER)(VERSION=135295488)) * status * 0
지난 2002년 8월 31일 12시 4분 31초에 stage라는 이름에 host에서 cyo라는
user가 status command를 실행하였으며 결과는 0 (Sucess)이었습니다.

b. JDBC THIN driver의 경우에는 예를 들어 다음과 같은 형식으로
기록됩니다.
31-AUG-2002 14:53:08 * (CONNECT_DATA=(SID=D817)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=129.200.9.1)(PORT=32887)) * establish * D817 * 0
2002년 8월 31일 14시 53분 8초에 host 129.200.9.1에서 32887을 사용하는
JDBC THIN client가 D817이라는 SID를 이용하여 연결을 요청하였습니다.

c. 나머지 Oracle Net Client가 사용되는 경우에는 예를 들면, 다음과 같은
형식으로 기록됩니다.
24-NOV-2002 06:48:29 * (CONNECT_DATA=(SERVICE_NAME=D817.database)(SID=D817)(CID=(PROGRAM=)(HOST=stage)(USER=cyo))) * (ADDRESS=(PROTOCOL=tcp)(HOST=129.200.9.1)(PORT=32798)) * establish * D817.database * 0

기록되는 형식은 listener의 version에 따라 다를 수 있으며 각 version의
manual마다 설명이 되어 있습니다.

2. Listener Service Registration Event 정보
이 부분은 다음과 같은 형식으로 기록됩니다.
Timestamp * Event * Instance Name * Return Code

Listener가 하는 일은 Oracle Net Client로 부터 database connection
request를 받으면 client를 Oracle Server의 dedicated server process
(Dedicated Mode)나 dispatcher (MTS to Oracle 8.x, Shared Server Mode
from Oracle 9.x)로 연결시켜주고 다시 다음 connection request를 기다리
는 것입니다.
그렇기 때문에 listener process는 memory에서 차지하는 양이 매우적으며
microprocessor resource도 거의 사용하지 않습니다.
위와 같이 listener가 Oracle Net Client들을 Oracle Server Process들과
연결시켜 주기 위해서 listener의 configuration file에는 주로 다음과
같이 두 가지 정보를 가지고 있습니다.
a. listener가 connection request를 수신할 network address
b. listener가 client를 연결해 줄 database instance에 대한 정보

Oracle 8.0.x까지는 database instance에 대한 정보를 listener.ora file
내에 SID_LIST_<listener name> = 부분에 적어 주었었습니다. 그런데,
Oracle 8.1.x, 즉 Oracle 8i부터는 이 것도 계속 지원이 되나, PMON이
listener에게 instance에 대한 정보를 주기적으로 주는 Dynamic Service
Registration이 지원됩니다.

Dynamic Service Registration에 대해서는 http://metalink.oracle.com  에서
Note:76636.1 Service Registration in Net 8i이나
manual을 보시기 바랍니다.

다음은 service registration의 예입니다.
...
31-AUG-2002 12:08:31 * service_register * D817 * 0
31-AUG-2002 12:08:43 * service_update * D817 * 0
31-AUG-2002 12:08:53 * service_update * D817 * 0
...

3. Listener Direct Hand-Off 정보
Direct Hand-Off는 다음과 같은 형식으로 기록되며
Oracle Net Client가 연결을 요청하고 이 연결을 dispatcher process로
넘겨질 때 기록이 됩니다.
Timestamp * Presentation * Handoff * Error Code

참고로 Oracle 8i까지는 Oracle Net Client가 연결을 요청하고 database
intance가 MTS mode로 실행 중이며 이 연결이 dispatcher process로 연결이
될 때 listener는 client에게 dispatcher의 network address를 알려주면
client는 그 address로 다시 연결을 시도하여 database connection이
이루어 졌었습니다.

Oracle 9i부터는 이 것을 더 효과적으로 처리하기 위하여
Oracle Net Client의 연결 요청이 들어오면 client의 network address를
dispatcher에게 알려주면 dispatcher가 client와 연결을 시도하는 것으로
변경되었습니다. 이는 물론 client쪽과 server쪽 모두 9i일 때 해당됩니다.
위와 같이 listener가 client address를 dispatcher에게 알려주고 나머지
연결작업을 넘겨주는 것을 listener의 hand-off 기능이라고 부릅니다.


Example


1. Listener의 log file의 내용을 봅니다.
a. prompt$ echo $TNS_ADMIN
b. $TNS_ADMIN이 설정되어 있으면, prompt$ cd $TNS_ADMIN
설정되어 있지 않으면, prompt$ cd $ORACLE_HOME/network/admin
c. prompt$ vi listener.ora
...
LOG_FILE_<listener name>=<filename>
LOG_DIRECTORY_<listener name>=<directory>
...
:wq!
prompt$ cd <directory>
prompt$ vi -R <filename>.log 또는 tail -f <filename>.log

Reference Documents


Chapter 17 Trouble shooting Oracle Net Services
Oracle 9i Net Services Administrator's Guide
available http://technet.oracle.com

출처 : https://kr.forums.oracle.com/forums/thread.jspa?messageID=1675473&#1675473