행위

"오라클 Listener (리스너)"의 두 판 사이의 차이

DB CAFE

124번째 줄: 124번째 줄:
 
</source>
 
</source>
  
{{리스너 로그 정리}}
+
{{:리스너 로그 정리}}
 
[[Category:oracle]]
 
[[Category:oracle]]

2021년 2월 3일 (수) 17:37 판

thumb_up 추천메뉴 바로가기


1 Listener 리스너[편집]

  • 리스너 설정 파일 위치 : $ORACLE_HOME/network/admin/listener.ora

1.1 시작[편집]

$ lsnrctl start [리스너명]
  • 리스너명 제외시 default 리스너인 LISTENER라는 명칭의 리스너 실행.

1.2 정지[편집]

$ lsnrctl stop [리스너명]

1.3 상태[편집]

$ lsnrctl status [리스너명]

1.4 리스너 등록 방법[편집]

1.4.1 정적등록 VS 동적 등록[편집]

정적 등록과 동적 등록의 가장 큰 차이는 Oracle Instance가 리스너를 자동으로 인식 하느냐 못하느냐의 차이.

  1. 정적 등록은 listener.ora파일에 직접 서비스를 등록해주는 것.
  2. 동적 등록은 PMON이라는 프로세스가 LREG프로세스를 통해 리스너에 등록 가능한 서비스를 자동으로 등록해주는 것.

1. $ORACLE_HOME/network/admin/listener.ora 파일 내용 확인

LISTENER =
 (DESCRIPTION_LIST =
  (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 1521))
  )
 )

LISTENER1 =
 (DESCRIPTION =
  (ADDRESS = (PROTOCOL = TCP)(HOST = 11.22.33.44)(PORT = 1522))
 )

SID_LIST_LISTENER1 =
 (SID_LIST =
  (SID_DESC =
   (GLOBAL_DBNAME = newdb)
   (ORACLE_HOME = /opt/oracle/app/product/11.2.0/dbhome_1)
   (SID_NAME = newdb)
  )
  (SID_DESC =
   (GLOBAL_DBNAME = PROD)
   (ORACLE_HOME = /opt/oracle/app/product/11.2.0/dbhome_1)
   (SID_NAME = PROD)
  )
 )

2. 2개의 리스너를 실행시키고 상태 확인.

$ lsnrctl start  #디폴트 리스너 (LISTENER) 시작 
$ lsnrctl start listener1 # listener1 리스너 시작

3.리스너 상태 확인

서비스 상태가 READY 확인됨
$lsnrctl ser

4.listener1 리스너만 확인

$ lsnrctl ser listener1
서비스 상태가 UNKNOWN 확인됨
  • UNKNOWN VS READY

우선 listener.ora파일에 등록되어 있는 정보를 확인해보면

1) LISTENER 리스너는 LISTENER1 리스너와 다르게 서비스를 등록하지도 않았는데 서버스의 상태가 보여지는 것을 확인.

2) 바로 동적 등록과 정적 등록의 표시를 UNKNOWN과 READY로 한것.

3) UNKNOWN이라고해서 작동이 안하거나 그런 것이 아니고 단지 구분을 위한 표시일 뿐.

1.4.1.1 동적 등록[편집]

동적 등록은 PMON 프로세스가 LREG라는 프로세스를 통해 자동으로 리스너에 서비스를 등록.

서비스를 어떤 리스너에 등록해줘야할지는 local_listener 파라미터를 통해 관리 됨.

1. 로컬 리스너 파라미터 확인

SQL> show parameter local_listener

local_listener의 default 값은 "". 즉,디폴트 "LISTENER" 라는 이름의 리스너에 동적 등록하겠다는 의미.

newdb말고 PROD SID를 사용하는 데이터베이스도 기본 local_listener값을 사용하고 있어

LISTENER 리스너의 서비스 상태를 봤을때 listener.ora 파일에 서비스를 등록하지 않았어도

동적 서비스 정보가 있었고 READY로 표시.

반면, LISTENER1의 경우 직접 listener.ora 파일에 SID_LIST에 기재하여 정적 등록.

1.4.2 local_listener의 파라미터를 변경해서 LISTENER1에 동적 등록[편집]

SQL> alter system set local_listener='(description=(address=(protocol=tcp)(host=11.22.33.44)(port=1522)))';
  • 확인
