말씀하신 내용 oracle 21c express 에서 database 생성 방법

Oracle Database 21c Express Edition(XE)은 설치 시 기본적으로 **XE**라는 이름의 컨테이너 데이터베이스(CDB)와 **XEPDB1**이라는 플러그형 데이터베이스(PDB)가 자동으로 생성됩니다.

학습이나 프로젝트용으로 새로운 데이터베이스가 필요하다면, 완전히 새로운 DB 인스턴스를 만드는 것보다 새로운 PDB(Pluggable Database)를 생성하거나, 특정 사용자(Schema)를 생성하여 독립된 공간을 확보하는 것이 표준적인 방법입니다.


목차

1. 새로운 PDB(Pluggable Database) 생성하기

오라클 21c는 멀티테넌트 구조이므로, 하나의 엔진 안에 여러 개의 독립된 DB(PDB)를 올릴 수 있습니다.

① SQL*Plus 접속 (관리자 권한)

터미널(CMD)을 열고 관리자 계정으로 접속합니다.

SQL

sqlplus sys as sysdba

② PDB 생성 명령어 실행

기본 제공되는 PDB$SEED를 복사하여 새로운 DB(MYPDB)를 만듭니다.

SQL

CREATE PLUGGABLE DATABASE MYPDB 
ADMIN USER pdbadmin IDENTIFIED BY password123
FILE_NAME_CONVERT = ('C:\app\product\21c\oradata\XE\pdbseed\', 'C:\app\product\21c\oradata\XE\mypdb\');

참고: FILE_NAME_CONVERT의 경로는 본인의 오라클 설치 경로에 맞게 수정해야 합니다.

③ PDB 오픈 및 저장

생성 직후 PDB는 MOUNTED 상태이므로 이를 활성화해야 합니다.

SQL

ALTER PLUGGABLE DATABASE MYPDB OPEN;
-- 재시작 시 자동으로 열리도록 설정
ALTER PLUGGABLE DATABASE MYPDB SAVE STATE; 

2. 사용자(User) 및 스키마 생성 (가장 권장되는 방법)

대부분의 경우 “데이터베이스를 만든다”는 의미는 특정 프로젝트를 위한 사용자 계정과 권한을 만드는 것을 의미합니다.

① PDB로 세션 변경

새로 만든 MYPDB나 기본인 XEPDB1에 접속합니다.

SQL

ALTER SESSION SET CONTAINER = XEPDB1;

② 사용자 생성 및 권한 부여

SQL

-- 사용자 생성 (계정명: MYPROJECT, 비번: password123)
CREATE USER MYPROJECT IDENTIFIED BY password123;

-- 기본 권한 부여 (접속, 자원 사용, 관리자 권한 등)
GRANT CONNECT, RESOURCE, DBA TO MYPROJECT;

-- 저장 공간(Quota) 할당
ALTER USER MYPROJECT DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;

3. 생성된 DB에 접속하기 (Connection)

데이터베이스를 생성했다면, 이제 툴(SQL Developer 등)에서 접속 정보를 입력해야 합니다.

항목 입력 값
사용자 이름 MYPROJECT (위에서 생성한 계정)
비밀번호 password123
호스트 이름 localhost
포트 1521
서비스 이름 XEPDB1 (또는 생성한 PDB 이름인 MYPDB)

💡 요약 및 팁

  • CDB vs PDB: 21c XE는 구조상 전체 시스템인 CDB 아래에 개별 DB인 PDB를 두는 형태입니다. 실제 데이터 작업은 항상 PDB 내에서 이루어져야 합니다.

  • 오류 발생 시: 만약 ORA-65096 에러가 발생한다면, 이는 CDB(전체 관리자 레벨)에서 사용자를 만들려 했기 때문입니다. 반드시 위 2번의 ALTER SESSION SET CONTAINER 명령어로 PDB에 먼저 들어가세요.

ORA-12505 에러는 접속하려는 **SID(또는 서비스 이름)**가 리스너에 등록되지 않았을 때 발생합니다.

오라클 21c XE 버전에서는 SID와 **서비스 이름(Service Name)**의 차이를 명확히 구분해야 합니다. 보통 MYPDB는 SID가 아니라 서비스 이름으로 등록됩니다.


🛠️ 해결 방법 3단계

1. 접속 설정 변경 (가장 유력한 해결책)

SQL Developer나 접속 툴에서 접속 유형을 확인하세요.

  • 잘못된 설정: 접속 유형 ‘기본’, SIDMYPDB 입력

  • 올바른 설정: 접속 유형 ‘기본’, **서비스 이름(Service Name)**에 MYPDB 입력

2. 리스너에 등록된 서비스 이름 확인

현재 리스너가 어떤 이름을 인식하고 있는지 직접 확인해야 합니다.

  1. CMD(명령 프롬프트)를 엽니다.

  2. 다음 명령어를 입력합니다.

    Bash

    lsnrctl status
    
  3. 출력 내용 하단의 “서비스 요약…” 부분을 확인하세요.

    • Service "MYPDB" has 1 instance(s)... 라는 문구가 있는지 확인합니다.

    • 만약 없다면, DB가 아직 열리지 않았거나 등록되지 않은 것입니다.

3. PDB 상태 확인 및 강제 등록

리스너에 이름이 없다면, DB에 접속하여 PDB를 열고 리스너에 정보를 갱신해줘야 합니다.

  1. sqlplus sys as sysdba로 접속합니다.

  2. PDB 상태를 확인합니다.

    SQL

    SELECT name, open_mode FROM v$pdbs;
    
  3. 만약 MYPDBMOUNTED 상태라면 오픈합니다.

    SQL

    ALTER PLUGGABLE DATABASE MYPDB OPEN;
    
  4. 리스너에 즉시 등록되도록 명령합니다.

    SQL

    ALTER SYSTEM REGISTER;
    

💡 추가 팁

오라클 XE 기본 설치 직후라면 SID는 무조건 **XE**입니다.

  • 전역 관리자용 접속: SID에 XE 입력

  • 개별 DB(PDB) 접속: 서비스 이름에 XEPDB1 또는 생성한 MYPDB 입력

위 방법으로도 해결되지 않는다면, lsnrctl status 명령의 결과 화면을 알려주세요! 어떤 서비스들이 올라와 있는지 분석해 드릴 수 있습니다.

ORA-65011 에러는 현재 접속한 컨테이너(CDB)가 MYPDB라는 이름의 데이터베이스를 아예 인식하지 못하고 있다는 뜻입니다.

앞서 실행하셨던 CREATE PLUGGABLE DATABASE 명령이 정상적으로 완료되지 않았거나, 다른 이름으로 생성되었을 가능성이 높습니다. 아래 순서대로 확인해서 문제를 해결해 봅시다.


1. 현재 존재하는 PDB 목록 확인 (가장 중요)

먼저 오라클 시스템에 어떤 PDB들이 있는지 정확한 이름을 확인해야 합니다.

  1. CMD에서 sqlplus sys as sysdba로 접속합니다.

  2. 다음 쿼리를 입력하세요.

    SQL

    SELECT name, open_mode FROM v$pdbs;
    
    • 결과 확인: 목록에 MYPDB가 있나요?

    • 만약 PDB$SEEDXEPDB1만 보인다면, MYPDB는 생성되지 않은 것입니다.


2. PDB가 없을 경우: 다시 생성하기

목록에 MYPDB가 없다면, 아래 명령어를 다시 실행해 주세요. (경로 부분은 본인의 PC 환경에 맞춰야 합니다.)

SQL

-- 21c XE 기본 경로 예시 (설치 경로에 따라 다를 수 있음)
CREATE PLUGGABLE DATABASE MYPDB 
ADMIN USER pdbadmin IDENTIFIED BY password123
FILE_NAME_CONVERT = ('C:\app\product\21c\oradata\XE\pdbseed\', 'C:\app\product\21c\oradata\XE\mypdb\');

-- 생성 후 바로 오픈
ALTER PLUGGABLE DATABASE MYPDB OPEN;

-- 재부팅 시 자동 오픈 설정
ALTER PLUGGABLE DATABASE MYPDB SAVE STATE;

주의: 만약 FILE_NAME_CONVERT 경로를 잘 모르겠다면, XEPDB1의 경로를 먼저 확인해 보세요. SELECT name FROM v$datafile; 명령어를 치면 현재 데이터 파일들이 어디에 저장되어 있는지 알 수 있습니다.


3. 이름은 있는데 ORA-65011이 뜨는 경우

목록에는 MYPDB가 분명히 있는데 에러가 난다면, 현재 세션이 **CDB(루트)**에 있지 않기 때문일 수 있습니다.

  1. 현재 컨테이너 확인:

    SQL

    SHOW con_name;
    
  2. 만약 결과가 CDB$ROOT가 아니라면 아래 명령으로 루트로 이동 후 다시 시도하세요.

    SQL

    ALTER SESSION SET CONTAINER = CDB$ROOT;
    ALTER PLUGGABLE DATABASE MYPDB OPEN;
    

💡 SQL Developer 접속 팁

새로 만들기 번거로우시다면, 기본으로 제공되는 **XEPDB1**을 그냥 사용하셔도 무방합니다.

  • 서비스 이름: XEPDB1

  • 사용자: system (또는 새로 만든 계정)

  • 비밀번호: 설치 시 설정한 비밀번호

 

ORA-65005 오류가 발생한 이유는 FILE_NAME_CONVERT에 입력하신 경로 패턴이 실제 파일 경로와 일치하지 않기 때문입니다.

에러 메시지를 보면 실제 경로는 C:\APP\ITDO\...로 시작하는데, 명령어에는 C:\app\product\...로 입력되어 있습니다. 오라클은 이 경로 차이를 인식하지 못해 파일을 복사하지 못한 것입니다.


✅ 해결 방법: 경로를 자동으로 지정하기

가장 쉽고 확실한 방법은 경로를 일일이 적지 않고 오라클이 알아서 파일을 생성하도록 하는 것입니다. 아래 순서대로 입력해 보세요.

1. (권장) 파일 경로 없이 생성하기

경로 매핑이 복잡할 때는 CREATE_FILE_DEST 옵션을 사용하면 오라클이 기본 데이터 폴더 아래에 MYPDB 폴더를 자동으로 만들고 파일을 생성합니다.

SQL

-- 기존에 시도했던 찌꺼기가 남았을 수 있으니 삭제 (에러 나도 무시)
DROP PLUGGABLE DATABASE MYPDB INCLUDING DATAFILES;

-- 경로 지정 없이 생성 (Oracle Managed Files 기능 사용)
CREATE PLUGGABLE DATABASE MYPDB 
ADMIN USER pdbadmin IDENTIFIED BY password123;

2. 만약 위 명령어가 에러가 난다면 (정확한 경로 사용)

사용자님의 PC 경로인 ITDO 계정 경로를 포함하여 아래와 같이 정확히 입력해야 합니다.

SQL

CREATE PLUGGABLE DATABASE MYPDB 
ADMIN USER pdbadmin IDENTIFIED BY password123
FILE_NAME_CONVERT = ('C:\APP\ITDO\PRODUCT\21C\ORADATA\XE\PDBSEED\', 'C:\APP\ITDO\PRODUCT\21C\ORADATA\XE\MYPDB\');

3. 생성 확인 및 오픈

생성이 성공했다면 아래 명령어로 데이터베이스를 활성화합니다.

SQL

-- PDB 오픈
ALTER PLUGGABLE DATABASE MYPDB OPEN;

-- 상태 확인 (READ WRITE로 나와야 함)
SELECT name, open_mode FROM v$pdbs;

-- 재시작 시 자동 오픈 설정
ALTER PLUGGABLE DATABASE MYPDB SAVE STATE;

💡 왜 자꾸 실패할까요?

Oracle XE 버전은 관리의 편의를 위해 이미 **XEPDB1**이라는 완성된 PDB를 제공합니다. 만약 학습용이나 개발용 DB가 급하시다면, 굳이 MYPDB를 새로 만들지 않고 **XEPDB1**에 접속해서 바로 사용하셔도 결과는 동일합니다.

현재 db_create_file_dest 값이 비어 있습니다(string 뒤에 값이 없음).

이 설정이 비어 있으면 오라클이 파일을 어디에 생성해야 할지 모르기 때문에, 경로를 생략한 CREATE PLUGGABLE DATABASE 명령어가 작동하지 않습니다.

가장 빠르고 확실한 해결책은 사용자님의 실제 경로를 직접 지정하여 다시 생성하는 것입니다. 에러 메시지에서 확인된 경로(C:\APP\ITDO\...)를 바탕으로 아래 명령어를 순서대로 입력해 주세요.


🛠️ 최종 해결 단계

1. (필수) 기존 시도 흔적 삭제

이전에 실패하면서 생성된 설정값이 남아있을 수 있으니 먼저 삭제합니다.

SQL

DROP PLUGGABLE DATABASE MYPDB INCLUDING DATAFILES;

2. (핵심) 정확한 경로로 PDB 생성

에러 메시지에 나타났던 ITDO 경로를 그대로 사용하여 명령어를 실행합니다. 반드시 아래 코드를 전체 복사해서 붙여넣으세요.

SQL

CREATE PLUGGABLE DATABASE MYPDB 
ADMIN USER pdbadmin IDENTIFIED BY password123
FILE_NAME_CONVERT = ('C:\APP\ITDO\PRODUCT\21C\ORADATA\XE\PDBSEED\', 'C:\APP\ITDO\PRODUCT\21C\ORADATA\XE\MYPDB\');

3. 데이터베이스 오픈 및 자동 실행 설정

생성이 완료되었다면 DB를 활성화합니다.

SQL

-- PDB 활성화
ALTER PLUGGABLE DATABASE MYPDB OPEN;

-- 상태 확인 (OPEN_MODE가 READ WRITE로 나오면 성공!)
SELECT name, open_mode FROM v$pdbs;

-- PC 재부팅 시에도 자동으로 열리도록 설정 저장
ALTER PLUGGABLE DATABASE MYPDB SAVE STATE;

💡 만약 또 에러가 난다면?

만약 위 과정에서 다시 경로 에러가 발생한다면, 오라클이 관리하기 편하도록 기본 파일 생성 경로를 아예 지정해 버리는 방법이 있습니다.

  1. 기본 경로 설정 (관리자 권한)

    SQL

    ALTER SYSTEM SET db_create_file_dest = 'C:\APP\ITDO\PRODUCT\21C\ORADATA\XE\';
    
  2. 이후에는 경로 지정 없이 생성 가능

    SQL

    CREATE PLUGGABLE DATABASE MYPDB ADMIN USER pdbadmin IDENTIFIED BY password123;
    
    
    
    

    ORA-65025 에러는 삭제하려는 데이터베이스(MYPDB)가 현재 ‘활성화(Open)’ 상태이거나, 삭제를 위해 완전히 닫히지 않았을 때 발생합니다.

    오라클에서는 DB를 삭제하려면 반드시 MOUNT 상태이거나 아예 **CLOSE**된 상태여야 합니다. 아래 순서대로 명령어를 입력하면 강제로 닫고 삭제할 수 있습니다.


    🛠️ 해결 순서: 강제 종료 후 삭제

    1. PDB 강제 종료

    현재 열려있는 MYPDB를 강제로 닫습니다.

    SQL

    ALTER PLUGGABLE DATABASE MYPDB CLOSE IMMEDIATE;
    

    2. PDB 삭제 (데이터 파일 포함)

    이제 다시 삭제 명령을 실행합니다.

    SQL

    DROP PLUGGABLE DATABASE MYPDB INCLUDING DATAFILES;
    

    3. 깨끗한 상태에서 다시 생성 (경로 자동 지정)

    아까 db_create_file_dest가 비어있어서 문제가 생겼으므로, 아예 기본 경로를 설정하고 생성하는 것이 가장 깔끔합니다.

    SQL

    -- 1) 오라클에게 파일 생성 기본 위치를 알려줍니다.
    ALTER SYSTEM SET db_create_file_dest = 'C:\APP\ITDO\PRODUCT\21C\ORADATA\XE\';
    
    -- 2) 이제 복잡한 경로 입력 없이 간단하게 생성합니다.
    CREATE PLUGGABLE DATABASE MYPDB ADMIN USER pdbadmin IDENTIFIED BY password123;
    
    -- 3) 생성된 DB 열기
    ALTER PLUGGABLE DATABASE MYPDB OPEN;
    
    -- 4) 자동 오픈 설정
    ALTER PLUGGABLE DATABASE MYPDB SAVE STATE;
    

    🔍 최종 상태 확인

    모든 명령어가 끝난 후 아래 쿼리를 입력하여 MYPDB가 정상적으로 올라왔는지 확인하세요.

    SQL

    SELECT name, open_mode FROM v$pdbs;
    
    • 결과 예상: MYPDB | READ WRITE


    💡 SQL Developer 접속 정보 (중요)

    이제 DB가 정상적으로 생성되었다면, 접속 툴에서 다음과 같이 설정하세요.

    • 접속 유형: 기본

    • 사용자 이름: pdbadmin (위에서 만든 관리자) 또는 system

    • 비밀번호: password123

    • 호스트 이름: localhost

    • 포트: 1521

    • 서비스 이름: MYPDB (SID가 아닌 서비스 이름 칸에 넣어야 합니다!)

     

