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

ORA-02096
2026년 08월 10일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-02096 specified initialization parameter is not modifiable with this option 는?

ORA-02096 에러는 Oracle 데이터베이스에서 특정 초기화 파라미터를 변경하려고 할 때, 해당 파라미터가 현재 사용 중인 옵션(SCOPE 또는 세션/시스템 레벨)으로는 수정이 불가능할 때 발생하는 에러입니다. 예를 들어, 일부 파라미터는 ALTER SYSTEM 명령어로만 변경이 가능하거나, 데이터베이스 재시작이 필요한 SPFILE 방식으로만 수정할 수 있도록 제한되어 있습니다. 이 에러는 주로 DBA가 운영 중인 시스템에서 동적으로 파라미터를 변경하려 할 때 빈번히 발생하며, 파라미터의 수정 가능 범위(Modifiable Scope)를 정확히 이해하지 못한 경우 혼란을 야기할 수 있습니다.


주요 발생 원인

  • SCOPE=MEMORY 또는 SCOPE=BOTH로 변경 불가능한 파라미터를 수정하려는 경우

Oracle의 초기화 파라미터 중 일부는 동적으로 변경이 불가능(Static Parameter)하며, 반드시 SPFILE을 통해 설정한 후 데이터베이스를 재시작해야만 적용됩니다. 이러한 파라미터에 SCOPE=MEMORY 또는 SCOPE=BOTH 옵션을 사용하면 ORA-02096 에러가 발생합니다. 예를 들어 DB_BLOCK_SIZE, CLUSTER_DATABASE, UNDO_MANAGEMENT 등이 대표적인 Static Parameter에 해당합니다.

  • ALTER SESSION으로 시스템 레벨 전용 파라미터를 변경하려는 경우

일부 파라미터는 세션 레벨에서의 변경을 허용하지 않고 오직 시스템 전체(ALTER SYSTEM)에만 적용 가능한 파라미터입니다. DBA 혹은 개발자가 세션 단위로 특정 파라미터를 튜닝하려 할 때, 해당 파라미터가 세션 레벨 변경을 지원하지 않으면 이 에러가 발생합니다. V$PARAMETER 뷰의 ISSYS_MODIFIABLEISSES_MODIFIABLE 컬럼을 통해 사전에 확인이 가능합니다.

  • PFILE 환경에서 SPFILE 전용 SCOPE 옵션을 사용한 경우

데이터베이스가 PFILE(init.ora)로 기동된 경우, SCOPE=SPFILE 또는 SCOPE=BOTH 옵션은 사용할 수 없습니다. SPFILE이 존재하지 않는 환경에서 이러한 SCOPE 옵션을 지정하면 ORA-02096이 아닌 ORA-32001이 발생할 수도 있으나, 파라미터 수정 가능성 자체와 맞물려 ORA-02096이 함께 유발되는 경우도 있습니다. 운영 환경에서는 반드시 SPFILE 사용 여부를 사전에 확인해야 합니다.


해결 방법

원인 1 해결: Static Parameter는 SCOPE=SPFILE로 변경 후 재시작

Static Parameter는 메모리에 즉시 반영할 수 없으므로, 반드시 SCOPE=SPFILE로 지정하여 SPFILE에만 기록한 뒤 데이터베이스를 재시작해야 합니다.

-- 잘못된 방법 (ORA-02096 발생)
ALTER SYSTEM SET DB_BLOCK_SIZE = 16384 SCOPE=MEMORY;
-- ORA-02096: specified initialization parameter is not modifiable with this option

-- 올바른 방법: SPFILE에 기록 후 DB 재시작
ALTER SYSTEM SET DB_BLOCK_SIZE = 16384 SCOPE=SPFILE;

-- 데이터베이스 재시작
SHUTDOWN IMMEDIATE;
STARTUP;

-- 적용 확인
SHOW PARAMETER DB_BLOCK_SIZE;

원인 2 해결: 파라미터의 수정 가능 범위 사전 확인 후 적절한 명령 사용

파라미터 변경 전에 V$PARAMETER 뷰를 조회하여 세션/시스템 레벨 수정 가능 여부를 반드시 확인하세요.

-- 파라미터의 수정 가능 범위 확인
SELECT name,
       value,
       isses_modifiable,   -- TRUE: ALTER SESSION 가능
       issys_modifiable,   -- IMMEDIATE/DEFERRED/FALSE
       isinstance_modifiable
FROM   v$parameter
WHERE  name = 'optimizer_mode';

-- ISSES_MODIFIABLE = FALSE인 파라미터를 ALTER SESSION으로 변경 시 에러 발생
-- 잘못된 방법 (세션 레벨 변경 불가 파라미터 예시)
ALTER SESSION SET UNDO_MANAGEMENT = 'AUTO';
-- ORA-02096 발생

