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

ORA-01129
2026년 07월 08일 | DBMS Error 가이드

이 글에서 다루는 내용

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

ORA-01129 user’s default or temporary tablespace does not exist 는?

ORA-01129 에러는 데이터베이스 사용자에게 할당된 기본(Default) 테이블스페이스 또는 임시(Temporary) 테이블스페이스가 실제로 존재하지 않을 때 발생합니다. 이 에러는 주로 테이블스페이스가 삭제된 후에도 해당 테이블스페이스를 참조하는 사용자 계정이 남아 있거나, 데이터베이스 마이그레이션·복구 작업 후 테이블스페이스 구성이 불일치할 때 나타납니다. 사용자가 로그인을 시도하거나 DDL/DML 작업을 수행할 때 Oracle이 내부적으로 해당 테이블스페이스의 존재 여부를 검증하는 과정에서 오류가 트리거됩니다.


주요 발생 원인

1. 테이블스페이스 강제 삭제 (DROP TABLESPACE)

가장 빈번한 원인으로, DBA가 특정 테이블스페이스를 삭제할 때 해당 테이블스페이스를 Default 또는 Temporary로 사용하고 있는 사용자 계정의 설정을 미리 변경하지 않은 경우입니다. DROP TABLESPACE ... INCLUDING CONTENTS AND DATAFILES 구문을 사용해 테이블스페이스를 완전히 제거하면, Oracle은 사용자 딕셔너리(DBA_USERS)에는 삭제된 테이블스페이스 이름을 그대로 유지하지만 실제 물리적 테이블스페이스는 존재하지 않는 불일치 상태가 발생합니다.

2. 데이터베이스 마이그레이션 또는 복원 후 테이블스페이스 불일치

Data Pump(expdp/impdp), RMAN 복구, 또는 수동 복원 작업 시 원본 데이터베이스에 존재하던 테이블스페이스가 대상 데이터베이스에는 생성되지 않은 경우 이 에러가 발생합니다. 특히 부분 임포트(특정 스키마만 복원)를 수행할 때 사용자의 Default/Temporary 테이블스페이스가 임포트 범위에 포함되지 않아 누락되는 경우가 실무에서 자주 목격됩니다.

3. 수동 딕셔너리 조작 또는 업그레이드 오류

일부 특수한 경우, 데이터베이스 버전 업그레이드 과정에서 내부 딕셔너리 동기화 오류가 발생하거나, SYS 권한으로 딕셔너리 테이블을 직접 조작한 결과로 사용자와 테이블스페이스 간의 매핑 정보가 손상될 수 있습니다. USER$ 또는 TS$ 시스템 테이블의 데이터 정합성이 깨지면 사용자 접속 시 ORA-01129가 발생할 수 있으며, 이 경우는 가장 해결이 까다로운 유형에 속합니다.


해결 방법

1단계: 현재 상태 진단

먼저 어떤 사용자에게 문제가 있는지, 어떤 테이블스페이스가 존재하는지 확인합니다.

-- 문제가 있는 사용자 확인 (존재하지 않는 테이블스페이스 참조)
SELECT u.username,
       u.default_tablespace,
       u.temporary_tablespace,
       CASE WHEN dt.tablespace_name IS NULL THEN 'DEFAULT TS MISSING' ELSE 'OK' END AS default_status,
       CASE WHEN tt.tablespace_name IS NULL THEN 'TEMP TS MISSING' ELSE 'OK' END AS temp_status
FROM dba_users u
LEFT JOIN dba_tablespaces dt ON u.default_tablespace = dt.tablespace_name
LEFT JOIN dba_tablespaces tt ON u.temporary_tablespace = tt.tablespace_name
WHERE dt.tablespace_name IS NULL
   OR tt.tablespace_name IS NULL;

-- 현재 데이터베이스에 존재하는 테이블스페이스 목록
SELECT tablespace_name, status, contents
FROM dba_tablespaces
ORDER BY contents, tablespace_name;

2단계: 사용자의 Default/Temporary 테이블스페이스 변경

가장 직접적인 해결 방법은 사용자의 테이블스페이스 설정을 현재 존재하는 테이블스페이스로 변경하는 것입니다.

-- 기본 테이블스페이스 변경
ALTER USER 문제_사용자명 DEFAULT TABLESPACE USERS;

-- 임시 테이블스페이스 변경
ALTER USER 문제_사용자명 TEMPORARY TABLESPACE TEMP;

-- 변경 결과 확인
SELECT username, default_tablespace, temporary_tablespace
FROM dba_users
WHERE username = '문제_사용자명';

3단계: 누락된 테이블스페이스 재생성 (마이그레이션 케이스)

마이그레이션 후 원래 테이블스페이스를 복원해야 하는 경우, 새로 생성합니다.

