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

ORA-00072
2026년 10월 24일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-00072 process is not active 는?

ORA-00072 에러는 Oracle 데이터베이스 내부에서 특정 프로세스가 더 이상 활성 상태가 아닐 때 발생하는 에러입니다. 주로 백그라운드 프로세스나 서버 프로세스가 비정상적으로 종료되었거나, 해당 프로세스와의 통신을 시도할 때 해당 프로세스가 이미 죽어 있는 상태에서 발생합니다. 이 에러는 데이터베이스 운영 중 갑작스러운 프로세스 중단, 시스템 리소스 부족, 또는 Oracle 내부 오류로 인해 유발될 수 있으며, 방치할 경우 데이터베이스 성능 저하 및 연결 장애로 이어질 수 있습니다.


주요 발생 원인

1. 백그라운드 프로세스의 비정상 종료

Oracle의 백그라운드 프로세스(PMON, SMON, DBWn, LGWR 등) 중 하나가 OS 레벨에서 강제 종료되거나 메모리 부족으로 인해 비정상 종료된 경우 이 에러가 발생합니다. 이 경우 Oracle은 해당 프로세스에 메시지를 전달하려 하지만 프로세스가 이미 없는 상태이므로 ORA-00072를 반환합니다. 특히 kill -9 명령으로 프로세스를 강제 종료했을 때 빈번하게 발생하며, 이는 Oracle이 정상적인 정리(cleanup) 작업을 수행할 기회를 박탈하기 때문입니다.

2. 세션 또는 서버 프로세스의 좀비(Zombie) 상태

클라이언트 세션이 비정상 종료된 이후 서버 프로세스가 좀비 상태로 남아 있을 때 해당 프로세스에 접근하려는 시도에서 이 에러가 발생할 수 있습니다. 네트워크 장애, 클라이언트 측의 갑작스러운 연결 끊김, 또는 세션 타임아웃 설정 미흡으로 인해 서버 프로세스가 OS에서는 살아 있지만 Oracle 내부적으로는 활성화되지 않은 상태로 인식될 수 있습니다. 이런 좀비 프로세스들은 리소스를 점유하면서도 실제 작업을 수행하지 않아 시스템 성능에 악영향을 미칩니다.

3. 병렬 쿼리(Parallel Query) 실행 중 슬레이브 프로세스 실패

대용량 병렬 쿼리를 실행하는 도중 병렬 슬레이브 프로세스 중 하나가 메모리 부족이나 내부 오류로 갑자기 종료될 경우 코디네이터 프로세스가 ORA-00072를 반환할 수 있습니다. 특히 PGA 메모리 제한을 초과하는 대규모 정렬(Sort) 또는 해시 조인 작업 중 발생하기 쉽습니다. 이 경우 병렬 쿼리 전체가 실패하고 사용자에게 에러가 노출되므로 병렬 처리 설정과 메모리 관리를 동시에 점검해야 합니다.


해결 방법

원인 1: 백그라운드 프로세스 비정상 종료 대응

먼저 현재 활성화된 백그라운드 프로세스를 확인합니다.

-- 현재 Oracle 백그라운드 프로세스 확인
SELECT 
    p.spid        AS os_pid,
    p.pid         AS oracle_pid,
    p.program     AS program_name,
    p.background  AS is_background,
    p.status      AS status
FROM 
    v$process p
WHERE 
    p.background = 1
ORDER BY 
    p.pid;

비정상 종료된 프로세스를 확인 후, alert 로그를 통해 원인을 파악합니다.

-- alert 로그 위치 확인
SELECT value FROM v$diag_info WHERE name = 'Default Trace File';

-- 최근 발생한 에러 확인 (AWR or V$ 뷰 활용)
SELECT 
    sid,
    serial#,
    status,
    process,
    program,
    machine,
    logon_time
FROM 
    v$session
WHERE 
    status != 'ACTIVE'
    AND type = 'USER'
ORDER BY 
    logon_time DESC;

확인 결과 특정 백그라운드 프로세스가 사라진 경우, 인스턴스 재시작이 필요합니다.

-- 인스턴스 상태 확인
SELECT instance_name, status, database_status FROM v$instance;

-- 데이터베이스 재시작 (최후 수단)
-- SHUTDOWN IMMEDIATE;
-- STARTUP;

원인 2: 좀비 세션 정리

좀비 상태의 세션을 식별하고 정리합니다.

-- 비활성 세션 중 오래된 세션 확인
SELECT 
    s.sid,
    s.serial#,
    s.username,
    s.status,
    s.machine,
    s.program,
    s.last_call_et AS idle_seconds,
    p.spid         AS os_pid
FROM 
    v$session s
    JOIN v$process p ON s.paddr = p.addr
WHERE 
    s.status = 'INACTIVE'
    AND s.last_call_et > 3600   -- 1시간 이상 비활성 세션
    AND s.type = 'USER'
ORDER BY 
    s.last_call_et DESC;