$ lsnrctl ser listener1

LISTENER1 리스너의 서비스를 확인해보니 newdb가 READY로 되어있는 서비스 하나 더 생성됨을 확인.

정적등록과 동적 등록은 별개로 서비스에 모두 등록 가능.

  • 여러개의 동적 등록
SQL> alter system set local_listener=
'(description=(address=(protocol=tcp)(host=11.22.33.44)(port=1522)))'
,'(description=(address=(protocol=tcp)(host=11.22.33.44)(port=1521)))';
  • 확인
$>lsnrctl ser

2 리스너 로그 위치[편집]

  • 10g 이하 $ORACLE_HOME/network/log 디렉토리
  • 11g 이상 $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/trace

2.1 리스너 로그 확인[편집]

[oracle@ora ~]$ lsnrctl status
.. 중략 ...
Listener Parameter File   /app/oracle/product/12.2.0/db_1/network/admin/listener.ora
Listener Log File         /app/oracle/diag/tnslsnr/ora/listener/alert/log.xml
...
  1. lsnrctl [명령어] 실행
$ lsnrctl

-- 1.구성된 리스너명이 Listener 가 아닌 경우, 지정
lsnrctl> set current_listener <리스너명> 

-- 2.listener.log 파일에 로그 기록 정지 
lsnrctl> set log_status off

-- 3.삭제, 백업 작업
-- listener.log 파일에 로그 기록.
lsnrctl> set log_status on
  • set log_status off 로 변경하고, 파일 제거 또는 백업하고 listener.log 파일 생성 (생성하지 않아도 자동 생성)
  • 11g 이상에서는 $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/alert 에 log_xxxx.xml파일도 생기는데

이 로그는 ADRCI 용 로그임.

2.2 adrci로 리스너 로그 확인[편집]

1. adrci 실행

$ adrci -- 실행

2. adrci 에서 “show alert” 실행

adrci> show alert -- alrt log 목록조회 
 
Choose the home from which to view the alert log:
 
1: diag/rdbms/orcl19/ORCL19
2: diag/rdbms/orcl19t/ORCL19T
3: diag/asm/+asm/+ASM
4: diag/crs/oracle19/crs
5: diag/clients/user_oracle/host_3087630407_110
6: diag/tnslsnr/ORACLE19/listener
7: diag/asmtool/user_oracle/host_3087630407_110
8: diag/asmcmd/user_oracle/ORACLE19
9: diag/kfod/oracle19/kfod
Q: to quit

3. 해당 숫자 선택 후 엔터

6 (위 목록에서 6: diag/tnslsnr/ORACLE19/listener )

4. 확인 후 종료는 q 입력

Please select option: q

2.3 로그백업 관리[편집]

  • 주기적으로 파일을 묶어서 백업해두는식으로 관리한다.


-- 1. 로그 경로로 이동
$ cd $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/alert
$ ls
log_1801.xml
log_1802.xml
.... 중략 ...

-- 2. 로그 백업용 폴더 생성
$ mkdir -p log_backup

-- 3.백업용 폴더로 일부 로그 이동
$ mv log_18* log_backup

# 백업용 폴더 압축
$ tar -cvf - log_18*.* |gzip > log_18_backup.gzip

2.4 mtime 옵션 사용 백업[편집]

-- 1. 로그 백업용 폴더 생성
$ mkdir -p log_20180520

-- 2. 백업용 폴더로 일부 로그 이동(30일 지난 파일 이동)
$ find . -name "*.xml" -mtime +30 -exec mv {} /oracle/diag/tnslsnr/orcl/listener/alert/log_20180520/ \;

-- 3. 백업용 폴더 압축
$ tar -zcvf log_20180520 log_20180520

2.5 trace 로그 대용량시 처리[편집]

  • $ORACLE_BASE/diag/tnslsnr/'hostname'/listener/trace 에 로그가 용량이 커졌을 때
-- 1. 리스너 로그 이름 변경
$ cp -av listener.log listener.log.20180520

-- 2. /dev/null 을 리스너 로그에 덮어씌우기(이전로그 초기화)
cp /dev/null listener.log

-- 3. 이름 변경한 리스너 로그 압축
$ gzip listener.log.20180520