Oracle ORA-00472 오류 원인과 해결 방법 완벽 가이드

ORA-00472
2026년 06월 12일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-00472 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-00472 PMON process terminated with error 는?

ORA-00472는 Oracle 데이터베이스의 핵심 백그라운드 프로세스 중 하나인 PMON(Process Monitor)이 비정상적으로 종료되었을 때 발생하는 치명적인 에러입니다. PMON은 실패한 사용자 프로세스를 감지하고 정리하며, 락(Lock) 해제, 롤백, 리소스 반환 등 데이터베이스의 정상적인 운영에 필수적인 역할을 담당합니다. 이 에러가 발생하면 데이터베이스 인스턴스 자체가 크래시될 수 있으므로, 즉각적인 원인 파악과 대응이 매우 중요합니다.


주요 발생 원인

1. 운영체제 리소스 부족 (메모리/파일 디스크립터 고갈)

PMON 프로세스는 운영체제의 리소스(메모리, 파일 디스크립터, 세마포어 등)를 지속적으로 사용합니다. 시스템 메모리가 고갈되거나 OS 커널 파라미터가 Oracle 운영에 필요한 최솟값에 미치지 못하면 PMON이 내부적으로 치명적인 오류를 맞닥뜨려 강제 종료될 수 있습니다. 특히 Linux/Unix 환경에서 shmmax, semmsl, semmns 같은 IPC 관련 파라미터가 부족하게 설정된 경우 자주 발생합니다.

2. SGA(System Global Area) 손상 또는 메모리 오염

Oracle SGA는 데이터베이스 전체가 공유하는 메모리 영역으로, PMON을 포함한 모든 백그라운드 프로세스가 이 영역에 접근합니다. 하드웨어 결함, 잘못된 메모리 설정, 혹은 외부 프로세스의 메모리 침범으로 인해 SGA가 손상되면 PMON이 비정상적인 메모리 값을 읽게 되어 즉시 종료됩니다. 이 경우 alert log에 ORA-00472와 함께 ORA-00600(내부 에러) 또는 ORA-07445(시그널 에러)가 함께 기록되는 경우가 많습니다.

3. Oracle 내부 버그 또는 패치 미적용

특정 Oracle 버전에서는 PMON 관련 내부 버그가 존재하며, 이로 인해 특정 조건에서 PMON이 예기치 않게 종료되는 경우가 있습니다. Oracle MOS(My Oracle Support)에는 PMON 관련 버그 패치가 다수 등록되어 있으며, PSU(Patch Set Update)나 RU(Release Update)를 최신 상태로 유지하지 않으면 해당 버그에 노출될 위험이 높습니다. 운영 환경에서는 반드시 Oracle 권고 패치를 주기적으로 검토하고 적용해야 합니다.


해결 방법

1단계: Alert Log 및 트레이스 파일 즉시 확인

PMON이 종료되면 반드시 alert log와 PMON 트레이스 파일을 먼저 분석해야 합니다.

-- Alert log 위치 확인
SELECT value FROM v$diag_info WHERE name = 'Diag Trace';

-- 최근 에러 로그 확인 (Oracle 11g 이상)
SELECT originating_timestamp, message_text
FROM v$diag_alert_ext
WHERE message_text LIKE '%PMON%'
   OR message_text LIKE '%ORA-00472%'
ORDER BY originating_timestamp DESC
FETCH FIRST 20 ROWS ONLY;
-- 현재 백그라운드 프로세스 상태 확인
SELECT pname, pid, spid, background, latchwait, latchspin
FROM v$process
WHERE pname IS NOT NULL
ORDER BY pname;

2단계: OS 리소스 및 커널 파라미터 점검

-- Oracle 권장 SGA 및 메모리 파라미터 확인
SELECT name, value
FROM v$parameter
WHERE name IN (
    'sga_max_size',
    'sga_target',
    'pga_aggregate_target',
    'memory_target',
    'processes',
    'sessions'
);

Linux OS에서 아래 커널 파라미터를 /etc/sysctl.conf에서 점검합니다.

-- 현재 세션 및 프로세스 사용 현황 확인
SELECT
    COUNT(*) AS current_sessions,
    (SELECT value FROM v$parameter WHERE name = 'sessions') AS max_sessions
FROM v$session;

-- 프로세스 한계 대비 사용률 확인
SELECT
    COUNT(*) AS current_processes,
    (SELECT value FROM v$parameter WHERE name = 'processes') AS max_processes
