2026년 07월 19일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01501 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01501 CREATE DATABASE failed 는?
ORA-01501 에러는 Oracle 데이터베이스를 새로 생성하는 CREATE DATABASE 명령 실행 도중 실패했을 때 발생하는 에러입니다. 이 에러는 단독으로 발생하기보다는 내부적으로 동반되는 다른 에러(ORA-00200, ORA-01100, ORA-01503 등)와 함께 나타나는 경우가 많아, 반드시 alert log와 함께 확인해야 합니다. 주로 초기화 파라미터 설정 오류, 파일 시스템 권한 문제, 또는 이미 존재하는 데이터베이스와의 충돌에서 비롯됩니다.
주요 발생 원인
1. 초기화 파라미터(init.ora / spfile) 설정 오류
CREATE DATABASE 명령을 실행하기 위해서는 인스턴스가 NOMOUNT 상태로 기동되어 있어야 하며, 이를 위한 초기화 파라미터 파일이 정확하게 구성되어 있어야 합니다. DB_NAME, DB_BLOCK_SIZE, CONTROL_FILES 등 핵심 파라미터가 누락되거나 잘못 지정된 경우, 인스턴스 자체가 정상 기동되지 않거나 데이터베이스 생성 중 실패합니다. 특히 CONTROL_FILES에 지정된 경로가 실제 존재하지 않는 디렉토리를 가리키고 있다면 즉시 ORA-01501이 발생합니다.
2. OS 파일 시스템 권한 및 디렉토리 미생성
Oracle 소프트웨어를 설치한 OS 계정(일반적으로 oracle)이 데이터파일, 컨트롤 파일, 리두 로그 파일을 생성할 대상 디렉토리에 대한 쓰기 권한을 보유하고 있어야 합니다. 지정된 경로가 존재하지 않거나, 해당 경로에 대한 쓰기 권한이 없다면 파일 생성 단계에서 에러가 발생하여 ORA-01501로 이어집니다. 실무에서는 ASM 환경 또는 NFS 마운트 스토리지 환경에서 이 문제가 빈번하게 발생합니다.
3. 동일 DB_NAME 또는 DB_UNIQUE_NAME을 가진 인스턴스 충돌
동일한 서버에서 이미 같은 DB_NAME으로 운영 중인 데이터베이스 인스턴스가 존재하거나, 동일한 Oracle SID 환경 변수(ORACLE_SID)가 설정된 채로 새 데이터베이스를 생성하려 할 경우 충돌이 발생합니다. 기존 컨트롤 파일이나 데이터 파일이 삭제되지 않은 상태에서 동일 경로로 재생성을 시도할 때도 같은 에러가 발생합니다. 이 경우 REUSE 키워드를 사용하거나, 기존 파일을 OS 레벨에서 명시적으로 제거해야 합니다.
해결 방법
원인 1 해결: 초기화 파라미터 점검 및 수정
먼저 현재 사용 중인 pfile 또는 spfile의 핵심 파라미터를 아래와 같이 확인하고 수정합니다.
-- NOMOUNT 상태로 인스턴스 기동 전 pfile 내용 예시 (initORCL.ora)
-- 아래 파라미터가 모두 정확히 설정되어 있어야 합니다.
db_name = 'ORCL'
db_block_size = 8192
sga_target = 1G
pga_aggregate_target = 256M
control_files = ('/u01/oradata/ORCL/control01.ctl',
'/u02/oradata/ORCL/control02.ctl')
undo_tablespace = 'UNDOTBS1'
db_recovery_file_dest = '/u01/fast_recovery_area'
db_recovery_file_dest_size = 10G
-- 인스턴스를 NOMOUNT로 기동
STARTUP NOMOUNT PFILE='/u01/app/oracle/admin/ORCL/pfile/initORCL.ora';
-- 기동 후 파라미터 확인
SHOW PARAMETER db_name;
SHOW PARAMETER control_files;
SHOW PARAMETER db_block_size;
원인 2 해결: 디렉토리 생성 및 권한 부여 (OS 명령 포함)
# OS 레벨에서 필요한 디렉토리 생성 (root 또는 oracle 계정)
mkdir -p /u01/oradata/ORCL
mkdir -p /u02/oradata/ORCL
mkdir -p /u01/fast_recovery_area/ORCL
# oracle 계정에 소유권 부여
chown -R oracle:oinstall /u01/oradata/ORCL
chown -R oracle:oinstall /u02/oradata/ORCL
chown -R oracle:oinstall /u01/fast_recovery_area
# 권한 설정
chmod 750 /u01/oradata/ORCL
chmod 750 /u02/oradata/ORCL
-- 디렉토리 확인 후 CREATE DATABASE 실행 예시
CREATE DATABASE ORCL
USER SYS IDENTIFIED BY "SysPass#2024"
USER SYSTEM IDENTIFIED BY "SysPass#2024"
LOGFILE GROUP 1 ('/u01/oradata/ORCL/redo01a.log',
'/u02/oradata/ORCL/redo01b.log') SIZE 200M BLOCKSIZE 512,
GROUP 2 ('/u01/oradata/ORCL/redo02a.log',
'/u02/oradata/ORCL/redo02b.log') SIZE 200M BLOCKSIZE 512,
GROUP 3 ('/u01/oradata/ORCL/redo03a.log',
'/u02/oradata/ORCL/redo03b.log') SIZE 200M BLOCKSIZE 512
MAXLOGFILES 32
MAXLOGMEMBERS 5
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/oradata/ORCL/system01.dbf' SIZE 1G REUSE AUTOEXTEND ON
SYSAUX DATAFILE '/u01/oradata/ORCL/sysaux01.dbf' SIZE 1G REUSE AUTOEXTEND ON
DEFAULT TABLESPACE USERS
DATAFILE '/u01/oradata/ORCL/users01.dbf' SIZE 500M REUSE AUTOEXTEND ON
DEFAULT TEMPORARY TABLESPACE TEMP
TEMPFILE '/u01/oradata/ORCL/temp01.dbf' SIZE 500M REUSE AUTOEXTEND ON
UNDO TABLESPACE UNDOTBS1
DATAFILE '/u01/oradata/ORCL/undotbs01.dbf' SIZE 1G REUSE AUTOEXTEND ON;
원인 3 해결: 기존 인스턴스 및 파일 정리
-- 기존 인스턴스가 살아있다면 먼저 종료
SHUTDOWN ABORT;
-- 동일 SID의 인스턴스가 없는지 OS에서 확인 (bash)
-- ps -ef | grep pmon
-- ipcs -a (공유 메모리/세마포어 잔존 여부 확인)
# 기존 컨트롤 파일, 데이터 파일 삭제 (주의: 운영 환경에서는 절대 실행 금지)
rm -f /u01/oradata/ORCL/*.ctl
rm -f /u01/oradata/ORCL/*.dbf
rm -f /u01/oradata/ORCL/*.log
rm -f /u02/oradata/ORCL/*.ctl
rm -f /u02/oradata/ORCL/*.log
-- REUSE 옵션을 사용하여 기존 파일을 덮어쓰기 허용
-- (파일이 남아 있지만 재사용 가능할 때)
CREATE DATABASE ORCL
...
DATAFILE '/u01/oradata/ORCL/system01.dbf' SIZE 1G REUSE
...;
Alert Log 확인 방법
ORA-01501은 항상 동반 에러가 존재합니다. 반드시 alert log를 확인하세요.
-- Alert log 위치 확인
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
-- Oracle 12c 이후: ADRCI 도구 활용
-- $ adrci
-- adrci> show alert -tail 100
-- V$DIAG_ALERT_EXT 뷰를 통한 최근 에러 조회 (12c 이상)
SELECT ORIGINATING_TIMESTAMP, MESSAGE_TEXT
FROM V$DIAG_ALERT_EXT
WHERE MESSAGE_TEXT LIKE '%ORA-%'
AND ORIGINATING_TIMESTAMP > SYSDATE - 1/24
ORDER BY ORIGINATING_TIMESTAMP DESC;
예방 방법
1. DBCA(Database Configuration Assistant) 활용 및 사전 검증 스크립트 실행
수작업으로 CREATE DATABASE를 실행하기 전에 Oracle이 제공하는 DBCA 도구를 사용하면 파라미터, 디렉토리, 권한을 자동으로 검증해 줍니다. 만약 스크립트 방식을 선호한다면, 아래와 같이 사전 점검 쿼리를 실행하여 필수 조건이 모두 충족되었는지 확인한 후 생성 명령을 실행하는 것이 실무 Best Practice입니다.
-- 인스턴스 상태 확인 (반드시 STARTED 상태여야 함)
SELECT STATUS FROM V$INSTANCE;
-- 현재 파라미터 전체 확인
SELECT NAME, VALUE, DESCRIPTION
FROM V$PARAMETER
WHERE NAME IN ('db_name','db_block_size','control_files',
'db_recovery_file_dest','undo_tablespace')
ORDER BY NAME;
2. 표준화된 데이터베이스 생성 스크립트 템플릿 관리
조직 내에서 검증된 CREATE DATABASE 스크립트 템플릿을 형상 관리 도구(Git 등)로 관리하고, 환경별 파라미터만 변수로 치환하여 재사용하는 방식을 권장합니다. 이렇게 하면 새 환경을 구축할 때마다 동일한 실수가 반복되는 것을 방지할 수 있으며, 감사(Audit) 목적으로도 활용할 수 있습니다.
관련 에러
| 에러 코드 | 설명 |
|———–|——|
| ORA-01503 | CREATE CONTROLFILE failed — 컨트롤 파일 생성 실패, ORA-01501과 함께 자주 발생 |
| ORA-00200 | control file could not be created — 컨트롤 파일 경로 또는 권한 문제 |
| ORA-01100 | database already mounted — 이미 마운트된 데이터베이스와 충돌 |
| ORA-01102 | cannot mount database in EXCLUSIVE mode — 동일 SID 인스턴스 중복 기동 |
| ORA-27040 | file create error, unable to create file — OS 레벨 파일 생성 실패 |
위 에러들은 ORA-01501이 발생할 때 alert log에 함께 기록되는 경우가 많으므로, ORA-01501을 만났다면 반드시 이 에러 코드들도 함께 추적해야 합니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.