2026년 10월 15일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65088 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65088 initialization parameter cannot be set within a PDB 는?
ORA-65088 에러는 Oracle Multitenant 아키텍처에서 PDB(Pluggable Database) 내부에서 설정할 수 없는 초기화 파라미터를 변경하려고 할 때 발생합니다. Oracle 12c 이후 도입된 멀티테넌트 환경에서는 일부 파라미터는 CDB(Container Database) 레벨, 즉 CDB$ROOT에서만 설정이 가능하며, PDB 내에서 해당 파라미터를 변경하려 하면 이 에러가 발생합니다. 특히 DBA가 PDB 세션에서 ALTER SYSTEM SET 명령을 실행할 때 주로 접하게 되며, 잘못된 파라미터 범위(scope) 이해에서 비롯되는 경우가 많습니다.
주요 발생 원인
- PDB 내부에서 CDB 전용 파라미터 변경 시도
Oracle Multitenant 환경에서는 파라미터가 ‘CDB 전용(CDB-only)’, ‘PDB 수정 가능(PDB-modifiable)’, ‘공통(Common)’ 세 가지 범주로 나뉩니다. DB_BLOCK_SIZE, ENABLE_PLUGGABLE_DATABASE, DB_FILES 같은 파라미터는 CDB 레벨에서만 설정이 가능합니다. PDB 세션에서 이런 파라미터를 변경하려 할 경우 ORA-65088이 즉시 발생합니다.
- 잘못된 컨테이너 컨텍스트에서의 명령 실행
DBA가 ALTER SESSION SET CONTAINER = PDB명 명령으로 PDB에 접속한 상태에서, 또는 PDB 사용자로 직접 접속한 상태에서 시스템 전체에 영향을 미치는 파라미터를 변경하려는 경우에 발생합니다. 현재 컨테이너 컨텍스트를 확인하지 않고 무작정 ALTER SYSTEM 명령을 실행하는 습관이 이 에러의 주요 원인입니다.
- 스크립트 또는 자동화 도구의 컨테이너 구분 미적용
기존 Non-CDB 환경에서 작성된 DBA 스크립트나 자동화 도구(예: Ansible, Shell Script)를 Multitenant 환경으로 이관할 때, 컨테이너 컨텍스트를 고려하지 않은 채 그대로 실행하면 ORA-65088이 발생합니다. 특히 배치 작업이나 유지보수 스크립트에서 이런 문제가 자주 발생하며, 운영 중단으로 이어질 수 있어 주의가 필요합니다.
해결 방법
원인 1 해결: 현재 컨테이너 확인 및 CDB$ROOT으로 전환 후 파라미터 변경
먼저 현재 접속된 컨테이너를 확인합니다.
-- 현재 컨테이너 확인
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS current_container
FROM DUAL;
-- 또는 아래 명령으로도 확인 가능
SHOW CON_NAME;
PDB에서 CDB$ROOT으로 전환한 뒤 파라미터를 변경합니다.
-- CDB$ROOT으로 컨테이너 전환 (SYSDBA 권한 필요)
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- 파라미터 변경 (CDB 전용 파라미터 예시)
ALTER SYSTEM SET DB_FILES = 500 SCOPE = SPFILE;
-- 변경 후 확인
SHOW PARAMETER DB_FILES;
원인 2 해결: PDB 수정 가능 파라미터 목록 사전 확인 후 작업
파라미터가 PDB 레벨에서 수정 가능한지 사전에 확인하는 것이 중요합니다.
-- PDB에서 수정 가능한 파라미터 목록 조회
SELECT NAME, ISPDB_MODIFIABLE, ISINSTANCE_MODIFIABLE
FROM V$SYSTEM_PARAMETER
WHERE ISPDB_MODIFIABLE = 'TRUE'
ORDER BY NAME;
-- 특정 파라미터의 PDB 수정 가능 여부 확인
SELECT NAME, ISPDB_MODIFIABLE, VALUE, DESCRIPTION
FROM V$SYSTEM_PARAMETER
WHERE NAME IN ('sga_max_size', 'pga_aggregate_target', 'db_block_size', 'open_cursors');
PDB에서 수정 가능한 파라미터는 아래와 같이 변경 가능합니다.
-- PDB에 접속된 상태에서 PDB 수정 가능한 파라미터 변경
ALTER SESSION SET CONTAINER = MYPDB;
-- PDB 레벨에서 수정 가능한 파라미터 예시
ALTER SYSTEM SET OPEN_CURSORS = 500 SCOPE = BOTH;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 512M SCOPE = BOTH;
-- PDB 레벨 파라미터 설정 확인
SELECT NAME, VALUE, CON_ID
FROM V$SYSTEM_PARAMETER
WHERE CON_ID = (SELECT CON_ID FROM V$PDBS WHERE NAME = 'MYPDB')
AND NAME IN ('open_cursors', 'pga_aggregate_target');
원인 3 해결: 스크립트에 컨테이너 컨텍스트 체크 로직 추가
기존 스크립트에 컨테이너 검증 로직을 추가합니다.
-- 스크립트 시작 전 컨테이너 확인 및 분기 처리
DECLARE
v_con_name VARCHAR2(100);
v_param_name VARCHAR2(100) := 'db_files';
v_is_pdb_modifiable VARCHAR2(5);
BEGIN
-- 현재 컨테이너 이름 확인
SELECT SYS_CONTEXT('USERENV', 'CON_NAME')
INTO v_con_name
FROM DUAL;
-- 파라미터의 PDB 수정 가능 여부 확인
SELECT ISPDB_MODIFIABLE
INTO v_is_pdb_modifiable
FROM V$SYSTEM_PARAMETER
WHERE NAME = v_param_name;
-- CDB$ROOT이 아닌 경우 경고 출력
IF v_con_name != 'CDB$ROOT' AND v_is_pdb_modifiable = 'FALSE' THEN
DBMS_OUTPUT.PUT_LINE('경고: ' || v_param_name ||
' 파라미터는 PDB에서 변경 불가합니다. CDB$ROOT에서 실행하세요.');
DBMS_OUTPUT.PUT_LINE('현재 컨테이너: ' || v_con_name);
ELSE
DBMS_OUTPUT.PUT_LINE('파라미터 변경 가능. 현재 컨테이너: ' || v_con_name);
END IF;
END;
/
또한 CDB 레벨 파라미터를 특정 PDB에만 적용하고 싶을 경우 아래 방법을 사용합니다.
-- CDB$ROOT에서 특정 PDB에만 파라미터 적용 (Oracle 12.2 이상)
ALTER SESSION SET CONTAINER = CDB$ROOT;
-- 특정 PDB에 파라미터 적용
ALTER SYSTEM SET OPEN_CURSORS = 300
CONTAINER = MYPDB;
-- 모든 PDB에 파라미터 적용
ALTER SYSTEM SET OPEN_CURSORS = 300
CONTAINER = ALL;
-- 적용 결과 확인
SELECT CON_ID, NAME, VALUE
FROM V$SYSTEM_PARAMETER
WHERE NAME = 'open_cursors'
ORDER BY CON_ID;
예방 방법
- 파라미터 변경 전 표준 사전 확인 절차 수립
DBA 팀 내에서 ALTER SYSTEM SET 명령을 실행하기 전에 반드시 V$SYSTEM_PARAMETER 뷰를 통해 ISPDB_MODIFIABLE 컬럼을 확인하는 절차를 표준화하세요. 또한 SHOW CON_NAME 명령을 모든 DBA 세션 시작 시 실행하도록 로그인 트리거 또는 glogin.sql 파일에 추가하면 컨테이너 컨텍스트 오류를 사전에 방지할 수 있습니다.
“`sql
— glogin.sql 또는 login.sql에 추가 권장 내용
— 현재 접속 컨테이너 항상 표시
SET SQLPROMPT “_USER’@’_CONNECT_IDENTIFIER _PRIVILEGE > “
SHOW CON_NAME;
“`
- Multitenant 환경용 별도 DBA 스크립트 버전 관리
Non-CDB 환경 스크립트와 Multitenant 환경 스크립트를 Git 등 버전 관리 시스템에서 별도 브랜치로 관리하고, 각 스크립트 상단에 ‘실행 가능 환경(CDB/PDB)’ 주석을 명시하는 정책을 수립하세요. CI/CD 파이프라인에 컨테이너 컨텍스트 검증 단계를 추가하면 자동화 배포 시 발생하는 ORA-65088을 원천 차단할 수 있습니다.
관련 에러
- ORA-65040: PDB 내에서 허용되지 않는 작업을 실행할 때 발생하는 에러로, ORA-65088과 유사하게 Multitenant 환경의 권한 범위 위반 시 나타납니다.
- ORA-65050: Common 사용자/역할만 허용되는 작업을 Local 사용자가 수행하려 할 때 발생합니다.
- ORA-02095: 특정 초기화 파라미터를 변경할 수 없을 때 발생하며, SCOPE 설정 오류와 함께 나타나는 경우가 많습니다.
- ORA-32017: SPFILE 업데이트 실패 시 발생하며, ORA-65088 이후 파라미터 영구 적용 시 함께 나타날 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.