2026년 08월 10일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-02095 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-02095 specified initialization parameter cannot be modified 는?
ORA-02095는 Oracle 데이터베이스에서 특정 초기화 파라미터(Initialization Parameter)를 ALTER SYSTEM 또는 ALTER SESSION 명령으로 동적으로 변경하려 할 때 발생하는 에러입니다. 해당 파라미터가 정적(Static) 파라미터로 분류되어 있어 인스턴스가 실행 중인 상태에서는 수정이 불가능하며, 변경 사항을 적용하려면 데이터베이스를 재시작해야 합니다. 주로 DBA가 운영 중인 시스템에서 성능 튜닝이나 설정 변경을 시도할 때 맞닥뜨리는 에러로, 파라미터의 수정 가능 범위(Modifiable Scope)를 사전에 파악하지 못한 경우 자주 발생합니다.
주요 발생 원인
1. 정적(Static) 파라미터를 동적으로 변경 시도
Oracle 초기화 파라미터는 크게 동적(Dynamic)과 정적(Static) 두 가지로 나뉩니다. PROCESSES, DB_BLOCK_SIZE, DB_NAME 같은 정적 파라미터는 데이터베이스가 기동 중일 때는 절대 변경할 수 없으며, spfile(서버 파라미터 파일) 수정 후 재기동이 필요합니다. 이를 인지하지 못한 채 ALTER SYSTEM SET을 사용하면 즉시 ORA-02095가 발생합니다.
2. SCOPE=MEMORY 옵션 사용 시 정적 파라미터 지정
ALTER SYSTEM SET ... SCOPE=MEMORY 구문은 현재 실행 중인 인스턴스의 메모리에만 즉시 반영하는 방식입니다. 그러나 정적 파라미터는 메모리 변경 자체가 허용되지 않으므로, SCOPE=MEMORY 옵션을 사용하더라도 ORA-02095 에러가 발생합니다. DBA들이 “메모리에만 적용하면 되지 않을까?”라는 오해로 시도하는 경우가 많아 빈번히 발생하는 원인 중 하나입니다.
3. SCOPE=BOTH 또는 SCOPE=SPFILE 지정 없이 실행
ALTER SYSTEM 명령 실행 시 SCOPE 옵션을 생략하면 기본값은 SPFILE 사용 여부에 따라 달라집니다. SPFILE을 사용하는 환경에서 일부 파라미터는 SCOPE=SPFILE로만 변경이 허용되는데, 이를 SCOPE=BOTH나 SCOPE=MEMORY로 시도할 경우 에러가 발생합니다. 특히 RAC(Real Application Clusters) 환경에서는 파라미터 적용 범위가 더욱 복잡해져 실수가 잦습니다.
해결 방법
원인 1 해결: 파라미터 수정 가능 여부 사전 확인 후 SPFILE 변경
변경 전 반드시 V$PARAMETER 뷰를 통해 해당 파라미터의 ISSYS_MODIFIABLE 컬럼을 확인하세요. 값이 FALSE이면 정적 파라미터로 재기동이 필요합니다.
-- 파라미터의 동적 변경 가능 여부 확인
SELECT name,
value,
issys_modifiable,
isinstance_modifiable,
description
FROM v$parameter
WHERE name = 'processes';
-- 결과 예시: ISSYS_MODIFIABLE = FALSE → 정적 파라미터
-- 정적 파라미터는 SCOPE=SPFILE로만 변경 가능 (재기동 후 적용)
ALTER SYSTEM SET processes = 500 SCOPE = SPFILE;
-- 변경 후 spfile 내용 확인
SELECT name, value
FROM v$spparameter
WHERE name = 'processes';
-- 데이터베이스 재기동 (변경 사항 반영)
-- SHUTDOWN IMMEDIATE;
-- STARTUP;
원인 2 해결: SCOPE=SPFILE 옵션으로 변경
정적 파라미터는 반드시 SCOPE=SPFILE 옵션을 사용해야 합니다. 아래와 같이 수정하면 에러 없이 spfile에만 기록되며, 다음 재기동 시 적용됩니다.
-- 잘못된 방법 (ORA-02095 발생)
ALTER SYSTEM SET db_block_size = 16384 SCOPE = MEMORY; -- ERROR!
-- 올바른 방법 (SPFILE에만 기록)
ALTER SYSTEM SET db_block_size = 16384 SCOPE = SPFILE;
-- 모든 파라미터의 수정 가능 범위를 한 번에 조회하는 쿼리
SELECT name,
value,
issys_modifiable,
CASE issys_modifiable
WHEN 'IMMEDIATE' THEN '즉시 변경 가능 (재기동 불필요)'
WHEN 'DEFERRED' THEN '신규 세션부터 적용 (재기동 불필요)'
WHEN 'FALSE' THEN '재기동 필요 (정적 파라미터)'
END AS 변경가능범위
FROM v$parameter
WHERE name IN ('processes', 'db_block_size', 'sga_max_size',
'pga_aggregate_target', 'log_buffer')
ORDER BY issys_modifiable;
원인 3 해결: RAC 환경에서 올바른 SID 지정과 SCOPE 사용
RAC 환경에서는 특정 인스턴스에만 적용하거나, 모든 인스턴스에 적용할지 명시해야 합니다.
-- RAC 환경: 특정 인스턴스에만 SPFILE 변경 적용
ALTER SYSTEM SET processes = 500
SCOPE = SPFILE
SID = 'ORCL1';
-- RAC 환경: 모든 인스턴스에 SPFILE 변경 적용
ALTER SYSTEM SET processes = 500
SCOPE = SPFILE
SID = '*';
-- 현재 적용된 spfile 파라미터 전체 확인
SELECT sid, name, value, isspecified
FROM v$spparameter
WHERE isspecified = 'TRUE'
ORDER BY name;
-- PFILE 환경(init.ora)에서는 직접 파일 수정 후 재기동
-- /u01/app/oracle/product/19c/dbhome_1/dbs/initORCL.ora 파일 직접 편집
-- processes=500
-- SPFILE을 PFILE로 변환하여 수동 편집 후 다시 SPFILE 생성하는 방법
CREATE PFILE = '/tmp/initORCL_backup.ora' FROM SPFILE;
-- (파일 편집 후)
CREATE SPFILE FROM PFILE = '/tmp/initORCL_backup.ora';
동적 변경 가능한 주요 파라미터 vs 정적 파라미터 비교
-- 동적/정적 파라미터 분류 전체 목록 조회
SELECT name,
issys_modifiable,
COUNT(*) OVER (PARTITION BY issys_modifiable) AS 파라미터수
FROM v$parameter
ORDER BY issys_modifiable, name;
-- 자주 변경하는 파라미터의 수정 가능 여부 일괄 확인
SELECT name,
value,
issys_modifiable,
isses_modifiable
FROM v$parameter
WHERE name IN (
'sga_target', -- IMMEDIATE (동적)
'pga_aggregate_target', -- IMMEDIATE (동적)
'processes', -- FALSE (정적)
'sessions', -- FALSE (정적)
'db_block_size', -- FALSE (정적)
'db_name', -- FALSE (정적)
'log_buffer', -- FALSE (정적)
'open_cursors' -- IMMEDIATE (동적)
);
예방 방법
1. 파라미터 변경 전 표준 점검 절차(Checklist) 수립
모든 파라미터 변경 작업 전에 반드시 V$PARAMETER 뷰에서 ISSYS_MODIFIABLE 컬럼을 확인하는 절차를 팀 표준으로 정착시키세요. 아래 쿼리를 변경 작업 SOP(Standard Operating Procedure)에 포함시켜, DBA 누구나 실행 전 체크할 수 있도록 문서화하는 것이 좋습니다. 특히 신입 DBA나 파트타임 DBA가 있는 조직에서는 이 절차가 치명적인 실수를 예방합니다.
-- 변경 전 필수 점검 쿼리 (팀 SOP에 포함 권장)
SELECT name,
value AS 현재값,
issys_modifiable AS 시스템변경가능여부,
isses_modifiable AS 세션변경가능여부,
isinstance_modifiable AS 인스턴스변경가능여부
FROM v$parameter
WHERE name = :파라미터명;
2. 변경 이력 관리 및 SPFILE 정기 백업
파라미터 변경 이력을 DBA_HIST_PARAMETER 뷰 또는 별도의 변경 관리 테이블에 기록하여 추적 가능하게 유지하세요. 또한 운영 환경에서는 파라미터 변경 전 SPFILE을 PFILE로 백업해두는 습관을 들이면, 잘못된 설정으로 인한 기동 실패 시 신속하게 복구할 수 있습니다.
-- SPFILE 백업 (변경 작업 전 습관화)
CREATE PFILE = '/backup/dba/initORCL_20241201.ora' FROM SPFILE;
-- 파라미터 변경 이력 조회 (AWR 활용)
SELECT snap_id,
parameter_name,
value,
isdefault
FROM dba_hist_parameter
WHERE parameter_name = 'processes'
ORDER BY snap_id DESC
FETCH FIRST 10 ROWS ONLY;
관련 에러
- ORA-02096:
specified initialization parameter is not modifiable with this option— 파라미터 자체는 변경 가능하나 지정한 SCOPE 옵션이 잘못된 경우 발생합니다. ORA-02095와 혼동되기 쉬우며 SCOPE 옵션 조정으로 해결됩니다. - ORA-32001:
write to SPFILE requested but no SPFILE is in use— SPFILE 없이 PFILE로 기동된 인스턴스에서SCOPE=SPFILE을 사용할 때 발생합니다. SPFILE 생성 후 재기동이 필요합니다. - ORA-01034:
ORACLE not available— 잘못된 파라미터 설정으로 인스턴스 기동이 실패할 때 연계되어 발생할 수 있으며, PFILE 백업이 복구의 핵심입니다. - ORA-00093:
_parameter_name must be between x and y— 파라미터 값의 범위를 벗어났을 때 발생하며, 정적 파라미터 변경 시 함께 확인해야 합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.