프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.12.0.0

 

방법 : 오라클 19c 리스너 로그 자동백업 파라미터

오라클 19c db 운영중 리스너 로그가 자동으로 _1 로 백업되는 것을 확인하고

해당 파라미터를 찾아봄

19c 이전에는 수동으로 리스너 로그를 관리해줘야 했지만

19c 부터는 아래 파라미터로 자동으로 리스너로그를 관리할수있음

 

 

LOG_FILE_SIZE_listener_name

리스너 로그를 일정 용량이 되면 자동으로 백업해주는 파라미터

기본값 : 300MB, 값을 지정하지 않으면 기본값인 300M가 되면 자동으로 백업함

사용 방법 : 1M가 되면 자동으로 백업하게 끔 설정 listener.ora 파일에 추가

ex) LOG_FILE_SIZE_listener=10

 

 

LOG_FILE_NUM_listener_name

백업된 리스너 로그의 갯수를 제한하는 파라미터

기본값 : 없음, 값을 지정하지 않거나 값을 0으로 설정하면 무한하게 생성됨

사용 방법 : 리스너 로그백업파일이 2개만 남게끔 설정 listener.ora 파일에 추가

ex) LOG_FILE_NUM_listener_name=2

 

 

LOG_FILE_SIZE 테스트

리스너파일에 LOG_FILE_SIZE 파라미터 추가(1MB로 설정)

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cat $ORACLE_HOME/network/admin/listener.ora 
# listener.ora Network Configuration File: /app/oracle/product/19.0.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ORACLE19)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
LOG_FILE_SIZE_listener=1

 

 

리스너 재기동

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
$ lsnrctl stop
 
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 26-DEC-2021 20:29:10
 
Copyright (c) 19912021, Oracle.  All rights reserved.
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ORACLE19)(PORT=1521)))
The command completed successfully
 
$ lsnrctl start
 
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 26-DEC-2021 20:29:11
 
Copyright (c) 19912021, Oracle.  All rights reserved.
 
Starting /app/oracle/product/19.0.0/bin/tnslsnr: please wait...
 
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /app/oracle/product/19.0.0/network/admin/listener.ora
Log messages written to /app/oracle/diag/tnslsnr/ORACLE19/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ORACLE19)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ORACLE19)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                26-DEC-2021 20:29:11
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /app/oracle/product/19.0.0/network/admin/listener.ora
Listener Log File         /app/oracle/diag/tnslsnr/ORACLE19/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ORACLE19)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully

 

 

테스트 db라 어플리케이션 접속이 없어 리스너 로그가 많이 쌓이지 않음

리스너 로그가 많이 쌓이게하는 스크립트 생성

1
2
3
4
5
6
7
8
$ cat connect.sh 
#!/bin/bash
while ( true ); do
sqlplus --L system/oracle@ORCL19 << EOF
exit;
EOF
tnsping ORCL19
done

 

 

tnsnames.ora 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /app/oracle/product/19.0.0/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
 
ORCL19 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ORACLE19)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL19)
    )
  )
 
LISTENER_ORCL19 =
  (ADDRESS = (PROTOCOL = TCP)(HOST = ORACLE19)(PORT = 1521))

 

 

스크립트 실행

1
2
$ sh connect.sh >> /dev/null 
(실행중)

 

 

리스너 로그 파일 확인

1
2
3
4
5
6
7
8
9
10
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/trace
$ tail -f listener.log 
26-DEC-2021 20:33:25 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL19)(CID=(PROGRAM=sqlplus)(HOST=ORACLE19)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.10.60)(PORT=53698)) * establish * ORCL19 * 0
26-DEC-2021 20:33:25 * ping * 0
26-DEC-2021 20:33:25 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL19)(CID=(PROGRAM=sqlplus)(HOST=ORACLE19)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.10.60)(PORT=53702)) * establish * ORCL19 * 0
26-DEC-2021 20:33:25 * ping * 0
26-DEC-2021 20:33:25 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORCL19)(CID=(PROGRAM=sqlplus)(HOST=ORACLE19)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=10.10.10.60)(PORT=53706)) * establish * ORCL19 * 0
26-DEC-2021 20:33:25 * ping * 0
.
.

 

 

잠시뒤

리스너 로그 파일 확인

1
2
3
4
5
6
7
8
9
$ ls -lh
total 3.0M
-rw-r-----. 1 oracle dba 432K Dec 26 20:34 listener_18.log
-rw-r-----. 1 oracle dba 419K Dec 26 20:38 listener_19.log
-rw-r-----. 1 oracle dba 419K Dec 26 20:43 listener_20.log
-rw-r-----. 1 oracle dba 420K Dec 26 20:47 listener_21.log
-rw-r-----. 1 oracle dba 420K Dec 26 20:52 listener_22.log
-rw-r-----. 1 oracle dba 420K Dec 26 20:56 listener_23.log
-rw-r-----. 1 oracle dba  23K Dec 26 20:57 listener.log

테스트를 많이 해서 번호가 _18, _19 이지만 실제론 _1 부터 생성됨

LOG_FILE_SIZE 를 1M로 설정했지만 실제론 그사이즈에 못미치는 420k 정도가 쌓인 후 백업됨

 

 

리스너 로그 파일 확인(.xml)

