Oracle ORA-01543 오류 원인과 해결 방법 완벽 가이드

ORA-01543
2026년 07월 22일 | DBMS Error 가이드

이 글에서 다루는 내용

ORA-01543 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.

ORA-01543 tablespace already exists 는?

ORA-01543 에러는 이미 데이터베이스에 존재하는 이름의 테이블스페이스를 다시 생성하려고 할 때 발생하는 오류입니다. Oracle은 테이블스페이스 이름을 데이터베이스 내에서 고유하게 유지하기 때문에, 동일한 이름으로 CREATE TABLESPACE 구문을 실행하면 즉시 이 에러가 발생합니다. 이 에러는 신규 환경 구축 스크립트를 반복 실행하거나, 다른 DBA가 이미 생성한 테이블스페이스를 인지하지 못한 채 작업할 때 특히 자주 발생합니다.


주요 발생 원인

  • 설치/구성 스크립트의 중복 실행

데이터베이스 초기 구성 스크립트나 애플리케이션 배포 스크립트를 멱등성(idempotency) 처리 없이 작성한 경우, 동일한 스크립트를 두 번 이상 실행하면 반드시 ORA-01543 에러가 발생합니다. 특히 CI/CD 파이프라인이나 자동화 배포 환경에서는 스크립트가 여러 번 실행되는 상황이 빈번하게 발생하므로, 사전에 존재 여부를 체크하는 로직이 반드시 포함되어야 합니다.

  • 테이블스페이스 이름 충돌 (명명 규칙 미준수)

여러 DBA가 동일한 데이터베이스를 관리하거나 팀 내 커뮤니케이션이 부재한 경우, 서로 다른 담당자가 동일하거나 유사한 이름의 테이블스페이스를 생성하려는 시도가 발생할 수 있습니다. 또한 표준화된 명명 규칙(Naming Convention)이 없는 환경에서는 DATA, INDEX, TEMP와 같이 일반적인 이름이 이미 사용 중일 가능성이 매우 높습니다.

  • DROP 후 재생성 타이밍 오류 또는 DROP 실패

테이블스페이스를 삭제(DROP TABLESPACE)한 후 재생성하는 작업을 수행할 때, DROP이 정상적으로 완료되지 않았거나 트랜잭션이 롤백된 상태에서 CREATE TABLESPACE를 실행하면 ORA-01543가 발생합니다. 특히 DROP TABLESPACE 명령이 내부적으로 오류를 발생시키고 예외 처리 없이 다음 단계로 넘어가는 스크립트 구조를 갖고 있을 때 이 문제가 발생합니다.


해결 방법

해결책 1: 테이블스페이스 존재 여부 사전 확인

CREATE TABLESPACE를 실행하기 전에 반드시 DBA_TABLESPACES 또는 V$TABLESPACE 뷰를 조회하여 존재 여부를 확인합니다.

-- 테이블스페이스 존재 여부 확인
SELECT tablespace_name, status, contents
FROM dba_tablespaces
WHERE tablespace_name = 'MY_DATA_TBS';

-- 결과가 없을 경우에만 생성 (PL/SQL 블록 활용)
DECLARE
  v_count NUMBER;
BEGIN
  SELECT COUNT(*)
  INTO v_count
  FROM dba_tablespaces
  WHERE tablespace_name = 'MY_DATA_TBS';

  IF v_count = 0 THEN
    EXECUTE IMMEDIATE '
      CREATE TABLESPACE MY_DATA_TBS
      DATAFILE ''/oradata/ORCL/my_data_tbs01.dbf'' SIZE 500M
      AUTOEXTEND ON NEXT 100M MAXSIZE 10G
      EXTENT MANAGEMENT LOCAL
      SEGMENT SPACE MANAGEMENT AUTO';
    DBMS_OUTPUT.PUT_LINE('테이블스페이스 MY_DATA_TBS 생성 완료.');
  ELSE
    DBMS_OUTPUT.PUT_LINE('테이블스페이스 MY_DATA_TBS 이미 존재합니다. 생성을 건너뜁니다.');
  END IF;
END;
/

해결책 2: 기존 테이블스페이스 확인 후 사용

이미 동일한 이름의 테이블스페이스가 존재한다면, 굳이 삭제하고 재생성할 필요가 없는 경우가 대부분입니다. 기존 테이블스페이스의 상태와 용량을 확인하고, 필요하다면 데이터파일을 추가하는 방식으로 대응합니다.

