오라클 모니터링
현재 회사에서 하는 업무 중 하나는 DB 를 모니터링 하는 것이다.
모니터링이 필요한 경우는 다음과 같다.
- 장애 관제가 발생했을 때 오탐인지 장애인지 확인
- 작업 전후를 비교하여 원상태를 유지하는지 확인
- 작업 중 지연, lock, hang 발생하는지 확인
프로세스 모니터링
PMON, SMON, DBWR, LGWR 등 오라클에 필수적인 프로세스가 존재하는지 점검한다.
방법은 다음과 같다.
1
2
3
4
5
6
7
ps -ef | grep ORACLE | grpe $ORACLE_SID
## 출력 예시
UID PID PPID C STIME TTY TIME CMD
oracle 1500 1 0 10:00 ? 00:00:05 ora_pmon_$ORACLE_SID
oracle 1501 1 0 10:00 ? 00:00:04 ora_smon_$ORACLE_SID
(이하 생략)
필수적으로 존재해야 하는 프로세스들이 모두 있으면 정상이다.
UPTIME 확인
작업 전후 혹은 서비스 장애 발생시 DB 점검을 할 때 반드시 해야한다.
1
2
3
4
5
6
7
8
9
10
11
12
select
a.instance_name, b.open_mode,
to_char(a.startup_time, 'yyyy-mm-dd hh24:mi:ss') startup_time,
a.status
from v$instance a, v$database b;
## 출력 예시
INSTANCE_NAME OPEN_MODE STARTUP_TIME STATUS
---------------------------------------- ---------------------------------------- ------------------- ------------
XE READ WRITE 2025-03-23 20:17:51 OPEN
세션 모니터링
액티브 세션 수가 많거나 Long run 세션이 많으면 시스템 부하가 발생하여 DB 성능이 저하된다.
만약 해당 경우가 발생하면 병목현상, Deadlock이 발생했는지 확인해야한다.
나는 야간에 근무하기 때문에, 많은 DB에서 배치 작업이 실행되는 시간대에 active 세션 수 경고나 롱 세션 경고를 자주 접한다.
그럴때마다 들어가서 병목현상이나 Blocking 현상이 발생했는지 확인한다.
로그 모니터링
오류가 발생하여 확인하거나 특정 작업이 정상적으로 수행되는 중인지 확인하기 위해 로그를 모니터링한다.
로그 경로는 버전마다 다르고, 회사마다 다를 수 있다.
기본적인 경로는 다음과 같다.
$ORACLE_BASE/diag/rdbms/DB_UNIQUE_NAME/ORACLE_SID/trace
만약 오라클11g 이상이라면 다음 쿼리를 사용해 경로를 찾을 수 있다.
1
2
3
4
5
6
7
select value from v$diag_info where name='Diag Trace';
##출력 예시
VALUE
------------
/opt/oracle/diag/rdbms/xe/XE/trace
경로를 찾았으면 들어가면 alert_$ORACLE_SID.log 파일이 있다.
1
2
3
4
tail -50f alert_$ORACLE_SID.log
## 필요에 따라서 커스텀하여 수행
grep "ORA-" alert_$ORACLE_SID.log
cat 이나 tail 등 편한 것을 이용해 내용을 확인한다.
주로 배치간에 자주 발생되는 에러들이 있고 스킵해도 되는 에러인지 확인한다.