Oracle 12c 이후 버전부터는 멀티 테넌트(Multitenant) 구조가 도입되어,
데이터베이스가 다음과 같이 두 가지 계층으로 구성됩니다.
| 구분 | 설명 |
| CDB (Container Database) | 전체 시스템의 큰 틀로, Oracle 인스턴스의 루트 컨테이너 역할을 수행. 시스템 계정(SYS, SYSTEM)과 공통 메타데이터 관리. |
| PDB (Pluggable Database) | 실제 사용자 데이터와 객체가 존재하는 독립적인 데이터베이스 단위. 일반 사용자 계정은 PDB 내부에 생성됨. |
1. 현재 접속 컨테이너 확인
먼저, 현재 어떤 컨테이너(CDB 또는 PDB)에 접속 중인지 확인합니다.
SHOW CON_NAME;
출력
--------------------------------------------------------------------------------
CDB$ROOT
CDB$ROOT로 표시된다면 현재 CDB 루트 컨테이너에 접속 중이며, 이는 일반적으로 SYS 또는 SYSTEM 계정으로 접속한 상태입니다.
2. CDB 내 PDB 목록 확인
CDB에 등록된 PDB(플러그형 데이터베이스) 목록을 확인합니다.
SHOW PDBS;
출력
CON_ID CON_NAME OPEN_MODE RESTRICTED
---------- --------- ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 READ WRITE NO
※ 컬럼별 의미
| 컬럼명 | 설명 |
| CON_ID | 컨테이너 고유 ID. 각 CDB/PDB에 부여되는 내부 식별자. |
| CON_NAME | 컨테이너 이름 (CDB$ROOT, PDB$SEED, XEPDB1 등). |
| OPEN_MODE | 컨테이너 접근 모드. - MOUNTED: 데이터파일만 연결, 접속 불가 - READ ONLY: 읽기 전용 - READ WRITE: 읽기·쓰기 가능(일반 운영 상태) |
| RESTRICTED | 제한 모드 여부. - YES: SYSDBA 등 특권 사용자만 접속 가능 - NO: 일반 사용자 접속 가능 |
참고: PDB$SEED는 새로운 PDB를 생성할 때 복제되는 템플릿 PDB로, 항상 READ ONLY 상태입니다.
3. PDB로 세션 전환
일반 사용자 계정은 CDB$ROOT가 아닌 PDB 내부에서 생성해야 합니다.
아래 명령으로 사용할 PDB로 세션을 전환합니다.
ALTER SESSION SET CONTAINER = <CON_NAME 입력>;
이제 <CON_NAME> 컨테이너에서 사용자 계정 및 객체를 생성할 수 있습니다. .
4. 사용자 계정 생성
CREATE USER test IDENTIFIED BY test;
test 계정을 생성하고 비밀번호를 test로 설정합니다.
이 상태에서는 아직 접속 및 객체 생성 권한이 없으므로 추가 권한을 부여해야 합니다.
5. 기본 권한 부여
GRANT CONNECT, RESOURCE TO <계정명>;
| 구분 | 권한 | 설명 |
| 로그인 | CONNECT | DB 접속 가능 (CREATE SESSION) |
| 객체 생성 | RESOURCE | 일반 객체 생성 권한 (TABLE, INDEX, CLUSTER 등) |
6. 추가 객체 생성 권한 (옵션)
GRANT 권한(옵션1), 권한(옵션2).......... TO <사용자명>;
| 권한(옵션) | 설명 |
| CREATE VIEW | View 생성 가능 (SELECT 문을 기반으로 논리적 테이블 작성 가능) |
| CREATE SEQUENCE | SEQUENCE 생성 가능 (자동 증가 번호용 객체 생성) |
| CREATE PROCEDURE | PL/SQL 프로시저, 함수(Function), 패키지 생성 가능 |
| CREATE TRIGGER | 트리거(Trigger) 생성 가능 (데이터 변경 시 자동 동작 로직) |
| CREATE SYNONYM | SYNONYM 생성 가능 (객체의 별칭을 부여 — 스키마 분리 시 유용) |
| CREATE TYPE | 사용자 정의 데이터 타입 생성 가능 (OBJECT TYPE, VARRAY 등) |
| CREATE MATERIALIZED VIEW | 물리적 뷰(Materialized View) 생성 가능 — 주로 성능 튜닝용 |
| CREATE JOB | DB 스케줄러(Job) 생성 가능 (자동 배치작업용) |
| CREATE TABLESPACE | 별도 테이블스페이스 생성 가능 (일반 개발자보단 DBA 권한 수준) |
※ 요약
| 단계 | 주요 명령 | 설명 |
| 1 | SHOW CON_NAME; | 현재 컨테이너 확인 |
| 2 | SHOW PDBS; | CDB 내 PDB 목록 확인 |
| 3 | ALTER SESSION SET CONTAINER = CON_NAME; | 세션을 PDB로 전환 |
| 4 | CREATE USER test IDENTIFIED BY test; | 사용자 계정 생성 |
| 5 | GRANT CONNECT, RESOURCE TO test; | 기본 권한 부여 |
| 6 | GRANT CREATE VIEW, ... TO test; | 필요 시 추가 권한 부여 |