2026년 10월 10일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-32007 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-32007 string is a read only parameter; cannot change value 는?
ORA-32007 에러는 Oracle 데이터베이스에서 읽기 전용(Read Only)으로 지정된 초기화 파라미터의 값을 변경하려 할 때 발생합니다. 이 파라미터들은 데이터베이스가 시작될 때 결정되며, 런타임 중에는 어떠한 방법으로도 수정이 불가능합니다. 주로 ALTER SYSTEM SET 또는 ALTER SESSION SET 명령어를 통해 시스템 고정 파라미터를 변경하려 할 때 이 에러가 나타납니다.
주요 발생 원인
1. 정적(Static) 파라미터를 동적으로 변경 시도
Oracle의 초기화 파라미터 중 일부는 인스턴스가 실행 중인 상태에서 변경이 불가능한 정적 파라미터입니다. 예를 들어 DB_BLOCK_SIZE, DB_NAME, COMPATIBLE 등은 데이터베이스 생성 시 고정되거나 재기동이 필요한 파라미터로, 이를 런타임 중 ALTER SYSTEM 명령으로 변경하려 하면 ORA-32007이 발생합니다. 이는 의도적인 Oracle의 설계로, 핵심 아키텍처 파라미터를 보호하기 위한 메커니즘입니다.
2. 파라미터 파일(SPFILE)에서 읽기 전용으로 고정된 파라미터 수정 시도
Oracle SPFILE에는 특정 파라미터들이 명시적으로 읽기 전용으로 관리되는 경우가 있습니다. 일부 Hidden 파라미터나 내부적으로 관리되는 파라미터들은 DBA가 직접 변경하도록 설계되지 않았으며, 이를 강제로 변경하려 하면 해당 에러가 발생합니다. 특히 _ (언더스코어)로 시작하는 히든 파라미터를 잘못 조작할 때 자주 나타납니다.
3. Oracle RAC 환경에서 인스턴스별 파라미터 충돌
Oracle RAC(Real Application Clusters) 환경에서는 특정 파라미터가 클러스터 레벨에서 고정되어 있어 개별 인스턴스 레벨에서의 변경을 허용하지 않는 경우가 있습니다. 이런 파라미터들은 전체 클러스터의 일관성을 유지하기 위해 읽기 전용으로 설정되며, 단일 인스턴스에서 변경을 시도하면 ORA-32007이 발생합니다. RAC 환경에서 SID='*' 옵션과 SID='instance_name' 옵션의 혼용도 이 에러를 유발할 수 있습니다.
해결 방법
원인 1: 정적 파라미터 변경 시도 해결
먼저 해당 파라미터가 어떤 유형인지 확인합니다.
-- 파라미터의 변경 가능 여부 확인
SELECT name, value, issys_modifiable, isinstance_modifiable, isses_modifiable
FROM v$parameter
WHERE name = 'db_block_size'; -- 확인할 파라미터명으로 변경
-- 정적 파라미터 목록 전체 조회 (ISSYS_MODIFIABLE = 'FALSE')
SELECT name, value, issys_modifiable, description
FROM v$parameter
WHERE issys_modifiable = 'FALSE'
ORDER BY name;
ISSYS_MODIFIABLE 컬럼이 FALSE인 경우, 해당 파라미터는 데이터베이스 재기동 후에만 반영됩니다. 이 경우 SPFILE에만 기록하는 방식을 사용하세요.
-- SPFILE에만 기록 (즉시 반영 안 됨, 재기동 후 적용)
ALTER SYSTEM SET db_block_size = 8192 SCOPE=SPFILE;
-- 재기동 후 확인
-- SHUTDOWN IMMEDIATE;
-- STARTUP;
-- 그 후 확인:
SHOW PARAMETER db_block_size;
원인 2: 읽기 전용 파라미터의 대안적 접근
만약 해당 파라미터가 완전한 읽기 전용이라면, 아래 명령어로 수정 가능 여부를 먼저 점검해야 합니다.
-- 파라미터가 읽기 전용인지 확인
SELECT name,
value,
isdefault,
issys_modifiable,
isses_modifiable,
isinstance_modifiable,
isdeprecated
FROM v$parameter
WHERE issys_modifiable = 'FALSE'
AND isses_modifiable = 'FALSE'
ORDER BY name;
-- Hidden 파라미터 확인 (읽기 전용 가능성 높음)
SELECT ksppinm AS parameter_name,
ksppstvl AS current_value,
ksppdesc AS description
FROM x$ksppi a
JOIN x$ksppcv b ON a.indx = b.indx
WHERE ksppinm LIKE '\_%' ESCAPE '\'
AND ksppinm LIKE '%your_param%';
이처럼 완전히 읽기 전용인 파라미터는 일반적인 방법으로는 변경이 불가합니다. Oracle Support에 문의하거나 대안적인 설정 방법을 검토하세요.
원인 3: RAC 환경에서의 해결 방법
-- RAC 환경에서 특정 인스턴스 파라미터 확인
SELECT inst_id, name, value, issys_modifiable
FROM gv$parameter
WHERE name = 'your_parameter_name'
ORDER BY inst_id;
-- RAC 전체 인스턴스에 적용 (읽기 전용이 아닌 경우)
ALTER SYSTEM SET parameter_name = 'value'
SID = '*'
SCOPE = BOTH;
-- 특정 인스턴스에만 SPFILE 기록 방식으로 적용
ALTER SYSTEM SET parameter_name = 'value'
SID = 'orcl1'
SCOPE = SPFILE;
-- 변경 결과 검증
SELECT inst_id, name, value
FROM gv$parameter
WHERE name = 'parameter_name';
파라미터 변경 가능 여부 종합 확인 스크립트
-- 실무에서 바로 활용 가능한 파라미터 속성 종합 확인
SELECT
p.name AS 파라미터명,
p.value AS 현재값,
p.issys_modifiable AS 시스템변경가능,
p.isses_modifiable AS 세션변경가능,
p.isinstance_modifiable AS 인스턴스변경가능,
p.isdefault AS 기본값여부,
p.isdeprecated AS 사용중단여부,
CASE p.issys_modifiable
WHEN 'IMMEDIATE' THEN '즉시 변경 가능 (SCOPE=BOTH 가능)'
WHEN 'DEFERRED' THEN '다음 세션부터 반영'
WHEN 'FALSE' THEN '재기동 필요 (SCOPE=SPFILE만 가능)'
ELSE '읽기 전용 - 변경 불가'
END AS 변경방법안내
FROM v$parameter p
WHERE p.name IN (
'db_block_size',
'compatible',
'db_name',
'db_files',
'undo_management'
)
ORDER BY p.name;
예방 방법
1. 파라미터 변경 전 속성 반드시 사전 점검
파라미터를 변경하기 전에 항상 V$PARAMETER 뷰를 통해 ISSYS_MODIFIABLE, ISSES_MODIFIABLE 값을 사전에 확인하는 것을 팀 내 표준 절차로 정립하세요. 이를 Change Management 프로세스에 포함시켜, DBA가 파라미터를 변경할 때 반드시 사전 검토 단계를 거치도록 합니다. 특히 신규 DBA나 운영 엔지니어에게는 파라미터 유형(Static/Dynamic/Read-Only)에 대한 교육을 사전에 실시하여 불필요한 에러 발생을 방지해야 합니다.
-- 변경 전 필수 점검 쿼리 (표준화 권장)
SELECT name, value, issys_modifiable, isses_modifiable
FROM v$parameter
WHERE name = :param_name;
2. SCOPE 옵션 전략적 활용 및 변경 이력 관리
ALTER SYSTEM SET 시 SCOPE 옵션(MEMORY, SPFILE, BOTH)을 명확히 이해하고 사용하세요. 중요한 파라미터 변경 시에는 변경 전/후 값을 반드시 로그로 기록하고, 운영 환경에서는 검증된 파라미터 변경 스크립트를 버전 관리 시스템(Git 등)에 보관하는 Best Practice를 따르세요. 이를 통해 장애 발생 시 신속하게 롤백할 수 있는 체계를 갖출 수 있습니다.
-- 파라미터 변경 이력 추적 (AWR 기반)
SELECT snap_id, parameter_name, old_val, new_val, changed_by
FROM dba_hist_parameter
WHERE parameter_name = 'your_parameter'
ORDER BY snap_id DESC;
관련 에러
- ORA-32001: SPFILE에 쓰기 요청이 발생했으나 SPFILE이 사용 중이지 않을 때 발생. PFILE 사용 환경에서
SCOPE=SPFILE사용 시 나타남. - ORA-32010: SPFILE에서 파라미터 항목을 찾을 수 없을 때 발생. 존재하지 않는 파라미터를 SPFILE에서 삭제하려 할 때 주로 나타남.
- ORA-02095: 지정된 초기화 파라미터를 수정할 수 없을 때 발생하며, ORA-32007과 유사한 맥락에서 나타남.
- ORA-32017: SPFILE 업데이트 실패 시 발생하며, 파라미터 파일 관련 권한 문제 또는 디스크 공간 부족과 연관됨.
- ORA-00119: 지정된 시스템 파라미터에 잘못된 값이 설정되었을 때 발생하며, 파라미터 변경 실패와 함께 나타나는 경우가 많음.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.