1
2
3
4
5
6
7
8
9
10
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/alert
$ ls -lh
total 31M
-rw-r-----. 1 oracle dba 1.1M Dec 26 20:34 log_18.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 20:38 log_19.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 20:43 log_20.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 20:47 log_21.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 20:52 log_22.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 20:56 log_23.xml
-rw-r-----. 1 oracle dba 707K Dec 26 21:00 log.xml

리스너 xml 로그는 1.1M 사이즈씩 백업됨

xml 로그(ADR로그) 사이즈 기준으로 백업됨

(해당 명령어 docs 에도 제목이 "ADR Diagnostic Parameters for Oracle Net Listener" 임)

 

 

listener.ora 파일 LOG_FILE_SIZE_listener 를 2로 설정하고 다시 확인(2MB 설정)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/alert
$ rm -rf ./
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/trace
$ rm -rf ./
 
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/alert
$ ls -lh
total 6.0M
-rw-r-----. 1 oracle dba 2.1M Dec 26 21:11 log_1.xml
-rw-r-----. 1 oracle dba 2.1M Dec 26 21:20 log_2.xml
-rw-r-----. 1 oracle dba 972K Dec 26 21:24 log.xml
 
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/trace
$ ls -lh
total 2.5M
-rw-r-----. 1 oracle dba 826K Dec 26 21:11 listener_1.log
-rw-r-----. 1 oracle dba 836K Dec 26 21:20 listener_2.log
-rw-r-----. 1 oracle dba 403K Dec 26 21:24 listener.log

ADR log(.xml)기준으로 2MB씩 저장됨

log_숫자는 원본 리스너 로그 파일(listener.log, log.xml)까지 모두 rm -rf로 지운뒤부터 다시 log_1 부터 시작됨

 

 

LOG_FILE_NUM 테스트

리스너파일에 LOG_FILE_SIZE 파라미터,  LOG_FILE_NUM 파라미터 추가(1MB로 설정, 2개만 남기게끔 설정)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat $ORACLE_HOME/network/admin/listener.ora 
# listener.ora Network Configuration File: /app/oracle/product/19.0.0/network/admin/listener.ora
# Generated by Oracle configuration tools.
 
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ORACLE19)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
 
LOG_FILE_SIZE_listener=1
LOG_FILE_NUM_listener=2

 

 

스크립트 실행

1
2
$ sh connect.sh >> /dev/null 
(실행중)

 

 

잠시뒤

리스너 로그 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/alert
$ rm -rf ./
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/trace
$ rm -rf ./
 
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/alert
$ ls -lh
total 4.1M
-rw-r-----. 1 oracle dba 1.1M Dec 26 21:40 log_1.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 21:44 log_2.xml
-rw-r-----. 1 oracle dba 191K Dec 26 21:45 log.xml
 
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/trace
$ ls -lh
total 1.8M
-rw-r-----. 1 oracle dba 426K Dec 26 21:40 listener_1.log
-rw-r-----. 1 oracle dba 418K Dec 26 21:44 listener_2.log
-rw-r-----. 1 oracle dba  47K Dec 26 21:44 listener.log

백업된 로그가 2개 생김

 

 

세번째 리스너 백업 로그가 쌓일때 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/alert
$ ls -lh
total 3.0M
-rw-r-----. 1 oracle dba 1.1M Dec 26 21:44 log_2.xml
-rw-r-----. 1 oracle dba 1.1M Dec 26 21:48 log_3.xml
-rw-r-----. 1 oracle dba  44K Dec 26 21:49 log.xml
 
$ cd /app/oracle/diag/tnslsnr/ORACLE19/listener/trace
$ ls -lh
total 1.3M
-rw-r-----. 1 oracle dba 418K Dec 26 21:44 listener_2.log
-rw-r-----. 1 oracle dba 418K Dec 26 21:48 listener_3.log
-rw-r-----. 1 oracle dba 6.2K Dec 26 21:49 listener.log

앞 로그(log_1.xml, listener_1.log)가 지워지고 _3이 추가됨

이렇게 LOG_FILE_SIZE와 LOG_FILE_NUM를 이용해 리스너 로그를 자동으로 관리할 수 있음

(기존에 내가 백업하던 방식은 listener.log_20211226 으로 카피하고 /dev/null 로 listener.log를 날리는 방식이었는데 이 방식처럼 뒤에 당일 날짜를 붙이지 못하는건 조금 아쉬움)

 

 

참조 : https://docs.oracle.com/en/database/oracle/oracle-database/19/netrf/oracle-net-listener-parameters-in-listener-ora.html#GUID-FF94A234-A29C-46AA-8770-4CA1BFB5C27C

https://developpaper.com/new-function-of-oracle19c-automatic-rotation-of-listener-log-in-txt-format/

https://positivemh.tistory.com/740

 

오라클 19c 리스너 로그 월별 자동 백업

OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : Oracle Database 19.10.0.0 방법 : 오라클 19c 리스너 로그 월별 자동 백업 스크립트(리스너 로그 자동 정리 방법) 오라클 db 사용 시 사용량이 많은 db일수록 필연..

positivemh.tistory.com

https://positivemh.tistory.com/172

 

오라클 11g R2 리스너 로그 관리 정리 방법

OS환경 : Oracle Linux 6.8, Windows Server 2012 (64bit) DB 환경 : Oracle Database 11.2.0.4 방법 : 리스너 로그 관리 로그 정리 방법 오라클 db 사용 시 사용량이 많은 db일수록 필연적으로 리스너 로그도 많..

positivemh.tistory.com