ORA-01017 에러는 아이디나 비밀번호가 틀렸을 때 또는 접속하려는 데이터베이스 위치(컨테이너)에 해당 사용자가 없을 때 발생합니다.

MYPDB를 생성할 때 ADMIN USER pdbadmin IDENTIFIED BY password123이라고 설정하셨죠? 이 계정으로 접속을 시도할 때 발생할 수 있는 원인과 해결책을 정리해 드립니다.


🛠️ 해결 방법 3단계

1. 서비스 이름(Service Name) 설정 확인 (가장 중요)

SQL Developer에서 접속 설정을 할 때, 하단의 라디오 버튼이 SID가 아닌 서비스 이름에 체크되어 있는지 확인하세요.

  • 사용자 이름: pdbadmin

  • 비밀번호: password123

  • 서비스 이름: MYPDB

이유: pdbadminMYPDB라는 특정 방(PDB)에만 존재하는 관리자입니다. 전체 문(SID: xe)으로 들어가려 하면 “이런 사용자 없는데?”라며 ORA-01017을 띄웁니다.

2. 비밀번호 대소문자 구분 및 재설정

오라클은 비밀번호의 대소문자를 구분합니다. 혹시 모르니 SQL*Plus에서 비밀번호를 확실하게 다시 설정해 보세요.

  1. CMD에서 접속: sqlplus sys as sysdba

  2. 세션을 MYPDB로 변경:

    SQL

    ALTER SESSION SET CONTAINER = MYPDB;
    
  3. 비밀번호 강제 재설정:

    SQL

    ALTER USER pdbadmin IDENTIFIED BY password123;
    