-- 기존 테이블스페이스 상세 정보 확인
SELECT
    t.tablespace_name,
    t.status,
    t.contents,
    t.extent_management,
    ROUND(SUM(d.bytes) / 1024 / 1024, 2) AS total_mb,
    ROUND(SUM(d.bytes - NVL(f.free_bytes, 0)) / 1024 / 1024, 2) AS used_mb,
    ROUND(NVL(SUM(f.free_bytes), 0) / 1024 / 1024, 2) AS free_mb
FROM dba_tablespaces t
JOIN dba_data_files d ON t.tablespace_name = d.tablespace_name
LEFT JOIN (
    SELECT tablespace_name, SUM(bytes) AS free_bytes
    FROM dba_free_space
    GROUP BY tablespace_name
) f ON t.tablespace_name = f.tablespace_name
WHERE t.tablespace_name = 'MY_DATA_TBS'
GROUP BY t.tablespace_name, t.status, t.contents, t.extent_management;

-- 용량이 부족하다면 데이터파일 추가
ALTER TABLESPACE MY_DATA_TBS
ADD DATAFILE '/oradata/ORCL/my_data_tbs02.dbf' SIZE 500M
AUTOEXTEND ON NEXT 100M MAXSIZE 10G;

해결책 3: 삭제 후 재생성이 반드시 필요한 경우

테이블스페이스를 완전히 삭제하고 다시 생성해야 하는 경우라면, DROP 명령의 성공 여부를 반드시 확인한 후 CREATE를 수행해야 합니다.

-- 테이블스페이스 내 객체 포함 완전 삭제 (주의: 데이터 영구 삭제!)
-- 운영 환경에서는 반드시 백업 후 수행할 것
DROP TABLESPACE MY_DATA_TBS
INCLUDING CONTENTS AND DATAFILES
CASCADE CONSTRAINTS;

-- 삭제 확인
SELECT COUNT(*)
FROM dba_tablespaces
WHERE tablespace_name = 'MY_DATA_TBS';
-- 결과가 0이면 정상 삭제된 것

-- 재생성
CREATE TABLESPACE MY_DATA_TBS
DATAFILE '/oradata/ORCL/my_data_tbs01.dbf' SIZE 500M
AUTOEXTEND ON NEXT 100M MAXSIZE 10G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

예방 방법

  • 스크립트 멱등성(Idempotency) 보장

데이터베이스 구성 스크립트는 몇 번을 실행해도 동일한 결과를 보장할 수 있도록 작성해야 합니다. 모든 CREATE TABLESPACE 구문은 위에서 소개한 PL/SQL 존재 여부 확인 로직으로 감싸거나, 팀 내 공유 라이브러리 형태로 표준화하여 관리하는 것이 Best Practice입니다. 또한 Liquibase나 Flyway와 같은 데이터베이스 마이그레이션 도구를 활용하면 변경 이력을 체계적으로 관리하고 중복 실행을 자동으로 방지할 수 있습니다.

  • 테이블스페이스 명명 규칙 및 중앙 관리 체계 수립

팀 또는 조직 차원에서 테이블스페이스 명명 규칙을 문서화하고, 신규 테이블스페이스 생성 전에 담당 DBA의 승인 프로세스를 거치도록 운영 절차를 수립합니다. 예를 들어 [프로젝트명]_[용도]_TBS 형태(예: ERP_DATA_TBS, ERP_IDX_TBS)와 같은 규칙을 적용하면 이름 충돌을 사전에 방지할 수 있습니다. 주기적으로 DBA_TABLESPACES 뷰를 점검하여 불필요하거나 오래된 테이블스페이스를 정리하는 습관도 중요합니다.


관련 에러

  • ORA-01516: 존재하지 않는 로그 파일, 데이터 파일 또는 테이블스페이스를 참조할 때 발생하는 에러로, 테이블스페이스 삭제 후 관련 객체를 참조할 때 연이어 발생할 수 있습니다.
  • ORA-01119: 데이터베이스 파일 생성 실패 에러로, CREATE TABLESPACE 시 지정한 파일 경로가 이미 존재하거나 권한 문제가 있을 때 ORA-01543와 함께 복합적으로 나타날 수 있습니다.
  • ORA-00959: 존재하지 않는 테이블스페이스를 지정하여 테이블 생성 등을 시도할 때 발생하는 에러로, 테이블스페이스 관리 오류와 밀접하게 연관됩니다.
DBMS 에러 코드 시리즈

주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.

본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.

댓글 남기기