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

ORA-07445
2026년 09월 03일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-07445 exception encountered: core dump 는?

ORA-07445는 Oracle 데이터베이스 내부에서 예상치 못한 심각한 오류가 발생하여 Oracle 프로세스가 운영 체제 수준의 코어 덤프(Core Dump)를 생성할 때 나타나는 에러입니다. 이 에러는 Oracle 엔진 자체의 버그, 메모리 손상, 또는 잘못된 시스템 환경 설정으로 인해 발생하며, 일반적인 SQL 문법 오류나 권한 문제와는 다르게 Oracle 내부 코드 레벨의 문제입니다. 발생 시 Oracle은 alert log와 trace 파일을 생성하며, 해당 파일에는 콜 스택(Call Stack)과 함께 어떤 함수에서 에러가 발생했는지 상세한 정보가 기록되므로, 이를 분석하는 것이 문제 해결의 첫 번째 단계입니다.


주요 발생 원인

1. Oracle 버그 및 패치 미적용

ORA-07445의 가장 흔한 원인은 Oracle 자체의 소프트웨어 버그입니다. Oracle은 수백만 줄의 코드로 이루어져 있으며, 특정 SQL 패턴이나 실행 계획 조합에서 내부 함수 호출 중 비정상적인 메모리 접근이 발생할 수 있습니다. Oracle Support의 MOS(My Oracle Support)에는 수천 개의 ORA-07445 관련 버그 보고서가 등록되어 있으며, 대부분 특정 PSU(Patch Set Update) 또는 개별 패치(One-off Patch)를 적용함으로써 해결됩니다.

2. SGA/PGA 메모리 손상 및 부족

SGA(System Global Area) 또는 PGA(Program Global Area) 영역에서 메모리 손상이 발생하거나, 메모리가 부족할 때 ORA-07445가 발생할 수 있습니다. 특히 대용량 쿼리를 처리하거나, 잘못된 메모리 파라미터 설정으로 인해 Oracle 프로세스가 허용되지 않은 메모리 주소에 접근하는 경우 코어 덤프가 생성됩니다. 이 경우 OS 레벨의 메모리 상태 및 Oracle 메모리 파라미터를 점검해야 합니다.

3. 서드파티 라이브러리 또는 OS 호환성 문제

Oracle과 연동된 서드파티 소프트웨어(예: 외부 프로시저, Java 스토어드 프로시저, 특정 드라이버)가 Oracle 프로세스 내 메모리를 침범하거나, OS 커널 버전과 Oracle 바이너리 간의 호환성 문제로 ORA-07445가 유발될 수 있습니다. 특히 OS 업그레이드 이후 갑작스럽게 ORA-07445가 발생한다면 Oracle Certification Matrix를 확인하여 현재 OS 버전이 공식 지원 범위 내에 있는지 반드시 검토해야 합니다.


해결 방법

1단계: Alert Log 및 Trace 파일 확인

ORA-07445 발생 시 가장 먼저 해야 할 일은 alert log와 trace 파일을 확인하는 것입니다.

-- Alert log 위치 확인
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';

-- 최근 ORA-07445 관련 incident 확인
SELECT INCIDENT_ID, CREATE_TIME, PROBLEM_KEY
FROM V$DIAG_INCIDENT
WHERE PROBLEM_KEY LIKE '%ORA 7445%'
ORDER BY CREATE_TIME DESC;

-- ADR(Automatic Diagnostic Repository)을 통한 에러 확인
-- OS 커맨드 라인에서 실행
-- adrci> show incident -mode detail

Trace 파일 내에서 다음과 같은 형태의 콜 스택을 확인할 수 있습니다:

-- trace 파일 경로 직접 확인 쿼리
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';

2단계: 문제 SQL 식별 및 임시 우회

특정 SQL 실행 시 ORA-07445가 발생한다면, 해당 SQL의 실행 계획을 변경하거나 힌트를 사용하여 임시로 우회할 수 있습니다.

-- 문제 SQL에 힌트를 추가하여 실행 계획 변경
SELECT /*+ NO_MERGE NO_PUSH_PRED */ 
    e.employee_id,
    e.first_name,
    d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;

-- 특정 최적화 기능 비활성화 (세션 레벨)
ALTER SESSION SET "_complex_view_merging" = FALSE;
ALTER SESSION SET "_push_join_predicate" = FALSE;

-- 병렬 처리 비활성화 (병렬 쿼리 관련 코어 덤프 시)
ALTER SESSION DISABLE PARALLEL QUERY;
ALTER SESSION DISABLE PARALLEL DML;
ALTER SESSION DISABLE PARALLEL DDL;

3단계: 메모리 파라미터 점검 및 조정