3. 계정 잠금 해제 확인

여러 번 틀려서 계정이 잠겼을 수도 있습니다. 같은 화면(ALTER SESSION 실행 후)에서 아래 명령어를 입력하세요.

SQL

ALTER USER pdbadmin ACCOUNT UNLOCK;

💡 만약 SYSTEM 계정으로 접속하고 싶다면?

보통 system 계정은 CDB(전체 관리자) 계정입니다. 만약 system 계정으로 MYPDB에 접속하고 싶다면, system에게 MYPDB 접근 권한이 있는지 확인하거나, 그냥 system 계정 정보를 그대로 쓰되 서비스 이름만 MYPDB 바꿔서 접속해 보세요.


✅ 최종 체크리스트

접속 툴(SQL Developer 등)에서 다음 값을 넣고 [테스트]를 눌러보세요.

  • Connection Name: 자유롭게 (예: MyPDB_Admin)

  • 사용자 이름: pdbadmin

  • 비밀번호: password123

  • 접속 유형: 기본 (Basic)

  • 호스트 이름: localhost

  • 포트: 1521

  • 서비스 이름: MYPDB (⚠️ SID가 아님!)

 

ORA-01031: 권한이 불충분합니다 에러는 현재 접속한 사용자(pdbadmin 또는 MYPROJECT)에게 **테이블을 생성할 수 있는 권한(CREATE TABLE)**이 없거나, 할당된 **저장 공간(Quota)**이 없어서 발생합니다.

