2026년 10월 24일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-00064 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-00064 object is too large to allocate on this OS 는?
ORA-00064 에러는 Oracle 데이터베이스가 특정 객체(주로 SGA 또는 메모리 구조체)를 운영체제(OS) 수준에서 할당하려 할 때, OS가 지원하는 최대 크기를 초과하여 할당이 불가능한 경우 발생합니다. 이 에러는 주로 PROCESSES, SESSIONS, SGA_TARGET, SGA_MAX_SIZE 등의 초기화 파라미터 값이 현재 운영 중인 OS의 커널 한계값 또는 메모리 제한을 초과했을 때 트리거됩니다. 특히 32비트 OS 환경이나 공유 메모리(shared memory) 세그먼트 크기에 제한이 있는 환경에서 Oracle 인스턴스를 기동할 때 자주 목격되는 에러입니다.
주요 발생 원인
1. SGA 크기가 OS의 공유 메모리(SHMMAX) 한계를 초과한 경우
가장 흔한 원인으로, Linux/Unix 계열 OS에서는 커널 파라미터 SHMMAX(최대 공유 메모리 세그먼트 크기)와 SHMALL(전체 공유 메모리 페이지 수)이 정의되어 있습니다. Oracle SGA 크기가 이 값을 초과하면 ORA-00064가 발생합니다. 예를 들어 SGA_TARGET=8G로 설정했으나 OS의 SHMMAX가 4GB로 제한되어 있다면 인스턴스 기동 자체가 실패합니다.
2. PROCESSES 파라미터 값이 지나치게 크게 설정된 경우
PROCESSES 파라미터는 Oracle이 동시에 처리할 수 있는 최대 프로세스 수를 결정하며, 이 값에 비례하여 다양한 내부 메모리 구조(PCB, 락 구조체 등)의 크기가 결정됩니다. PROCESSES 값이 지나치게 높으면 내부적으로 할당해야 할 메모리 구조의 총합이 OS 한계를 넘어서게 됩니다. 이 경우 alert log에 “object is too large to allocate on this OS”라는 메시지와 함께 startup이 실패합니다.
3. 32비트 OS 또는 32비트 Oracle 바이너리 사용
32비트 환경에서는 단일 프로세스가 접근할 수 있는 가상 주소 공간이 최대 4GB(실질적으로는 2~3GB)로 제한됩니다. 이 제한으로 인해 SGA나 PGA가 허용 범위를 넘는 크기로 설정되면 ORA-00064가 발생합니다. 현대 환경에서는 드물지만, 레거시 시스템 운영 환경에서는 여전히 발생할 수 있는 원인입니다.
해결 방법
원인 1: SHMMAX 커널 파라미터 조정
먼저 현재 OS의 공유 메모리 설정을 확인합니다.
# Linux에서 커널 파라미터 확인
cat /proc/sys/kernel/shmmax
cat /proc/sys/kernel/shmall
ipcs -lm
이후 /etc/sysctl.conf 파일을 수정하여 값을 늘립니다.
# /etc/sysctl.conf 수정 예시 (SGA 10GB 이상 지원)
kernel.shmmax = 12884901888 # 12GB (bytes 단위)
kernel.shmall = 3145728 # 12GB / 4096(page size)
kernel.shmmni = 4096
# 변경사항 즉시 적용
sysctl -p
Oracle 파라미터도 OS 한계 이하로 맞춰 조정합니다.
-- SGA 관련 파라미터 현재값 확인
SHOW PARAMETER SGA;
SHOW PARAMETER MEMORY;
-- SPFILE 기준으로 SGA_TARGET 조정 (OS SHMMAX 이하로)
ALTER SYSTEM SET SGA_TARGET = 4G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_MAX_SIZE = 4G SCOPE=SPFILE;
-- 변경 후 재기동
SHUTDOWN IMMEDIATE;
STARTUP;
원인 2: PROCESSES 파라미터 최적화
-- 현재 PROCESSES 값 확인
SHOW PARAMETER PROCESSES;
SHOW PARAMETER SESSIONS;
-- 실제 최대 세션 사용량 조회 (모니터링 기준 설정용)
SELECT MAX(sessions_highwater) AS max_sessions
FROM v$license;
-- 적정 수준으로 PROCESSES 값 조정
-- 일반적으로 동시 접속자 수 * 1.2 정도로 설정
ALTER SYSTEM SET PROCESSES = 300 SCOPE=SPFILE;
-- SESSIONS는 자동 계산되나 명시적 설정 시
-- SESSIONS = (PROCESSES * 1.1) + 5 공식 참고
ALTER SYSTEM SET SESSIONS = 335 SCOPE=SPFILE;
-- 재기동 필요
SHUTDOWN IMMEDIATE;
STARTUP;
원인 3: 32비트 환경의 메모리 제한 해결
-- Oracle 바이너리 비트 수 확인 (SQL*Plus에서)
SELECT BANNER FROM V$VERSION;
-- 32비트 환경에서 SGA를 최대한 줄이기 위한 수동 파라미터 설정
-- AMM(Automatic Memory Management) 비활성화 후 수동 제어
ALTER SYSTEM SET MEMORY_TARGET = 0 SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 0 SCOPE=SPFILE;
-- 각 컴포넌트를 개별적으로 조정
ALTER SYSTEM SET DB_CACHE_SIZE = 512M SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE = 256M SCOPE=SPFILE;
ALTER SYSTEM SET LARGE_POOL_SIZE = 64M SCOPE=SPFILE;
ALTER SYSTEM SET JAVA_POOL_SIZE = 32M SCOPE=SPFILE;
ALTER SYSTEM SET LOG_BUFFER = 16M SCOPE=SPFILE;
-- 변경 사항 적용 및 확인
SHUTDOWN IMMEDIATE;
STARTUP;
SHOW SGA;
PFILE로 파라미터 확인 및 응급 복구
-- SPFILE 손상 또는 파라미터 오류로 DB 기동 불가 시
-- SPFILE로부터 PFILE 생성 후 수정
CREATE PFILE='/tmp/init_recovery.ora' FROM SPFILE;
-- 텍스트 편집기로 /tmp/init_recovery.ora 수정 후 PFILE로 기동
STARTUP PFILE='/tmp/init_recovery.ora';
-- 정상 기동 확인 후 SPFILE 재생성
CREATE SPFILE FROM PFILE='/tmp/init_recovery.ora';
예방 방법
1. OS 커널 파라미터 사전 검증 자동화
Oracle 설치 또는 파라미터 변경 전, OS 커널 값과 Oracle 파라미터의 정합성을 주기적으로 점검하는 스크립트를 cron 또는 OEM(Oracle Enterprise Manager) Alert로 등록해 두어야 합니다. oracle-database-preinstall 패키지(Linux 환경)를 사용하거나, Oracle 권장 커널 파라미터 체크리스트를 기반으로 한 쉘 스크립트를 운영 표준에 포함하면 사전 예방이 가능합니다.
-- AWR 또는 주기적 모니터링: 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;
2. 파라미터 변경 시 반드시 테스트 환경 선검증 및 문서화
운영 환경에서 PROCESSES, SGA_TARGET, MEMORY_TARGET 등 핵심 파라미터 변경 시, 반드시 동일한 OS 스펙의 테스트 환경에서 선검증을 수행한 후 Change Management 프로세스를 통해 적용해야 합니다. 변경 전후 SPFILE 백업을 생성하는 것을 습관화하고, 파라미터 변경 이력을 형상 관리(Configuration Management) 시스템에 기록해 두면 장애 시 빠른 롤백이 가능합니다.
관련 에러
- ORA-00063:
maximum number of log files exceeded— 리두 로그 파일 수 한계 초과 에러로, OS 또는 DB 설정 한계와 연관됩니다. - ORA-04031:
unable to allocate N bytes of shared memory— SGA 내 공유 풀(Shared Pool) 메모리 부족 시 발생하며, SGA 크기 설정과 밀접하게 연관됩니다. - ORA-27102:
out of memory— OS 레벨에서 메모리 할당 실패 시 발생하며, ORA-00064와 함께 alert log에 동반 출력되는 경우가 많습니다. - ORA-00821:
Specified value of sga_target N is too small— SGA_TARGET 값이 너무 작거나 큰 경우의 상호 보완적 에러입니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.