-- 올바른 방법: ALTER SYSTEM으로 시스템 레벨에서 변경
ALTER SYSTEM SET UNDO_MANAGEMENT = 'AUTO' SCOPE=SPFILE;

-- Static인지 Dynamic인지 한눈에 확인하는 쿼리
SELECT name,
       value,
       issys_modifiable,
       isses_modifiable,
       description
FROM   v$parameter
WHERE  issys_modifiable = 'FALSE'
ORDER  BY name;

원인 3 해결: PFILE/SPFILE 사용 여부 확인 및 환경에 맞는 SCOPE 사용

-- 현재 SPFILE 사용 여부 확인
SELECT value FROM v$parameter WHERE name = 'spfile';
-- value가 NULL이 아니면 SPFILE 사용 중

-- 또는 아래 방법으로도 확인 가능
SHOW PARAMETER SPFILE;

-- PFILE 환경에서는 SCOPE=MEMORY만 사용 가능한 Dynamic 파라미터 변경
ALTER SYSTEM SET PROCESSES = 300 SCOPE=MEMORY;

-- SPFILE이 없는 환경에서 SPFILE 생성 (이후 SPFILE 환경으로 전환)
CREATE SPFILE FROM PFILE='/u01/app/oracle/product/19c/db_1/dbs/initORCL.ora';

-- SPFILE 생성 후 재시작하면 이후 SCOPE=SPFILE, SCOPE=BOTH 사용 가능
SHUTDOWN IMMEDIATE;
STARTUP;

-- 변경 이력 모니터링 (12c 이상)
SELECT start_time, end_time, name, value, con_id
FROM   v$parameter_valid_values
WHERE  name LIKE '%processes%';

예방 방법

  • 파라미터 변경 전 V$PARAMETER 뷰를 통한 수정 가능 범위 표준화 점검 절차 수립

모든 파라미터 변경 작업 전에 V$PARAMETER 뷰의 ISSES_MODIFIABLE, ISSYS_MODIFIABLE 컬럼을 조회하는 표준 점검 절차를 팀 내에 정착시키세요. 특히 Static Parameter 목록을 별도로 관리하고, 해당 파라미터 변경 시에는 항상 변경 관리(Change Management) 프로세스를 통해 DB 재시작 일정을 사전에 확보하는 것이 중요합니다. 아래 쿼리를 점검 체크리스트에 포함시키면 실수를 줄일 수 있습니다.

“`sql

— 변경 전 필수 점검 쿼리

SELECT name,

value,

CASE issys_modifiable

WHEN ‘IMMEDIATE’ THEN ‘ALTER SYSTEM 즉시 적용 가능’

WHEN ‘DEFERRED’ THEN ‘ALTER SYSTEM 이후 접속 세션부터 적용’

WHEN ‘FALSE’ THEN ‘재시작 필요 (SCOPE=SPFILE만 허용)’

END AS modifiable_info,

isses_modifiable

FROM v$parameter

WHERE name = :param_name;

“`

  • SPFILE 기반 운영 환경 표준화 및 정기적인 SPFILE 백업

모든 운영 환경에서 PFILE 대신 SPFILE을 사용하도록 표준화하고, SPFILE을 주기적으로 백업하여 파라미터 변경 이력을 보존하세요. RMAN을 활용하여 SPFILE을 정기적으로 백업하면, 잘못된 파라미터 변경 후 신속하게 복구할 수 있습니다.

“`sql

— RMAN을 통한 SPFILE 백업

— RMAN> BACKUP SPFILE;

— 또는 수동으로 PFILE 형태로 백업 (가독성 있는 텍스트 형태)

CREATE PFILE=’/backup/pfile_backup_20240101.ora’ FROM SPFILE;

“`


관련 에러

  • ORA-32001: WRITE TO SPFILE REQUESTED BUT NO SPFILE IS IN USE — SPFILE 없이 SCOPE=SPFILE을 사용할 때 발생하며, ORA-02096과 유사한 상황에서 함께 접할 수 있습니다.
  • ORA-02097: parameter cannot be modified because specified value is invalid — 파라미터 값 자체가 유효하지 않을 때 발생하는 에러로, ORA-02096과 혼동하기 쉽습니다.
  • ORA-00069: 파라미터 관련 잠금(Lock) 이슈로, 시스템 파라미터 변경 중 발생할 수 있습니다.
  • ORA-01034: ORACLE NOT AVAILABLE — Static Parameter 변경 후 재시작 과정에서 DB 기동 실패 시 함께 발생할 수 있어 주의가 필요합니다.

DBMS 에러 코드 시리즈

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

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

댓글 남기기