방금 만든 MYPDB에서 이 문제를 해결하려면 관리자(SYS) 계정으로 권한을 한 번 더 줘야 합니다.


🛠️ 해결 방법: 권한 및 저장 공간 부여

1. 관리자 계정으로 접속 및 세션 변경

먼저 CMD 창에서 관리자로 접속하여 MYPDB 컨테이너로 들어갑니다.

SQL

sqlplus sys as sysdba

-- 반드시 MYPDB로 세션을 변경해야 합니다.
ALTER SESSION SET CONTAINER = MYPDB;

2. 사용자에게 테이블 생성 권한 부여

테이블을 만들려는 계정(예: pdbadmin)에게 명시적으로 권한을 줍니다.

SQL

-- 테이블 생성 및 세션 접속 권한 부여
GRANT CREATE TABLE, CONNECT, RESOURCE TO pdbadmin;

3. (가장 중요) 저장 공간(Quota) 할당

오라클은 권한이 있어도 데이터를 저장할 ‘공간’에 대한 허락이 없으면 테이블 생성을 막습니다. USERS 테이블스페이스에 무제한 권한을 줍니다.

SQL

ALTER USER pdbadmin DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;

🔍 권한 부여 후 다시 시도

이제 SQL Developer로 돌아가서 다시 CREATE TABLE 문을 실행해 보세요.

