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

ORA-32001
2026년 10월 09일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-32001 write to SPFILE requested but no SPFILE is in use 는?

ORA-32001은 데이터베이스 관리자가 ALTER SYSTEM 명령어에 SCOPE=SPFILE 또는 SCOPE=BOTH 옵션을 사용하여 파라미터를 변경하려 할 때, 현재 인스턴스가 SPFILE(Server Parameter File)이 아닌 PFILE(Text Parameter File, 즉 init.ora)로 기동되어 있는 경우 발생하는 에러입니다. SPFILE은 바이너리 형식의 서버 파라미터 파일로, Oracle 9i 이후 도입되어 파라미터 변경 사항을 영구적으로 저장하는 역할을 합니다. 이 에러는 특히 운영 환경에서 파라미터를 영구적으로 변경하려다 발생하면 서비스에 영향을 줄 수 있으므로 빠른 원인 파악과 조치가 필요합니다.


주요 발생 원인

1. PFILE(init.ora)로 데이터베이스가 기동된 경우

가장 흔한 원인으로, 데이터베이스를 시작할 때 SPFILE 대신 PFILE을 명시적으로 지정하거나, SPFILE이 존재하지 않아 자동으로 PFILE이 사용된 경우입니다. Oracle은 기동 시 기본적으로 $ORACLE_HOME/dbs/spfile.ora 경로의 SPFILE을 찾지만, 이 파일이 없거나 손상된 경우 init.ora 파일을 대신 사용합니다. 이 상태에서 SCOPE=SPFILE이 포함된 ALTER SYSTEM 명령을 실행하면 ORA-32001 에러가 즉시 발생합니다.

2. SPFILE이 삭제되거나 이동된 경우

운영 중 실수로 SPFILE 파일 자체가 삭제되거나 다른 경로로 이동된 경우, 다음 재기동 시 Oracle이 SPFILE을 찾지 못하고 PFILE로 기동하게 됩니다. 특히 스토리지 마이그레이션이나 디스크 정리 작업 중에 이런 상황이 자주 발생합니다. SPFILE 없이 기동된 인스턴스는 메모리상에서만 파라미터를 관리하므로, 재기동 후 변경 사항이 모두 사라지는 심각한 문제로 이어질 수 있습니다.

3. RAC 환경에서 SPFILE 경로 설정 오류

Oracle RAC(Real Application Clusters) 환경에서는 SPFILE이 공유 스토리지(ASM 또는 공유 파일시스템)에 위치해야 하지만, 잘못된 경로 설정이나 ASM 디스크그룹 마운트 실패로 인해 SPFILE을 인식하지 못하는 경우가 있습니다. 각 노드가 로컬 PFILE로 기동되면 클러스터 전체에서 ORA-32001 에러가 발생할 수 있으며, 이 경우 파라미터 동기화 문제까지 복합적으로 발생할 수 있어 더욱 주의가 필요합니다.


해결 방법

Step 1. 현재 기동 방식 확인

먼저 현재 인스턴스가 SPFILE로 기동되었는지 PFILE로 기동되었는지 확인합니다.

-- SPFILE 사용 여부 확인 (값이 NULL이면 PFILE 사용 중)
SHOW PARAMETER SPFILE;

-- 또는 V$PARAMETER 뷰로 확인
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME = 'spfile';

-- V$SPPARAMETER 로도 확인 가능 (ISSPECIFIED = TRUE면 SPFILE 사용 중)
SELECT COUNT(*)
FROM V$SPPARAMETER
WHERE ISSPECIFIED = 'TRUE';

Step 2. 현재 PFILE에서 SPFILE 생성

현재 인스턴스의 파라미터를 기반으로 SPFILE을 새로 생성합니다.

-- 메모리 현재 파라미터로 SPFILE 생성 (기본 경로)
CREATE SPFILE FROM MEMORY;

-- 특정 경로에 SPFILE 생성
CREATE SPFILE = '/u01/app/oracle/product/19c/db_1/dbs/spfileORCL.ora'
FROM MEMORY;

-- 기존 PFILE에서 SPFILE 생성 (init.ora 파일 경로 지정)
CREATE SPFILE = '/u01/app/oracle/product/19c/db_1/dbs/spfileORCL.ora'
FROM PFILE = '/u01/app/oracle/product/19c/db_1/dbs/initORCL.ora';

Step 3. SPFILE로 데이터베이스 재기동

SPFILE을 생성한 후, 데이터베이스를 재기동하여 SPFILE이 적용되도록 합니다.

-- 데이터베이스 종료
SHUTDOWN IMMEDIATE;

-- SPFILE로 기동 (SPFILE이 기본 경로에 있으면 자동 인식)
STARTUP;

-- 또는 명시적으로 SPFILE 경로 지정하여 기동
STARTUP PFILE='/u01/app/oracle/product/19c/db_1/dbs/spfileORCL.ora';