FROM v$process;

3단계: SGA 무결성 점검 및 재기동

SGA 손상이 의심될 경우 데이터베이스를 정상적으로 재기동하고 아래 진단 쿼리를 실행합니다.

-- SGA 구성 요소 상태 확인
SELECT name, bytes, resizeable
FROM v$sgainfo
ORDER BY bytes DESC;

-- SGA 동적 구성 요소 확인
SELECT component, current_size, min_size, max_size, status
FROM v$sga_dynamic_components
ORDER BY current_size DESC;

-- 공유 풀 사용 현황
SELECT
    ROUND(SUM(bytes)/1024/1024, 2) AS free_mb,
    ROUND(SUM(bytes)/1024/1024/
        (SELECT value/1024/1024 FROM v$parameter WHERE name='shared_pool_size') * 100, 2)
        AS free_pct
FROM v$shared_pool_free;

4단계: 패치 레벨 확인 및 적용

-- 현재 Oracle 버전 및 패치 레벨 확인
SELECT * FROM v$version;

-- 적용된 패치 목록 확인 (DBA_REGISTRY_SQLPATCH, 12c 이상)
SELECT patch_id, patch_uid, version, action, status, description
FROM dba_registry_sqlpatch
ORDER BY action_time DESC;

패치 미적용 상태가 확인되면 Oracle MOS에서 해당 버전의 최신 RU(Release Update)를 다운로드하여 OPatch로 적용합니다.

-- 패치 적용 후 컴포넌트 상태 검증
SELECT comp_name, version, status
FROM dba_registry
ORDER BY comp_name;

예방 방법

1. 정기적인 헬스체크 및 모니터링 자동화

PMON과 같은 백그라운드 프로세스를 주기적으로 모니터링하는 스크립트 또는 OEM(Oracle Enterprise Manager)을 활용하여 이상 징후를 사전에 탐지해야 합니다. 아래 쿼리를 cron job이나 스케줄러에 등록하여 백그라운드 프로세스 상태를 주기적으로 점검하고, 임계값 초과 시 즉시 알림을 발송하도록 구성하는 것을 강력히 권장합니다.

-- 백그라운드 프로세스 모니터링 쿼리 (이상 탐지용)
SELECT
    p.pname,
    p.spid AS os_pid,
    p.background,
    s.status AS session_status,
    s.last_call_et AS idle_seconds
FROM v$process p
LEFT JOIN v$session s ON p.addr = s.paddr
WHERE p.background = 1
  AND p.pname IN ('PMON','SMON','DBWR','LGWR','CKPT','RECO')
ORDER BY p.pname;

2. OS 커널 파라미터 및 리소스 한계를 Oracle 권고값 이상으로 설정 및 주기 검토

Oracle 설치 가이드에 명시된 커널 파라미터(kernel.shmmax, kernel.shmall, kernel.sem, fs.file-max 등)를 반드시 권고값 이상으로 설정하고, 데이터베이스 증설이나 세션 수 증가 시 재검토해야 합니다. 또한 ulimit 설정(특히 nofile, nproc)도 Oracle 프로세스 계정에 올바르게 적용되어 있는지 정기적으로 확인해야 하며, 패치 적용 계획을 수립하여 최소 분기별로 Oracle 권고 패치를 검토하고 적용하는 정책을 유지하는 것이 실무에서 매우 중요합니다.


관련 에러

  • ORA-00470: LGWR(Log Writer) 프로세스가 에러와 함께 종료된 경우 발생하며, PMON 에러와 함께 나타나는 경우가 많습니다.
  • ORA-00471: DBWR(Database Writer) 프로세스 비정상 종료 에러로, 디스크 I/O 문제와 밀접하게 연관됩니다.
  • ORA-00600: Oracle 내부 에러로, PMON 종료의 근본 원인으로 함께 기록되는 경우가 많습니다. 반드시 Oracle Support에 SR을 오픈하여 분석을 요청해야 합니다.
  • ORA-07445: 운영체제 레벨의 시그널(Signal) 에러로, 메모리 접근 위반이나 버그로 인해 PMON 종료를 유발할 수 있습니다.
  • ORA-00474: SMON(System Monitor) 프로세스 종료 에러로, 인스턴스 복구 기능에 직접 영향을 미칩니다.

DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기