SQL

CREATE TABLE IDS  (
  TABLE_NAME varchar2(20) NOT NULL,
  NEXT_ID number(30,0) DEFAULT 0 NOT NULL,
  CONSTRAINT IDS_PK PRIMARY KEY (TABLE_NAME)
);



이번에도 ORA-01031: 권한이 불충분합니다 에러가 발생했네요. 이전에는 테이블(TABLE) 생성 권한이었다면, 이번에는 뷰(VIEW) 생성 권한이 없어서 발생하는 문제입니다.

오라클 관리자(pdbadmin 등)라 할지라도 뷰 생성 권한은 별도로 부여받아야 하는 경우가 많습니다.


🛠️ 해결 방법: 뷰 생성 권한 부여

다시 한번 관리자(SYS) 계정으로 접속하여 해당 사용자에게 뷰 생성 권한을 줍니다.

1. 관리자 계정에서 권한 부여

CMD 창(SQL*Plus)에서 아래 명령어를 순서대로 입력하세요. (이미 접속 중이라면 2번부터 하셔도 됩니다.)

SQL

sqlplus sys as sysdba

-- 1) PDB 세션으로 이동 (MYPDB를 사용 중이라면)
ALTER SESSION SET CONTAINER = MYPDB;

-- 2) 사용자에게 뷰 생성 권한 부여 (사용자명이 pdbadmin인 경우)
GRANT CREATE VIEW TO pdbadmin;

