DB

[Database] ORA-04030 원인,해결방법

파주상남자의 오답노트 ㅣ 2025. 3. 19. 16:36

반응형

이 오류는  주로 프로세스 메모리가 부족하여 특정 크기의 메모리를 할당할 수 없을 때 발생

Oracle 서버 프로세스가 PGA(Process Global Area)에서 메모리를 요청했으나, 사용 가능한 메모리가 부족하면 발생

 

🔍 원인

  1. PGA 메모리 부족
    • Oracle의 PGA 메모리 할당이 비효율적으로 설정됨
    • PGA_AGGREGATE_LIMIT 또는 PGA_AGGREGATE_TARGET 값이 너무 낮음
  2. OS 레벨 메모리 부족
    • 서버 전체의 사용 가능한 RAM이 부족
    • 스왑 공간이 부족
  3. 비정상적으로 많은 메모리 사용
    • 대량의 데이터 정렬(SORT) 또는 해시 조인이 발생할 때
    • PL/SQL 테이블(collection)이나 커서에서 과도한 메모리 사용
    • 백그라운드 프로세스가 메모리를 과도하게 점유

🛠 해결 방법

1️⃣ PGA 메모리 설정 확인 및 조정

 
sql
SHOW PARAMETER PGA_AGGREGATE_TARGET; SHOW PARAMETER PGA_AGGREGATE_LIMIT;
PGA_AGGREGATE_TARGET 값을 증가 (예: 2GB → 4GB)

sql
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 4G SCOPE=BOTH;
PGA_AGGREGATE_LIMIT 값을 증가 (예: 4GB → 8GB)

sql
ALTER SYSTEM SET PGA_AGGREGATE_LIMIT = 8G SCOPE=BOTH;

2️⃣ OS 메모리 확인 및 증가

  • 현재 사용 가능한 메모리 확인
free -m
  • 스왑 공간이 부족하다면 추가
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

3️⃣ 비정상적인 메모리 사용 세션 확인

  • 메모리를 많이 사용하는 세션 찾기
sql
SELECT SID, SERIAL#, CATEGORY, ALLOCATED, USED FROM V$PROCESS_MEMORY WHERE ALLOCATED > 100000000; -- 100MB 이상 사용 중인 세션
  • 문제가 되는 세션 종료
sql
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;

4️⃣ 실행 계획 확인 및 튜닝

  • SQL이 과도한 정렬(SORT)이나 해시 조인을 유발하는지 확인
EXPLAIN PLAN FOR <SQL문>; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
  • 적절한 인덱스 추가 또는 SQL 튜닝 수행
반응형