2026년 07월 22일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01540 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01540 tablespace is not offline 는?
ORA-01540 에러는 특정 테이블스페이스가 오프라인 상태가 아닌데 오프라인 상태임을 전제로 하는 작업을 수행하려 할 때 발생합니다. 예를 들어, 오프라인 상태의 테이블스페이스에만 적용 가능한 복구(RECOVER) 명령이나 특정 데이터파일 관련 작업을 온라인 상태의 테이블스페이스에 시도할 때 이 에러가 트리거됩니다. 데이터베이스 관리자가 유지보수 절차를 진행하는 도중 테이블스페이스 상태를 확인하지 않고 명령을 실행하는 경우에 빈번하게 나타납니다.
주요 발생 원인
1. 오프라인 전제 복구 명령을 온라인 테이블스페이스에 실행
가장 흔한 원인으로, RECOVER TABLESPACE 명령은 해당 테이블스페이스가 반드시 오프라인 상태여야 실행 가능합니다. DBA가 테이블스페이스를 오프라인으로 전환하는 단계를 생략하거나 잊고 바로 복구 명령을 실행할 때 이 에러가 발생합니다. 특히 여러 테이블스페이스를 동시에 관리하는 환경에서 실수가 잦습니다.
2. 스크립트 자동화 오류로 인한 상태 불일치
배치 스크립트나 자동화된 유지보수 스크립트가 테이블스페이스를 오프라인으로 전환하는 단계에서 실패하였음에도 이후 단계(복구 또는 파일 이동 등)가 계속 실행되는 경우입니다. 스크립트 내 에러 핸들링이 미흡하면, 선행 단계의 실패를 감지하지 못하고 후속 명령이 실행되어 ORA-01540이 발생합니다. 이는 야간 배치 작업에서 특히 자주 목격됩니다.
3. 데이터파일 이동 또는 이름 변경 작업 시 절차 누락
ALTER DATABASE RENAME FILE 또는 데이터파일 경로 변경 작업은 해당 테이블스페이스를 오프라인으로 내린 후 수행해야 합니다. 절차를 제대로 숙지하지 못한 주니어 DBA나 운영자가 오프라인 전환 없이 곧바로 파일 이름 변경이나 이동 작업을 시도할 때 이 에러가 발생합니다. 이는 잘못된 절차 수행으로 인해 데이터 파일 정합성 문제로 이어질 수도 있으므로 각별한 주의가 필요합니다.
해결 방법
원인 1 해결: 테이블스페이스를 오프라인으로 전환 후 복구 수행
먼저 현재 테이블스페이스 상태를 확인합니다.
-- 테이블스페이스 현재 상태 확인
SELECT tablespace_name, status
FROM dba_tablespaces
WHERE tablespace_name = 'YOUR_TABLESPACE_NAME';
테이블스페이스가 ONLINE 상태라면, 아래 명령으로 오프라인 전환 후 복구를 진행합니다.
-- 테이블스페이스를 오프라인으로 전환
ALTER TABLESPACE your_tablespace_name OFFLINE;
-- 복구 수행
RECOVER TABLESPACE your_tablespace_name;
-- 복구 완료 후 온라인으로 복귀
ALTER TABLESPACE your_tablespace_name ONLINE;
SYSTEM 테이블스페이스처럼 오프라인이 불가한 테이블스페이스의 경우, 데이터베이스를 마운트 상태로 전환한 후 복구를 수행해야 합니다.
-- MOUNT 상태에서의 복구 (SYSTEM 테이블스페이스 등)
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RECOVER DATABASE;
ALTER DATABASE OPEN;
원인 2 해결: 스크립트 내 상태 검증 로직 추가
자동화 스크립트에서는 테이블스페이스 상태를 명시적으로 확인하고 오프라인 전환을 보장해야 합니다.
-- 테이블스페이스 상태 확인 후 조건부 오프라인 전환 예시
DECLARE
v_status VARCHAR2(20);
BEGIN
SELECT status INTO v_status
FROM dba_tablespaces
WHERE tablespace_name = 'YOUR_TABLESPACE_NAME';
IF v_status = 'ONLINE' THEN
EXECUTE IMMEDIATE 'ALTER TABLESPACE your_tablespace_name OFFLINE';
DBMS_OUTPUT.PUT_LINE('Tablespace is now OFFLINE. Proceeding with recovery.');
ELSIF v_status = 'OFFLINE' THEN
DBMS_OUTPUT.PUT_LINE('Tablespace is already OFFLINE.');
ELSE
DBMS_OUTPUT.PUT_LINE('Tablespace status: ' || v_status || '. Manual intervention required.');
END IF;
END;
/
원인 3 해결: 데이터파일 이동 시 정확한 절차 준수
데이터파일 이름 변경 또는 이동의 정확한 절차는 다음과 같습니다.
-- 1단계: 테이블스페이스 오프라인 전환
ALTER TABLESPACE your_tablespace_name OFFLINE;
-- 2단계: OS 레벨에서 파일 복사 또는 이동 (OS 명령어 사용)
-- 예: cp /old_path/datafile.dbf /new_path/datafile.dbf
-- 3단계: 데이터파일 경로 변경 등록
ALTER TABLESPACE your_tablespace_name
RENAME DATAFILE '/old_path/datafile.dbf'
TO '/new_path/datafile.dbf';
-- 4단계: 테이블스페이스 온라인 복귀
ALTER TABLESPACE your_tablespace_name ONLINE;
-- 5단계: 변경 사항 확인
SELECT file_name, status
FROM dba_data_files
WHERE tablespace_name = 'YOUR_TABLESPACE_NAME';
현재 모든 테이블스페이스 상태 일괄 확인 쿼리
-- 전체 테이블스페이스 및 데이터파일 상태 점검
SELECT
t.tablespace_name,
t.status AS ts_status,
d.file_name,
d.status AS file_status,
ROUND(d.bytes / 1024 / 1024, 2) AS size_mb
FROM dba_tablespaces t
JOIN dba_data_files d
ON t.tablespace_name = d.tablespace_name
ORDER BY t.tablespace_name;
예방 방법
1. 모든 테이블스페이스 작업 전 상태 점검 체크리스트 수립
테이블스페이스 관련 복구, 이동, 이름 변경 등 모든 유지보수 작업 전에 반드시 현재 상태를 DBA_TABLESPACES 및 V$TABLESPACE 뷰를 통해 확인하는 절차를 표준화하십시오. 작업 전후 상태를 기록으로 남겨 변경 이력을 관리하면 장애 발생 시 신속한 원인 파악이 가능합니다.
2. 자동화 스크립트에 에러 핸들링 및 상태 검증 로직 필수 포함
배치 또는 자동화 스크립트를 작성할 때는 반드시 각 단계별 에러 핸들링과 선행 조건 검증(Precondition Validation) 로직을 포함시키십시오. 특히 오프라인 전환 명령 실행 후 실제로 오프라인 상태가 되었는지 DBA_TABLESPACES를 재조회하여 확인하는 루프 또는 대기 로직을 삽입하면 상태 불일치로 인한 에러를 사전에 방지할 수 있습니다.
관련 에러
- ORA-01539:
tablespace is not online— 테이블스페이스가 온라인 상태가 아닌 경우 발생하며, ORA-01540과 반대 상황에서 나타납니다. - ORA-01542:
tablespace is offline, cannot allocate space in it— 오프라인 테이블스페이스에 공간을 할당하려 할 때 발생합니다. - ORA-00376:
file cannot be read at this time— 오프라인 데이터파일에 접근하려 할 때 연관되어 발생할 수 있습니다. - ORA-01110:
data file N: 'filename'— 특정 데이터파일과 관련된 에러 발생 시 ORA-01540과 함께 스택에 나타나는 경우가 많습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.