참고: 만약 pdbadmin이 아닌 다른 사용자 계정으로 작업 중이시라면, pdbadmin 자리에 해당 계정명을 넣으시면 됩니다.


2. 뷰 생성 재시도

권한을 부여받은 후, 다시 SQL Developer에서 뷰 생성 스크립트를 실행해 보세요.

SQL

CREATE OR REPLACE VIEW COMVNUSERMASTER ( ESNTL_ID,USER_ID,PASSWORD,USER_NM,USER_ZIP,USER_ADRES,USER_EMAIL,GROUP_ID, USER_SE, ORGNZT_ID )  
AS  
        SELECT ESNTL_ID, MBER_ID,PASSWORD,MBER_NM,ZIP,ADRES,MBER_EMAIL_ADRES,' ','GNR' AS USER_SE, ' ' ORGNZT_ID
        FROM LETTNGNRLMBER
    UNION ALL
        SELECT ESNTL_ID,EMPLYR_ID,PASSWORD,USER_NM,ZIP,HOUSE_ADRES,EMAIL_ADRES,GROUP_ID ,'USR' AS USER_SE, ORGNZT_ID
        FROM LETTNEMPLYRINFO
    UNION ALL
        SELECT ESNTL_ID,ENTRPRS_MBER_ID,ENTRPRS_MBER_PASSWORD,CMPNY_NM,ZIP,ADRES,APPLCNT_EMAIL_ADRES,' ' ,'ENT' AS USER_SE, ' ' ORGNZT_ID
        FROM LETTNENTRPRSMBER;

