2026년 10월 16일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-65096 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-65096 invalid common user or role name 는?
ORA-65096 에러는 Oracle Multitenant 환경(CDB, Container Database)에서 공통 사용자(Common User) 또는 공통 롤(Common Role)을 생성할 때 이름 규칙을 위반하면 발생하는 에러입니다. Oracle 12c 이후 도입된 멀티테넌트 아키텍처에서는 CDB 레벨의 공통 사용자 이름은 반드시 C## 또는 c## 접두사로 시작해야 하며, 이 규칙을 따르지 않을 경우 이 에러가 즉시 발생합니다. 특히 기존 단일 인스턴스(Non-CDB) 환경에서 CDB 환경으로 마이그레이션하는 과정에서 개발자나 DBA가 기존 방식 그대로 사용자를 생성하려 할 때 가장 빈번하게 마주치는 에러입니다.
주요 발생 원인
1. C## 접두사 누락 (가장 빈번한 원인)
Oracle 12c 이상의 CDB 환경에서 공통 사용자를 생성할 때 이름 앞에 C##을 붙이지 않으면 즉시 ORA-65096이 발생합니다. 많은 DBA와 개발자들이 이전 버전(11g 이하)의 습관대로 단순히 CREATE USER scott IDENTIFIED BY tiger; 형태로 명령을 실행하다가 이 에러를 경험합니다. Oracle은 CDB 공통 사용자와 PDB 로컬 사용자를 명확히 구분하기 위해 이 명명 규칙을 강제하고 있습니다.
2. CDB 루트 컨테이너에서 로컬 사용자 생성 시도
CDB$ROOT(루트 컨테이너)에 접속한 상태에서 로컬 사용자를 생성하려는 시도도 이 에러를 유발합니다. CDB 루트에서는 오직 공통 사용자(C##으로 시작)만 생성할 수 있으며, 특정 PDB에만 속하는 로컬 사용자는 해당 PDB에 직접 접속해서 생성해야 합니다. 이를 혼동하여 루트에서 로컬 사용자를 만들려 할 경우 ORA-65096이 발생합니다.
3. _ORACLE_SCRIPT 히든 파라미터 또는 common_user_prefix 파라미터 미설정
일부 환경에서는 _ORACLE_SCRIPT=TRUE 세션 파라미터를 설정하거나 common_user_prefix 파라미터를 빈 값으로 변경하는 방식으로 이 제한을 우회하려는 시도가 있습니다. 하지만 이러한 방법은 Oracle의 공식 지원 범위를 벗어난 편법이며, 특히 운영 환경에서는 보안 및 지원 정책상 권장되지 않습니다. 이 설정을 잘못 적용하거나 누락할 경우에도 ORA-65096이 발생할 수 있습니다.
해결 방법
해결책 1: C## 접두사를 붙여 공통 사용자 생성 (권장)
가장 올바르고 권장되는 방법은 CDB 레벨의 사용자 이름에 C## 접두사를 붙이는 것입니다.
-- 잘못된 방법 (ORA-65096 발생)
CREATE USER scott IDENTIFIED BY tiger;
-- 올바른 방법: C## 접두사 사용
CREATE USER c##scott IDENTIFIED BY tiger;
-- 생성된 공통 사용자에게 권한 부여
GRANT CREATE SESSION, CREATE TABLE TO c##scott CONTAINER=ALL;
-- 공통 사용자 확인
SELECT username, common, con_id
FROM cdb_users
WHERE username = 'C##SCOTT';
해결책 2: PDB에 접속하여 로컬 사용자 생성
특정 PDB에만 필요한 사용자라면 해당 PDB로 컨테이너를 전환한 후 일반 이름으로 생성할 수 있습니다.
-- 현재 컨테이너 확인
SHOW CON_NAME;
-- 특정 PDB로 전환 (예: PDB1)
ALTER SESSION SET CONTAINER = PDB1;
-- 컨테이너 전환 확인
SHOW CON_NAME;
-- 로컬 사용자 생성 (PDB 내에서는 C## 불필요)
CREATE USER scott IDENTIFIED BY tiger
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
-- 로컬 사용자에게 권한 부여
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO scott;
-- 로컬 사용자 확인
SELECT username, common, con_id
FROM cdb_users
WHERE username = 'SCOTT';
해결책 3: common_user_prefix 파라미터 변경 (비권장, 테스트 환경 한정)
운영 환경에서는 절대 권장하지 않지만, 개발 또는 테스트 환경에서 레거시 스크립트를 그대로 사용해야 하는 경우 한시적으로 접두사 규칙을 완화할 수 있습니다.
-- 현재 common_user_prefix 파라미터 확인
SHOW PARAMETER common_user_prefix;
-- 접두사 규칙 비활성화 (테스트 환경 전용, 운영 환경 절대 금지)
ALTER SYSTEM SET "_common_user_prefix" = '' SCOPE=SPFILE;
-- DB 재시작 후 적용 확인
-- (재시작 없이 세션 레벨 우회 방법 - Oracle 지원 비권장)
ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;
CREATE USER scott IDENTIFIED BY tiger;
ALTER SESSION SET "_ORACLE_SCRIPT" = FALSE;
-- 원복 방법
ALTER SYSTEM SET "_common_user_prefix" = 'C##' SCOPE=SPFILE;
해결책 4: 현재 환경이 CDB인지 확인
에러 발생 전 먼저 현재 접속 환경을 확인하는 것이 중요합니다.
-- CDB 여부 확인
SELECT name, cdb, con_id FROM v$database;
-- 현재 컨테이너 확인
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS current_container FROM dual;
-- 전체 PDB 목록 확인
SELECT con_id, name, open_mode FROM v$pdbs ORDER BY con_id;
-- CDB 전체 사용자 목록 확인
SELECT username, common, con_id FROM cdb_users ORDER BY con_id, username;
예방 방법
1. 사용자 생성 표준 스크립트 분리 및 문서화
조직 내 DBA 팀은 CDB 공통 사용자 생성 스크립트와 PDB 로컬 사용자 생성 스크립트를 명확히 분리하여 템플릿화해야 합니다. 신규 입사 DBA나 개발자가 실수 없이 사용할 수 있도록, CDB 환경에서는 C## 접두사가 기본 포함된 표준 사용자 생성 스크립트를 사내 위키나 형상관리 시스템(Git 등)에 공식 문서로 등록하고 관리하는 것이 중요합니다.
2. 운영 환경 히든 파라미터 변경 금지 정책 수립
_ORACLE_SCRIPT나 _common_user_prefix 같은 히든 파라미터를 운영 환경에서 변경하는 행위는 Oracle 공식 지원 정책 위반이며, 예상치 못한 부작용을 초래할 수 있습니다. DBA 팀 내부적으로 운영 환경 히든 파라미터 변경을 금지하는 명문화된 정책을 수립하고, 변경 요청 시 반드시 변경관리(Change Management) 절차를 거치도록 프로세스를 정비해야 합니다.
관련 에러
- ORA-65049: 이미 CDB에 동일한 이름의 공통 사용자가 존재할 때 발생하는 중복 사용자 에러입니다.
- ORA-01017: 잘못된 사용자명 또는 비밀번호로 접속을 시도할 때 발생하며, 사용자 생성 이후 접속 시 이름 오기입으로 연계되어 나타날 수 있습니다.
- ORA-65048: 공통 사용자 또는 롤에 대한 권한 부여 시
CONTAINER=ALL절 누락 등으로 발생하는 에러입니다. - ORA-00959: 존재하지 않는 테이블스페이스를 지정했을 때 발생하며, 사용자 생성 시 DEFAULT TABLESPACE 설정 오류와 함께 발생할 수 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.