-- 현재 SGA 및 PGA 설정 확인
SELECT NAME, VALUE, DESCRIPTION
FROM V$PARAMETER
WHERE NAME IN (
    'sga_target',
    'sga_max_size',
    'pga_aggregate_target',
    'memory_target',
    'memory_max_target'
);

-- SGA 구성 요소별 현재 사용량 확인
SELECT COMPONENT, CURRENT_SIZE/1024/1024 AS CURRENT_MB,
       MIN_SIZE/1024/1024 AS MIN_MB,
       MAX_SIZE/1024/1024 AS MAX_MB
FROM V$SGA_DYNAMIC_COMPONENTS
ORDER BY CURRENT_SIZE DESC;

-- PGA 사용량 확인
SELECT ROUND(VALUE/1024/1024, 2) AS PGA_MB
FROM V$PGASTAT
WHERE NAME = 'total PGA allocated';

-- 메모리 파라미터 조정 (필요 시)
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G SCOPE=BOTH;
ALTER SYSTEM SET SGA_TARGET = 8G SCOPE=BOTH;

4단계: Oracle 패치 적용

MOS에서 Trace 파일의 함수명으로 검색하여 관련 버그 패치를 식별하고 적용합니다.

-- 현재 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;

-- opatch lsinventory (OS 커맨드)
-- $ORACLE_HOME/OPatch/opatch lsinventory

5단계: 서드파티 라이브러리 점검

-- 외부 라이브러리(External Procedures) 확인
SELECT LIBRARY_NAME, FILE_SPEC, STATUS
FROM DBA_LIBRARIES
ORDER BY LIBRARY_NAME;

-- Java 관련 오브젝트 상태 확인
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM DBA_OBJECTS
WHERE OBJECT_TYPE LIKE 'JAVA%'
AND STATUS != 'VALID'
ORDER BY OBJECT_TYPE, OBJECT_NAME;

예방 방법

1. 정기적인 패치 적용 및 버전 관리

Oracle CPU(Critical Patch Update) 또는 RU(Release Update)를 분기별로 정기 적용하는 패치 관리 프로세스를 수립하세요. ORA-07445의 상당수는 알려진 Oracle 버그에서 기인하며, 최신 패치를 유지하는 것이 가장 효과적인 예방책입니다. 패치 적용 전에는 반드시 테스트 환경에서 검증 후 운영 환경에 반영하는 절차를 준수해야 합니다.

-- 패치 적용 이력 모니터링 쿼리
SELECT PATCH_ID, VERSION, ACTION, STATUS,
       TO_CHAR(ACTION_TIME, 'YYYY-MM-DD HH24:MI:SS') AS ACTION_TIME
FROM DBA_REGISTRY_SQLPATCH
ORDER BY ACTION_TIME DESC
FETCH FIRST 10 ROWS ONLY;

2. 주기적인 Alert Log 모니터링 자동화

ORA-07445는 발생 초기에는 간헐적으로 나타나는 경우가 많으므로, Alert Log를 자동으로 모니터링하여 즉시 알림을 받을 수 있는 체계를 구축해야 합니다. Oracle Enterprise Manager(OEM) 또는 쉘 스크립트 기반의 모니터링을 통해 ORA-07445 발생 시 즉각 대응할 수 있도록 준비하세요.

-- Alert log 내 ORA-07445 발생 횟수 추적 (외부 테이블 활용 예시)
-- 먼저 외부 테이블 생성
CREATE OR REPLACE DIRECTORY DIAG_DIR AS '/u01/app/oracle/diag/rdbms/orcl/orcl/trace';

-- 발생한 incident 수 주기적 확인
SELECT COUNT(*), TRUNC(CREATE_TIME, 'DD') AS INCIDENT_DATE
FROM V$DIAG_INCIDENT
WHERE PROBLEM_KEY LIKE '%ORA 7445%'
AND CREATE_TIME >= SYSDATE - 30
GROUP BY TRUNC(CREATE_TIME, 'DD')
ORDER BY INCIDENT_DATE DESC;

관련 에러

  • ORA-00600: Oracle 내부 에러의 대표적인 코드로, ORA-07445와 함께 발생하는 경우가 많습니다. ORA-00600은 Oracle 내부 코드의 예외 처리 루틴에서 발생하며, ORA-07445는 OS 수준의 시그널(SIGSEGV, SIGBUS 등)로 인한 코어 덤프를 의미합니다.
  • ORA-04031: SGA 내 공유 메모리 부족으로 발생하며, 메모리 부족이 ORA-07445를 유발하는 경우 함께 확인해야 합니다.
  • ORA-27300 / ORA-27301 / ORA-27302: OS 레벨의 프로세스 또는 시그널 처리 오류와 관련된 에러로, ORA-07445 발생 시 함께 alert log에 기록되는 경우가 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기