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

ORA-02095
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=BOTHSCOPE=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 에러 코드 시리즈

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

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

댓글 남기기