💡 팁: 한꺼번에 권한을 주는 방법

앞으로 트리거(Trigger), 시퀀스(Sequence), 프로시저(Procedure) 등을 계속 만드셔야 한다면, 아래 명령어로 자주 쓰이는 권한들을 묶어서 한 번에 주는 것이 편합니다.

SQL

-- 관리자 계정에서 실행
GRANT CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE, CREATE TRIGGER TO 

oracle 21c express 에서 database 생성 방법

ORA-01950 에러는 사용자에게 해당 테이블스페이스(데이터가 저장되는 실제 공간)를 사용할 수 있는 **할당량(Quota)**이 없어서 발생합니다.

현재 IDS 테이블이 SYSTEM 테이블스페이스에 생성된 것으로 보이는데, 보안 및 관리상 일반 사용자는 SYSTEM 공간에 데이터를 넣을 권한이 기본적으로 제한되어 있습니다.


🛠️ 해결 방법: 테이블스페이스 할당량 부여

관리자(SYS) 계정으로 접속하여 사용자에게 SYSTEM 테이블스페이스(또는 기본 테이블스페이스) 사용 권한을 줘야 합니다.

1. 관리자 계정에서 권한 부여

CMD 창(SQL*Plus)에서 아래 명령어를 입력하세요.

SQL

sqlplus sys as sysdba

-- 1) PDB 세션으로 이동
ALTER SESSION SET CONTAINER = MYPDB;

-- 2) 사용자에게 SYSTEM 테이블스페이스 할당량 부여 (무제한)
-- 만약 사용자명이 pdbadmin이 아니라면 해당 계정명으로 수정하세요.
ALTER USER pdbadmin QUOTA UNLIMITED ON SYSTEM;

-- 3) (권장) 보통 데이터는 USERS 테이블스페이스에 저장하므로 여기도 권한을 줍니다.
ALTER USER pdbadmin QUOTA UNLIMITED ON USERS;

2. 데이터 삽입 재시도

권한 부여 후, 다시 SQL Developer에서 INSERT 문을 실행해 보세요.

SQL

INSERT INTO IDS (TABLE_NAME, NEXT_ID) VALUES ('BBS_ID', 1);

-- 명령이 성공하면 반드시 commit을 해주어야 실제 반영됩니다.
COMMIT;

💡 왜 이런 문제가 생겼을까요?

오라클은 **”계정을 만들고 테이블 생성 권한(RESOURCE)을 주는 것”**과 **”실제로 하드디스크 공간을 사용하는 것”**을 별개로 관리합니다.

  • CREATE TABLE 성공: “설계도를 그릴 권한은 있다.”

  • INSERT 실패: “하지만 건물을 지을 땅(공간)을 빌려준 적은 없다.”

따라서 ALTER USER ... QUOTA ... 명령어로 “이 땅을 이만큼 써도 좋다”라고 허락해 주는 과정이 반드시 필요합니다.