2026년 07월 02일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01077 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01077 background process initialization failure 는?
ORA-01077 에러는 Oracle 데이터베이스 인스턴스가 시작될 때 백그라운드 프로세스(Background Process)가 정상적으로 초기화되지 못할 경우 발생하는 심각한 에러입니다. 이 에러는 주로 데이터베이스 startup 단계에서 PMON, SMON, DBWn, LGWR, CKPT 등의 핵심 백그라운드 프로세스가 기동되지 않을 때 나타납니다. 방치할 경우 데이터베이스 인스턴스 자체가 올라오지 못하거나, 불완전한 상태로 운영되어 데이터 손상 위험까지 이어질 수 있습니다.
주요 발생 원인
- 메모리(SGA/PGA) 할당 실패
Oracle 인스턴스는 시작 시 SGA(System Global Area)를 운영체제로부터 할당받아야 합니다. SGA_TARGET, SGA_MAX_SIZE, MEMORY_TARGET 등의 파라미터 값이 운영체제에서 허용하는 공유 메모리(Shared Memory) 한계를 초과하거나, 시스템의 가용 메모리가 부족할 경우 백그라운드 프로세스는 메모리 공간을 확보하지 못하고 초기화에 실패합니다. 특히 Linux/Unix 환경에서는 커널 파라미터인 kernel.shmmax, kernel.shmall 값이 Oracle SGA 크기보다 작게 설정되어 있을 때 이 에러가 빈번하게 발생합니다.
- 잘못된 초기화 파라미터(init.ora / spfile) 설정
PROCESSES, SESSIONS, DB_BLOCK_SIZE, UNDO_TABLESPACE 등의 초기화 파라미터가 잘못된 값으로 설정되어 있거나, spfile이 손상(corruption)된 경우 백그라운드 프로세스가 필요한 리소스를 찾지 못해 초기화에 실패합니다. 예를 들어 존재하지 않는 언두(UNDO) 테이블스페이스 이름을 UNDO_TABLESPACE 파라미터에 지정했거나, 비현실적으로 큰 PROCESSES 값을 설정한 경우가 대표적입니다. spfile 손상 시에는 pfile로 복구한 뒤 재기동하는 절차가 필요합니다.
- 운영체제 리소스 부족 (파일 디스크립터, 세마포어 등)
Oracle 백그라운드 프로세스는 운영체제의 세마포어(Semaphore), 파일 디스크립터(File Descriptor), IPC(Inter-Process Communication) 자원을 사용합니다. 커널 파라미터인 kernel.sem, fs.file-max 등이 부족하게 설정되어 있거나, 이전 인스턴스의 비정상 종료로 인해 세마포어 및 공유 메모리 세그먼트가 해제되지 않고 남아 있을 경우 새로운 인스턴스가 자원을 확보하지 못해 이 에러가 발생합니다. 이 경우 ipcs 명령어로 잔류 IPC 자원을 확인하고 정리하는 것이 선행되어야 합니다.
해결 방법
1. SGA 메모리 관련 해결
먼저 현재 SGA 설정 값을 확인합니다.
-- 현재 SGA 파라미터 확인
SHOW PARAMETER SGA;
SHOW PARAMETER MEMORY_TARGET;
-- 상세 SGA 구성 요소 확인
SELECT COMPONENT, CURRENT_SIZE/1024/1024 AS "SIZE(MB)"
FROM V$SGA_DYNAMIC_COMPONENTS;
Linux 환경에서 커널 공유 메모리 파라미터를 확인하고 조정합니다.
# 현재 커널 파라미터 확인
sysctl kernel.shmmax
sysctl kernel.shmall
# /etc/sysctl.conf 에 아래와 같이 설정 (예: SGA 8GB 기준)
kernel.shmmax = 8589934592
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
# 변경 사항 즉시 적용
sysctl -p
SGA 크기를 줄여 재기동하는 방법도 고려합니다.
-- pfile 생성 후 SGA 값 조정
CREATE PFILE='/tmp/init_recovery.ora' FROM SPFILE;
-- 텍스트 편집기로 /tmp/init_recovery.ora 열어 SGA_TARGET 값 줄이기
-- pfile로 기동
STARTUP PFILE='/tmp/init_recovery.ora';
2. 초기화 파라미터(spfile) 손상 및 잘못된 설정 해결
spfile이 손상된 경우 pfile로 복구합니다.
-- Alert log에서 에러 발생 직전 파라미터 확인 후 pfile 수동 작성
-- 아래는 기본 pfile 예제
-- /u01/app/oracle/product/19c/dbs/initORCL.ora
/*
db_name=ORCL
db_block_size=8192
sga_target=2G
pga_aggregate_target=512M
processes=300
sessions=472
undo_management=AUTO
undo_tablespace=UNDOTBS1
control_files=('/u01/oradata/ORCL/control01.ctl','/u01/oradata/ORCL/control02.ctl')
*/
-- pfile로 기동 테스트
STARTUP PFILE='/u01/app/oracle/product/19c/dbs/initORCL.ora';
-- 정상 기동 확인 후 spfile 재생성
CREATE SPFILE FROM PFILE='/u01/app/oracle/product/19c/dbs/initORCL.ora';
SHUTDOWN IMMEDIATE;
STARTUP;
존재하지 않는 UNDO 테이블스페이스 이름이 설정된 경우:
-- UNDO 테이블스페이스 목록 확인
SELECT TABLESPACE_NAME, STATUS
FROM DBA_TABLESPACES
WHERE CONTENTS = 'UNDO';
-- 파라미터 수정
ALTER SYSTEM SET UNDO_TABLESPACE = 'UNDOTBS1' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
3. 잔류 IPC 자원 정리
Oracle 비정상 종료 후 남아있는 공유 메모리 및 세마포어를 정리합니다.
# 잔류 공유 메모리 세그먼트 확인
ipcs -m | grep oracle
# 잔류 세마포어 확인
ipcs -s | grep oracle
# Oracle 소유 공유 메모리 세그먼트 제거 (shmid 는 실제 값으로 대체)
ipcrm -m <shmid>
# Oracle 소유 세마포어 제거 (semid 는 실제 값으로 대체)
ipcrm -s <semid>
# 또는 oracle 유저 소유 IPC 자원 일괄 제거 스크립트
for i in $(ipcs -s | awk '/oracle/{print $2}'); do ipcrm -s $i; done
for i in $(ipcs -m | awk '/oracle/{print $2}'); do ipcrm -m $i; done
정리 후 인스턴스를 재기동합니다.
STARTUP;
-- 기동 후 백그라운드 프로세스 정상 여부 확인
SELECT PNAME, DESCRIPTION, BACKGROUND, LATCHWAIT, LATCHSPIN
FROM V$BGPROCESS
WHERE PADDR <> '00';
예방 방법
- 정기적인 Alert Log 모니터링 및 파라미터 변경 이력 관리
ORA-01077은 예고 없이 발생하는 경우가 대부분이지만, alert log에는 사전 경고 메시지가 기록되는 경우가 많습니다. 아래 쿼리를 활용하여 주기적으로 alert log를 점검하고, 파라미터 변경 시에는 반드시 변경 전 spfile의 백업을 남겨두는 습관을 가져야 합니다. 또한 운영체제 커널 파라미터 변경 내역도 형상 관리 도구에 기록하여 추적 가능하도록 유지하는 것이 중요합니다.
“`sql
— 최근 파라미터 변경 이력 확인
SELECT NAME, VALUE, DESCRIPTION, UPDATE_COMMENT, CON_ID
FROM V$PARAMETER_HISTORY
ORDER BY 1;
— spfile 백업 (정기 수행 권장)
CREATE PFILE=’/backup/pfile_backup_YYYYMMDD.ora’ FROM SPFILE;
“`
- Oracle 인스턴스 종료 절차 표준화 및 OS 리소스 임계값 모니터링
비정상적인 프로세스 종료(kill -9)나 서버 강제 재부팅을 피하고, 반드시 SHUTDOWN IMMEDIATE 또는 SHUTDOWN NORMAL을 사용하여 Oracle을 종료하는 표준 절차를 수립해야 합니다. 운영체제 수준에서는 공유 메모리, 세마포어, 파일 디스크립터 사용량을 모니터링하여 임계값 초과 시 자동 알림이 발생하도록 구성하면 사전에 문제를 감지할 수 있습니다.
관련 에러
- ORA-27102:
out of memory— SGA 메모리 할당 실패 시 ORA-01077과 함께 발생하는 경우가 많으며, 운영체제 공유 메모리 파라미터 조정으로 해결합니다. - ORA-00445:
background process "xxxx" did not start after N seconds— 특정 백그라운드 프로세스가 지정된 시간 내에 시작되지 않을 때 발생하며, ORA-01077의 전조 증상으로 alert log에 선행 기록되는 경우가 많습니다. - ORA-00600: 내부 에러 코드로, spfile 손상이나 메모리 문제와 함께 동반 발생할 수 있습니다.
- ORA-04031: SGA 내 공유 풀(Shared Pool) 메모리 부족 에러로, 메모리 설정 문제와 연관되어 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.