-- 특정 좀비 세션 강제 종료 (SID, SERIAL# 확인 후 실행)
ALTER SYSTEM KILL SESSION '&SID,&SERIAL#' IMMEDIATE;

OS 레벨에서도 좀비 프로세스 정리가 필요할 수 있습니다.

-- OS PID 확인 후 서버에서 kill 명령 실행
-- (DBA 권한 + OS 접근 권한 필요)
SELECT 
    s.sid,
    s.serial#,
    p.spid AS os_pid,
    s.username,
    s.status
FROM 
    v$session s
    JOIN v$process p ON s.paddr = p.addr
WHERE 
    s.sid = &target_sid;

-- OS에서 실행: kill -9 <os_pid>

원인 3: 병렬 쿼리 슬레이브 프로세스 실패 대응

병렬 쿼리 관련 상태를 확인하고 적절히 조정합니다.

-- 현재 병렬 쿼리 실행 현황 확인
SELECT 
    qc_sid,
    server_group,
    server_set,
    server#,
    degree,
    req_degree,
    status
FROM 
    v$px_session
ORDER BY 
    qc_sid;
-- PGA 사용량 확인
SELECT 
    name,
    value / 1024 / 1024 AS value_mb
FROM 
    v$pgastat
WHERE 
    name IN (
        'aggregate PGA target parameter',
        'aggregate PGA auto target',
        'total PGA inuse',
        'maximum PGA allocated'
    );
-- 병렬 처리 파라미터 조정 (필요 시)
-- 병렬 슬레이브 프로세스 수 제한
ALTER SYSTEM SET parallel_max_servers = 20 SCOPE=BOTH;

-- 특정 세션에서만 병렬도 제한
ALTER SESSION SET parallel_degree_policy = MANUAL;
ALTER SESSION SET parallel_max_servers = 4;

예방 방법

1. 프로세스 모니터링 및 Dead Connection Detection 설정

Oracle에서 제공하는 SQLNET.EXPIRE_TIME 파라미터를 sqlnet.ora에 설정하여 Dead Connection을 자동으로 감지하고 정리하도록 구성합니다. 이 설정은 클라이언트 연결이 비정상 종료된 경우 서버 프로세스가 무한정 좀비 상태로 남아 있는 것을 방지합니다.

-- sqlnet.ora 설정 (DB 서버의 $ORACLE_HOME/network/admin/sqlnet.ora)
-- SQLNET.EXPIRE_TIME = 10  (10분마다 체크)

-- 현재 세션별 리소스 사용 제한 프로파일 확인
SELECT 
    profile,
    resource_name,
    limit
FROM 
    dba_profiles
WHERE 
    resource_name IN ('IDLE_TIME', 'CONNECT_TIME', 'SESSIONS_PER_USER')
    AND profile IN (SELECT profile FROM dba_users WHERE account_status = 'OPEN')
ORDER BY 
    profile, resource_name;

-- 프로파일을 통한 유휴 세션 자동 종료 설정
CREATE PROFILE app_user_profile LIMIT
    IDLE_TIME      30    -- 30분 유휴 시 자동 종료
    CONNECT_TIME   480   -- 8시간 연결 제한
    SESSIONS_PER_USER 10;

-- 사용자에게 프로파일 적용
-- ALTER USER app_user PROFILE app_user_profile;

2. 정기적인 V$ 뷰 기반 프로세스 헬스 체크 자동화

정기적으로 Oracle 내부 프로세스 상태를 모니터링하는 스크립트를 스케줄러나 OEM(Oracle Enterprise Manager)을 통해 자동화합니다. 이상 징후 감지 시 DBA에게 즉시 알림을 발송하는 체계를 갖추면 ORA-00072와 같은 프로세스 관련 에러를 사전에 예방할 수 있습니다.

-- 주기적으로 실행할 헬스 체크 쿼리
SELECT 
    TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS check_time,
    COUNT(*) AS total_sessions,
    SUM(CASE WHEN status = 'ACTIVE'   THEN 1 ELSE 0 END) AS active_sessions,
    SUM(CASE WHEN status = 'INACTIVE' THEN 1 ELSE 0 END) AS inactive_sessions,
    SUM(CASE WHEN status = 'KILLED'   THEN 1 ELSE 0 END) AS killed_sessions
FROM 
    v$session
WHERE 
    type = 'USER';

-- KILLED 상태로 오래 남아 있는 세션 감지
SELECT 
    sid,
    serial#,
    username,
    status,
    last_call_et AS elapsed_seconds,
    machine,
    program
FROM 
    v$session
WHERE 
    status = 'KILLED'
    AND last_call_et > 300  -- 5분 이상 KILLED 상태 유지
ORDER BY 
    last_call_et DESC;

관련 에러

  • ORA-00060: Deadlock detected while waiting for resource — 프로세스 간 교착 상태 발생 시 나타나며 ORA-00072와 함께 발생할 수 있습니다.
  • ORA-03113: End-of-file on communication channel — 서버 프로세스가 갑자기 종료될 때 클라이언트에서 받는 에러로, ORA-00072의 클라이언트 측 대응 에러입니다.
  • ORA-03114: Not connected to Oracle — 연결이 단절된 상태에서 쿼리 실행 시 발생하며, 비활성 프로세스 관련 맥락에서 함께 나타납니다.
  • ORA-00447: Fatal error in background process — 백그라운드 프로세스의 치명적 오류 발생 시 나타나며 ORA-00072를 유발하는 선행 에러일 수 있습니다.
  • ORA-00480: LCK process terminated with error — RAC 환경에서 Lock 프로세스 종료 시 발생하며, 역시 프로세스 비활성 상황과 연관됩니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기