-- 누락된 일반 테이블스페이스 재생성 예시
CREATE TABLESPACE APP_DATA
  DATAFILE '/u01/oradata/ORCL/app_data01.dbf' SIZE 500M
  AUTOEXTEND ON NEXT 100M MAXSIZE 10G
  EXTENT MANAGEMENT LOCAL
  SEGMENT SPACE MANAGEMENT AUTO;

-- 누락된 임시 테이블스페이스 재생성 예시
CREATE TEMPORARY TABLESPACE APP_TEMP
  TEMPFILE '/u01/oradata/ORCL/app_temp01.dbf' SIZE 200M
  AUTOEXTEND ON NEXT 50M MAXSIZE 2G
  EXTENT MANAGEMENT LOCAL;

-- 재생성 후 사용자에게 재할당
ALTER USER 문제_사용자명 DEFAULT TABLESPACE APP_DATA;
ALTER USER 문제_사용자명 TEMPORARY TABLESPACE APP_TEMP;

4단계: 다수의 영향받은 사용자 일괄 처리

여러 사용자가 동시에 영향을 받은 경우, 스크립트를 생성하여 일괄 처리합니다.

-- 영향받은 모든 사용자에 대한 ALTER USER 스크립트 자동 생성
SELECT 'ALTER USER ' || u.username ||
       ' DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;' AS fix_script
FROM dba_users u
LEFT JOIN dba_tablespaces dt ON u.default_tablespace = dt.tablespace_name
LEFT JOIN dba_tablespaces tt ON u.temporary_tablespace = tt.tablespace_name
WHERE (dt.tablespace_name IS NULL OR tt.tablespace_name IS NULL)
  AND u.username NOT IN ('SYS', 'SYSTEM', 'DBSNMP', 'OUTLN');

-- 데이터베이스 전체 기본 임시 테이블스페이스 확인 및 설정
SELECT * FROM database_properties
WHERE property_name IN ('DEFAULT_TEMP_TABLESPACE', 'DEFAULT_PERMANENT_TABLESPACE');

-- 데이터베이스 기본값 변경 (필요 시)
ALTER DATABASE DEFAULT TABLESPACE USERS;
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;

예방 방법

1. 테이블스페이스 삭제 전 의존성 사전 점검 프로세스 수립

테이블스페이스를 삭제하기 전에 반드시 해당 테이블스페이스를 Default 또는 Temporary로 사용하는 사용자가 있는지 확인하는 절차를 표준 운영 프로세스(SOP)로 정착시켜야 합니다. 아래 쿼리를 체크리스트에 포함하여 삭제 전에 실행하고, 영향받는 사용자가 있다면 먼저 ALTER USER 명령으로 테이블스페이스를 변경한 후 삭제를 진행해야 합니다.

-- 테이블스페이스 삭제 전 의존성 체크 쿼리
SELECT username, default_tablespace, temporary_tablespace
FROM dba_users
WHERE default_tablespace = '삭제할_TS명'
   OR temporary_tablespace = '삭제할_TS명';

2. 마이그레이션/복원 후 테이블스페이스 정합성 검증 자동화

데이터베이스 마이그레이션, 임포트, RMAN 복구 작업 완료 직후에는 반드시 아래 검증 쿼리를 실행하는 것을 표준 절차로 수립해야 합니다. CI/CD 파이프라인이나 운영 스크립트에 이 검증 단계를 포함시키면, 불일치 상태를 조기에 감지하여 실제 서비스 장애로 이어지기 전에 조치를 취할 수 있습니다.

-- 마이그레이션 후 정합성 검증 스크립트
SELECT COUNT(*) AS inconsistent_user_count
FROM dba_users u
LEFT JOIN dba_tablespaces dt ON u.default_tablespace = dt.tablespace_name
LEFT JOIN dba_tablespaces tt ON u.temporary_tablespace = tt.tablespace_name
WHERE dt.tablespace_name IS NULL
   OR tt.tablespace_name IS NULL;
-- 결과가 0이 아니면 즉시 조치 필요

관련 에러

  • ORA-00959: DROP TABLESPACE 시 존재하지 않는 테이블스페이스를 명시했을 때 발생하며, ORA-01129와 함께 테이블스페이스 관리 오류에서 자주 쌍으로 등장합니다.
  • ORA-01647: 임시 테이블스페이스가 아닌 일반 테이블스페이스를 Temporary로 지정하려 할 때 발생하며, 임시 테이블스페이스 설정 과정에서 ORA-01129 해결 시 주의해야 합니다.
  • ORA-01536: 테이블스페이스에 대한 공간 할당량(Quota) 초과 시 발생하며, 테이블스페이스 재구성 후 쿼터 설정을 함께 확인해야 합니다.
  • ORA-25153: 임시 테이블스페이스가 비어 있거나(Tempfile 없음) 사용 불가한 상태일 때 발생하며, 임시 테이블스페이스 재생성 후 Tempfile 추가 여부를 반드시 확인해야 합니다.
DBMS 에러 코드 시리즈

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

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

댓글 남기기