2026년 10월 11일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-32017 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-32017 failure in updating SPFILE 는?
ORA-32017 에러는 Oracle 데이터베이스가 SPFILE(Server Parameter File)을 업데이트하려고 할 때 실패하는 경우 발생합니다. 주로 ALTER SYSTEM SET 명령어에 SCOPE=SPFILE 또는 SCOPE=BOTH 옵션을 사용할 때 나타나며, SPFILE에 변경 사항을 영구적으로 저장하지 못하는 상황을 의미합니다. 이 에러는 RAC(Real Application Clusters) 환경이나 단일 인스턴스 환경 모두에서 발생할 수 있으며, 데이터베이스 파라미터 변경이 제대로 반영되지 않아 운영 장애로 이어질 수 있는 심각한 문제입니다.
주요 발생 원인
- SPFILE이 존재하지 않거나 PFILE로 기동된 경우
데이터베이스가 SPFILE이 아닌 PFILE(init.ora)로 기동된 경우, SCOPE=SPFILE 또는 SCOPE=BOTH 옵션을 포함한 ALTER SYSTEM SET 명령을 실행하면 ORA-32017이 발생합니다. 이는 SPFILE 자체가 없거나, Oracle이 PFILE을 사용해 기동되었기 때문에 SPFILE 경로를 인식하지 못하는 상황입니다. 실제로 운영 환경에서 SPFILE 없이 PFILE만으로 DB를 올리는 경우 이런 실수가 자주 발생합니다.
- SPFILE 파일 권한 또는 파일 시스템 문제
SPFILE이 존재하더라도 OS 수준에서 파일 권한이 잘못 설정되어 있거나, 파일 시스템이 읽기 전용(read-only)으로 마운트된 경우, 혹은 디스크 공간이 부족한 경우에도 이 에러가 발생할 수 있습니다. Oracle 프로세스가 SPFILE에 쓰기 접근을 하지 못하면 업데이트 자체가 실패하게 됩니다. RAC 환경에서는 공유 스토리지(ASM 또는 NFS)의 권한 문제가 주요 원인이 되기도 합니다.
- RAC 환경에서 SPFILE 경로 불일치 또는 ASM 문제
RAC 환경에서는 모든 노드가 동일한 SPFILE을 공유해야 하는데, 특정 노드에서 SPFILE 경로가 다르게 설정되어 있거나 ASM 디스크 그룹에 문제가 생기면 ORA-32017이 발생합니다. ASM 인스턴스가 비정상 상태이거나, SPFILE이 ASM 내에 있는데 해당 디스크 그룹이 마운트되지 않은 경우도 포함됩니다. 이 경우 단순히 SQL 명령으로 해결되지 않고 ASM 레벨의 점검이 필요합니다.
해결 방법
원인 1 해결: SPFILE 존재 여부 확인 및 생성
먼저 현재 데이터베이스가 SPFILE을 사용하는지 확인합니다.
-- 현재 사용 중인 파라미터 파일 확인
SHOW PARAMETER SPFILE;
-- 또는 V$PARAMETER 뷰로 확인
SELECT NAME, VALUE
FROM V$PARAMETER
WHERE NAME = 'spfile';
-- 현재 인스턴스의 파라미터 파일 타입 확인
SELECT DECODE(VALUE, NULL, 'PFILE', 'SPFILE') AS PARAM_FILE_TYPE
FROM V$PARAMETER
WHERE NAME = 'spfile';
만약 VALUE가 NULL이라면 PFILE로 기동된 것입니다. 이 경우 SPFILE을 생성해야 합니다.
-- PFILE에서 SPFILE 생성 (DB가 기동된 상태에서 실행)
CREATE SPFILE FROM PFILE;
-- 특정 경로를 지정해 SPFILE 생성
CREATE SPFILE='/u01/app/oracle/product/19c/dbs/spfileORCL.ora'
FROM PFILE='/u01/app/oracle/product/19c/dbs/initORCL.ora';
-- RAC 환경에서 ASM에 SPFILE 생성
CREATE SPFILE='+DATA/ORCL/spfileORCL.ora' FROM PFILE;
SPFILE 생성 후에는 반드시 DB를 재기동하여 SPFILE로 기동되도록 합니다.
-- DB 재기동 (SPFILE 적용)
SHUTDOWN IMMEDIATE;
STARTUP;
-- 재기동 후 SPFILE 사용 여부 재확인
SHOW PARAMETER SPFILE;
원인 2 해결: 파일 권한 및 디스크 공간 확인
OS 레벨에서 SPFILE의 위치와 권한을 확인합니다.
-- SPFILE 경로 확인
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'spfile';
경로를 확인한 후 OS에서 아래 명령을 실행합니다.
# SPFILE 권한 확인
ls -la /u01/app/oracle/product/19c/dbs/spfileORCL.ora
# oracle 유저 권한으로 수정
chown oracle:oinstall /u01/app/oracle/product/19c/dbs/spfileORCL.ora
chmod 660 /u01/app/oracle/product/19c/dbs/spfileORCL.ora
# 디스크 공간 확인
df -h /u01/app/oracle/product/19c/dbs/
파일 시스템 공간이 부족한 경우, 불필요한 트레이스 파일이나 아카이브 로그를 정리합니다.
-- RMAN으로 불필요한 아카이브 삭제
-- RMAN 접속 후 실행
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
권한 문제 해결 후 파라미터 변경을 재시도합니다.
-- 권한 수정 후 파라미터 변경 재시도
ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/u01/arch' SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=4G SCOPE=SPFILE;
원인 3 해결: RAC 환경에서 SPFILE 확인 및 복구
RAC 환경에서 각 노드의 SPFILE 경로를 확인합니다.
-- 각 노드에서 실행하여 SPFILE 위치 확인
SELECT INST_ID, NAME, VALUE
FROM GV$PARAMETER
WHERE NAME = 'spfile'
ORDER BY INST_ID;
-- ASM 디스크 그룹 마운트 상태 확인 (ASM 인스턴스에서)
SELECT NAME, STATE, TYPE FROM V$ASM_DISKGROUP;
-- ASM 내 SPFILE 파일 확인
SELECT NAME, FILE_NUMBER, TYPE
FROM V$ASM_FILE
WHERE GROUP_NUMBER = (SELECT GROUP_NUMBER FROM V$ASM_DISKGROUP WHERE NAME = 'DATA');
ASM 내에서 SPFILE이 손상된 경우 백업으로부터 복구합니다.
-- RMAN으로 SPFILE 복구
RMAN> RESTORE SPFILE FROM AUTOBACKUP;
-- 또는 특정 백업셋에서 복구
RMAN> RESTORE SPFILE FROM '/backup/spfile_backup.bkp';
임시 방편으로 파라미터를 SCOPE=MEMORY만 적용하고 이후 SPFILE 복구 후 재설정할 수 있습니다.
-- SPFILE 복구 전 임시로 메모리에만 적용
ALTER SYSTEM SET PROCESSES=500 SCOPE=MEMORY;
-- SPFILE 복구 후 영구 적용
ALTER SYSTEM SET PROCESSES=500 SCOPE=SPFILE;
예방 방법
- SPFILE 정기 백업 및 모니터링 자동화
SPFILE은 데이터베이스 파라미터의 영구 저장소이므로, RMAN 백업 정책에 SPFILE 백업을 반드시 포함시켜야 합니다. 아래와 같이 RMAN 스크립트에 SPFILE 백업을 포함하고, cron job 또는 Oracle Scheduler로 자동화하세요.
“`sql
— RMAN으로 SPFILE 정기 백업 설정
BACKUP CURRENT CONTROLFILE FOR STANDBY
INCLUDE CURRENT SPFILE;
— 또는 별도로 SPFILE 백업
BACKUP SPFILE;
— Oracle Scheduler로 주기적 백업 작업 등록
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
JOB_NAME => ‘SPFILE_BACKUP_JOB’,
JOB_TYPE => ‘EXECUTABLE’,
JOB_ACTION => ‘/u01/scripts/backup_spfile.sh’,
REPEAT_INTERVAL => ‘FREQ=DAILY;BYHOUR=2’,
ENABLED => TRUE
);
END;
/
“`
또한 SPFILE이 위치한 파일 시스템의 디스크 사용률을 모니터링하는 스크립트를 운영하여 공간 부족을 사전에 탐지하세요.
- 파라미터 변경 전 PFILE 백업 습관화
파라미터를 변경하기 전에는 반드시 현재 SPFILE 내용을 PFILE로 덤프해 백업해 두는 습관을 들여야 합니다. 이렇게 하면 SPFILE이 손상되거나 잘못된 값이 들어가더라도 빠르게 복구할 수 있습니다.
“`sql
— 파라미터 변경 전 SPFILE을 PFILE로 백업
CREATE PFILE=’/u01/backup/initORCL_backup_20240101.ora’ FROM SPFILE;
— 변경 작업 후 확인
ALTER SYSTEM SET MEMORY_TARGET=8G SCOPE=SPFILE;
— 문제 발생 시 PFILE로 복구
CREATE SPFILE FROM PFILE=’/u01/backup/initORCL_backup_20240101.ora’;
“`
관련 에러
- ORA-32001:
WRITE TO SPFILE REQUESTED BUT NO SPFILE IS IN USE— SPFILE 없이 PFILE로 기동 시 SPFILE 관련 작업 시도할 때 발생하며, ORA-32017과 함께 나타나는 경우가 많습니다. - ORA-32004:
obsolete or deprecated parameter(s) specified for RDBMS instance— 구버전 파라미터를 SPFILE에 적용하려 할 때 발생합니다. - ORA-32010:
cannot find entry to delete in SPFILE— SPFILE에서 존재하지 않는 파라미터를 삭제하려 할 때 발생합니다. - ORA-00119:
invalid specification for system parameter— 잘못된 파라미터 값 설정 시 발생하며, SPFILE 업데이트 실패로 이어질 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.