내맘대로긍정이 알려주는
Oracle 23ai 신기능
무료 세미나 발표자료
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) 1991, 2021, 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) 1991, 2021, 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 -S -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://developpaper.com/new-function-of-oracle19c-automatic-rotation-of-listener-log-in-txt-format/
https://positivemh.tistory.com/740
https://positivemh.tistory.com/172
'ORACLE > Admin' 카테고리의 다른 글
오라클 19c db oraInventory 재설정 (2) | 2022.01.06 |
---|---|
오라클 19c rootcrs.sh unlock과 lock (0) | 2021.12.30 |
오라클 19c ahf(tfa) 업그레이드 가이드 (0) | 2021.12.25 |
오라클 11g R2 서버 기동시 db 자동실행 설정 (0) | 2021.11.13 |
오라클 19c AWR 에 저장된 정보 확인(awrinfo.sql) (0) | 2021.11.05 |