-- 재기동 후 SPFILE 사용 확인
SHOW PARAMETER SPFILE;

Step 4. 임시 해결책 – SCOPE=MEMORY 사용

만약 즉시 재기동이 불가능한 상황이라면 SCOPE=MEMORY 옵션으로 현재 세션에만 파라미터를 적용합니다. 단, 이 방법은 재기동 후 변경 사항이 사라지므로 반드시 SPFILE 생성 후 영구 적용해야 합니다.

-- 재기동 없이 현재 메모리에만 파라미터 적용 (임시 조치)
ALTER SYSTEM SET sga_target = 4G SCOPE=MEMORY;
ALTER SYSTEM SET pga_aggregate_target = 1G SCOPE=MEMORY;

-- 이후 SPFILE 생성 및 재기동으로 영구 적용 필요
CREATE SPFILE FROM MEMORY;

Step 5. RAC 환경에서의 조치

RAC 환경에서는 공유 스토리지의 SPFILE 경로를 확인하고 수정합니다.

-- ASM에 SPFILE 생성 (RAC 환경)
CREATE SPFILE = '+DATA/ORCL/spfileORCL.ora'
FROM PFILE = '/u01/app/oracle/product/19c/db_1/dbs/initORCL.ora';

-- 각 노드의 init.ora에 SPFILE 경로 등록 (단 한 줄만 포함)
-- /u01/app/oracle/product/19c/db_1/dbs/initORCL.ora 파일 내용:
-- SPFILE='+DATA/ORCL/spfileORCL.ora'

-- 클러스터 재기동
SHUTDOWN IMMEDIATE;
STARTUP;

-- 모든 노드에서 SPFILE 확인
SELECT INSTANCE_NAME, VALUE
FROM GV$PARAMETER
WHERE NAME = 'spfile';

예방 방법

1. 정기적인 SPFILE 백업 및 상태 점검 자동화

SPFILE은 데이터베이스의 핵심 구성 파일이므로, RMAN 백업에 반드시 포함시키고 별도 복사본도 주기적으로 보관해야 합니다. 아래와 같이 RMAN과 스크립트를 활용하여 SPFILE 백업 및 상태 모니터링을 자동화하는 것이 Best Practice입니다.

-- RMAN으로 SPFILE 백업
RMAN> BACKUP SPFILE;

-- SPFILE을 텍스트 PFILE로 정기 백업 (크론잡 등으로 자동화)
CREATE PFILE = '/backup/pfile_backup_' ||
    TO_CHAR(SYSDATE, 'YYYYMMDD') || '.ora'
FROM SPFILE;

-- 모니터링 쿼리: SPFILE 미사용 감지 알람용
SELECT INSTANCE_NAME,
       CASE WHEN VALUE IS NULL OR VALUE = ''
            THEN 'WARNING: PFILE 사용 중 - 즉시 확인 필요!'
            ELSE 'OK: SPFILE 사용 중 (' || VALUE || ')'
       END AS SPFILE_STATUS
FROM V$INSTANCE, V$PARAMETER
WHERE V$PARAMETER.NAME = 'spfile';

2. 표준화된 기동/종료 절차 문서화 및 준수

운영 환경에서 데이터베이스를 기동할 때는 반드시 표준화된 절차를 따르고, PFILE 명시 기동은 비상 복구 상황 외에는 금지하는 정책을 수립해야 합니다. 특히 신규 서버 구축이나 마이그레이션 후에는 아래 체크리스트를 반드시 실행하여 SPFILE 적용 여부를 검증합니다.

-- 기동 후 필수 체크리스트 쿼리
SELECT
    'SPFILE 경로'        AS CHECK_ITEM,
    NVL(VALUE, 'PFILE 사용 중 - 조치 필요!') AS STATUS
FROM V$PARAMETER WHERE NAME = 'spfile'
UNION ALL
SELECT
    'DB 기동 시각',
    TO_CHAR(STARTUP_TIME, 'YYYY-MM-DD HH24:MI:SS')
FROM V$INSTANCE
UNION ALL
SELECT
    'INSTANCE 상태',
    STATUS
FROM V$INSTANCE;

관련 에러

  • ORA-32000: SPFILE write error – SPFILE이 존재하지만 파일 시스템 권한 문제나 디스크 공간 부족으로 SPFILE에 쓰기 실패 시 발생합니다.
  • ORA-32002: cannot create SPFILE already being used by the instance – 이미 SPFILE로 기동된 인스턴스에서 중복으로 SPFILE 생성을 시도할 때 발생합니다.
  • ORA-01565: error in identifying file – SPFILE 경로가 잘못 지정되었거나 파일이 없을 때 발생하며, ORA-32001과 함께 자주 발생합니다.
  • ORA-27037: unable to obtain file status – OS 레벨에서 SPFILE 파일 접근이 불가능할 때 발생하며, 스토리지 장애나 권한 문제와 관련이 있습니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기